Lisp Scheme Part41 (855レス)
上下前次1-新
732: 07/04(金)19:22 ID:rrB9liNl(1) AAS
>>730
典型的な比較言語学者っぽいけどlisp関連(cl/el/scheme全部あったかな?)はまあいい
章立てがグッチャグチャだけど本人の趣味かパズルの例題が多くてそこはやってみる価値あり
733: 07/06(日)09:51 ID:jyZjYPic(1) AAS
>>728もそうだけれどlispはパズル系は素直に書けていいものだと思った(特にcl)
マルチパラダイムだから色々な方針の実装も楽しいぞ
なんなら定番(場合によっては実装が提供される)であり、論理プログラミングのPrologのcl実装も山程あるからとても素直に解ける
734: 07/08(火)19:29 ID:lEBcQUbL(1/2) AAS
俺がAIに書かせまくってる論文
外部リンク:ja.wikiversity.org
735: 07/08(火)20:48 ID:sskQVz5B(1) AAS
おまえらも見習ってAIでどんどん妄想を形にしろよ
これからは論文は読むんじゃなくて生成する時代
736(1): 07/08(火)21:23 ID:lEBcQUbL(2/2) AAS
ifは関数としては書けない、ifはマクロでしか書けない、有名な話だ
ifを関数として書くとしたらthen節とelse節を関数のポインタで渡すことになる
もちろんそれでは美しくない
そこでthen節とelse節をインライン関数として渡すという手がある
これならば節は関数呼び出しでなく同じレベルに展開される
さらにif関数自身もインライン関数にしてしまう
すると制御構造のifとそっくり同じものが手に入るのだ
ここにインライン関数と制御構造は美しい等価関係で結ばれるのである
LISP系の言語でこの最適化を自動でやるのがファーストラムダである
737: 07/09(水)00:29 ID:eQ8lOX87(1/4) AAS
半世紀以上前に研究されてたようなことを今考えているのか?
738(2): 07/09(水)01:41 ID:qReXyC09(1/3) AAS
どのへんが既出なんだか教えてほしいもんだがまあいいや
これはテイルコールみたいにファーストラムダの最適化も必須にしませんかという提案だ
それが実現すれば、内部的に無名関数を呼ぶことで実装されていた制御構造が軒並みその最適化にかかる
「C言語が中括弧を開くような感覚で関数を呼んじゃう」というのはLISPの本当に欠点らしい欠点の筆頭だから、
それが改善されればLISPの使い道が違ってくる可能性がある
739(1): 07/09(水)02:37 ID:d2bmESXo(1) AAS
>>736
それをスペシャルフォームというのだが…
無知は何でも楽しそうでいいなw
740(1): 07/09(水)04:41 ID:qReXyC09(2/3) AAS
>>739
スペシャルフォームでもなくマクロでもなく
普通の関数として書いてしまえちゃうだろって話
そのために必要な道具立てはインラインクロージャのみ
741: 07/09(水)09:01 ID:IjsShBy4(1) AAS
わからん。コンパイラ頑張ります宣言ではないのか?
742: 07/09(水)09:07 ID:Bk08chKM(1) AAS
AIと壁打ちして「理解」した内容を妥当性の検証もしないまま書き込んでそうだな
743(1): 07/09(水)09:37 ID:qReXyC09(3/3) AAS
ファーストラムダというのは
((lambda
この形のこと
つまり、lambdaを呼んで返ってきた関数オブジェクトを即座にもう一度呼んでる
このときに関数呼び出しをせず、インライン関数として展開してしまう
もちろんスタックフレームは作られない
letだとかwhileだとか、実質的に制御構造に過ぎないものは軒並みこの形をしている
744: 07/09(水)12:22 ID:EKMDM/sM(1) AAS
742
最近そういうの増えた
丸飲みコピペじゃなくて
消化してから吐き出して欲しい
745(1): はちみつ餃子 ◆8X2XSCHEME 07/09(水)13:05 ID:ZKntcAAj(1/7) AAS
オペランドを評価しない関数 fexpr を導入することでスペシャルフォームを手続きと同列にファーストクラスオブジェクトとして扱うアイデアはあるよ。
それを整理して scheme 風言語として構築したものもある。
外部リンク[html]:web.cs.wpi.edu
まあそれはそれとして、
>>738
> 内部的に無名関数を呼ぶことで実装
と最適化の話を繋げるのは意味がわからんぞ。
処理系の実装方法の一部は言語仕様として強制すべきというのが前提になってる?
746(1): 07/09(水)14:05 ID:cmuoaTCa(1/10) AAS
>>745
>処理系の実装方法の一部は言語仕様として強制すべきというのが前提になってる?
テイルコールはそうでしょ
最適化は処理系がやってくれることを保証するので
単純ループに相当するものでもどんどん再帰の形で書きましょうってことでしょ
ファーストラムダも同じ
制御構造相当のものをlambdaを使って書いても最適化されますよってこと
747: はちみつ餃子 ◆8X2XSCHEME 07/09(水)14:21 ID:ZKntcAAj(2/7) AAS
>>746
> テイルコールはそうでしょ
> 最適化は処理系がやってくれることを保証するので
仕様上は
・正しく末尾再帰が行われていること
・アクティブな末尾呼出しの回数制限がないなら正しく末尾再帰が出来ている
という迂遠な表現になっている。
つまり、何が出来るべきなのかという書き方であって、どう実装すべきかに言及することを避けてる。
同様に処理系のメカニズムに言及することを避けて提案を表現してみてよ。
748(1): 07/09(水)14:35 ID:cmuoaTCa(2/10) AAS
テイルコールってのは
call func
ret
って並んでたら
jmp func
に置き換えるんだよ
ファーストラムダもある種の関数のインライン展開ってだけ
749(1): はちみつ餃子 ◆8X2XSCHEME 07/09(水)14:40 ID:ZKntcAAj(3/7) AAS
>>748
テイルコールの説明なんか要らん。 知ってるから。
仕様を変える提案をするなら仕様書にどう書きたいのかで説明してくれと述べてる。
750(1): 07/09(水)14:49 ID:cmuoaTCa(3/10) AAS
>>749
>>743
751: はちみつ餃子 ◆8X2XSCHEME 07/09(水)14:57 ID:ZKntcAAj(4/7) AAS
>>750
意味を為さない言葉を何万回繰り返したところで何も変わらんぞ。
妥当な文章を書く能力がないならもう出来ることはない。
論外。 終わり。
752: 07/09(水)15:02 ID:QwaFNVYh(1/8) AAS
>>740
ifだって普通の関数だろw
インタープリターとしての実装は単なる関数呼び出しだ
スペシャルフォームなので引数は評価せず渡す(通常の関数の場合は評価した結果を渡す)
で、(バイト)コンパイラーはifは関数呼び出しにはせず条件ジャンプ命令列に置き換える
そんな事は古代からやってる
自分で処理系を実装した事あれば誰でも知ってる
753: 07/09(水)15:28 ID:cmuoaTCa(4/10) AAS
マクロだっていう反論が来るのかと思ったらスペシャルフォームだというので戸惑ってるw
そりゃいくつかの関数はミニマルコアとして書かなきゃいけないさ
それさえあれば関数とマクロと制御構造は統一できる、というのが言い分
754: 07/09(水)15:34 ID:QwaFNVYh(2/8) AAS
ミニマルコアって何だ?
スペシャルフォームとマクロは引数を評価しないで渡す関数として実装される
そんなのは初期の頃からだと言っている
何で今さら発見した面してんのか?と言うことだ
755: 07/09(水)15:40 ID:QwaFNVYh(3/8) AAS
引数を評価しないで渡す関数という点で、マクロとスペシャルフォームは同一の実装と言える
しかしマクロは環境を受け取らないといけないし、戻り値を再度評価する必要があるから、スペシャルフォームとマクロは区別する必要がある
756: 07/09(水)15:42 ID:QwaFNVYh(4/8) AAS
更に、スペシャルフォームはifの様にコンパイラーが特殊なコンパイルをする必要があるので、普通の関数と区別する必要がある点も重要だ
757(1): 07/09(水)15:45 ID:cmuoaTCa(5/10) AAS
評価しないで渡したい引数のうち、制御に関わるものならインラインクロージャでなんとかなりますよって話だよ
レキシカルにちゃんとしたクロージャをインライン展開される前提で引数として渡すんだよ
758: 07/09(水)15:46 ID:QwaFNVYh(5/8) AAS
しかしながら、普通の関数でもスペシャルフォームの様な特殊なコンパイルをしたい場合があるので、その為にコンパイラーマクロが存在する
ただほとんど使われない
759(1): 07/09(水)15:48 ID:QwaFNVYh(6/8) AAS
>>757
インライン関数はマクロで実装できる
環境もちゃんとハンドリング出来るので、インラインクロージャーもマクロで実装可能だ
何がしたいのか良く分からない…
760: 07/09(水)15:50 ID:QwaFNVYh(7/8) AAS
mapcarに渡したlambdaをインライン展開したいと言うなら、mapcarを(コンパイラー)マクロにすれば可能だ
761: 07/09(水)15:56 ID:cmuoaTCa(6/10) AAS
>>759
テイルコールみたいにファーストラムダ最適化も必須にすればインライン展開される分速くなる
上下前次1-新書関写板覧索設栞歴
あと 94 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.013s