Lisp Scheme Part41 (858レス)
上下前次1-新
740(1): デフォルトの名無しさん [] 2025/07/09(水) 04:41:41.15 ID:qReXyC09(2/3) AAS
>>739スペシャルフォームでもなくマクロでもなく
普通の関数として書いてしまえちゃうだろって話
そのために必要な道具立てはインラインクロージャのみ
741: デフォルトの名無しさん [sage] 2025/07/09(水) 09:01:01.99 ID:IjsShBy4(1) AAS
わからん。コンパイラ頑張ります宣言ではないのか?
742: デフォルトの名無しさん [sage] 2025/07/09(水) 09:07:00.67 ID:Bk08chKM(1) AAS
AIと壁打ちして「理解」した内容を妥当性の検証もしないまま書き込んでそうだな
743(1): デフォルトの名無しさん [] 2025/07/09(水) 09:37:43.40 ID:qReXyC09(3/3) AAS
ファーストラムダというのは
((lambda
この形のこと
つまり、lambdaを呼んで返ってきた関数オブジェクトを即座にもう一度呼んでる
このときに関数呼び出しをせず、インライン関数として展開してしまう
もちろんスタックフレームは作られない
letだとかwhileだとか、実質的に制御構造に過ぎないものは軒並みこの形をしている
744: デフォルトの名無しさん [] 2025/07/09(水) 12:22:27.67 ID:EKMDM/sM(1) AAS
742
最近そういうの増えた
丸飲みコピペじゃなくて
消化してから吐き出して欲しい
745(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 13:05:25.01 ID:ZKntcAAj(1/7) AAS
オペランドを評価しない関数 fexpr を導入することでスペシャルフォームを手続きと同列にファーストクラスオブジェクトとして扱うアイデアはあるよ。
それを整理して scheme 風言語として構築したものもある。
外部リンク[html]:web.cs.wpi.edu
まあそれはそれとして、
>>738738(2): デフォルトの名無しさん [] 2025/07/09(水) 01:41:00.59 ID:qReXyC09(1/3) AAS
どのへんが既出なんだか教えてほしいもんだがまあいいや
これはテイルコールみたいにファーストラムダの最適化も必須にしませんかという提案だ
それが実現すれば、内部的に無名関数を呼ぶことで実装されていた制御構造が軒並みその最適化にかかる
「C言語が中括弧を開くような感覚で関数を呼んじゃう」というのはLISPの本当に欠点らしい欠点の筆頭だから、
それが改善されればLISPの使い道が違ってくる可能性がある
> 内部的に無名関数を呼ぶことで実装
と最適化の話を繋げるのは意味がわからんぞ。
処理系の実装方法の一部は言語仕様として強制すべきというのが前提になってる?
746(1): デフォルトの名無しさん [] 2025/07/09(水) 14:05:12.47 ID:cmuoaTCa(1/10) AAS
>>745
>処理系の実装方法の一部は言語仕様として強制すべきというのが前提になってる?
テイルコールはそうでしょ
最適化は処理系がやってくれることを保証するので
単純ループに相当するものでもどんどん再帰の形で書きましょうってことでしょ
ファーストラムダも同じ
制御構造相当のものをlambdaを使って書いても最適化されますよってこと
747: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 14:21:01.11 ID:ZKntcAAj(2/7) AAS
>>746
> テイルコールはそうでしょ
> 最適化は処理系がやってくれることを保証するので
仕様上は
・正しく末尾再帰が行われていること
・アクティブな末尾呼出しの回数制限がないなら正しく末尾再帰が出来ている
という迂遠な表現になっている。
つまり、何が出来るべきなのかという書き方であって、どう実装すべきかに言及することを避けてる。
同様に処理系のメカニズムに言及することを避けて提案を表現してみてよ。
748(1): デフォルトの名無しさん [] 2025/07/09(水) 14:35:00.91 ID:cmuoaTCa(2/10) AAS
テイルコールってのは
call func
ret
って並んでたら
jmp func
に置き換えるんだよ
ファーストラムダもある種の関数のインライン展開ってだけ
749(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 14:40:18.45 ID:ZKntcAAj(3/7) AAS
>>748
テイルコールの説明なんか要らん。 知ってるから。
仕様を変える提案をするなら仕様書にどう書きたいのかで説明してくれと述べてる。
750(1): デフォルトの名無しさん [] 2025/07/09(水) 14:49:42.58 ID:cmuoaTCa(3/10) AAS
>>749
>>743
751: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 14:57:26.23 ID:ZKntcAAj(4/7) AAS
>>750
意味を為さない言葉を何万回繰り返したところで何も変わらんぞ。
妥当な文章を書く能力がないならもう出来ることはない。
論外。 終わり。
752: デフォルトの名無しさん [sage] 2025/07/09(水) 15:02:22.57 ID:QwaFNVYh(1/8) AAS
>>740
ifだって普通の関数だろw
インタープリターとしての実装は単なる関数呼び出しだ
スペシャルフォームなので引数は評価せず渡す(通常の関数の場合は評価した結果を渡す)
で、(バイト)コンパイラーはifは関数呼び出しにはせず条件ジャンプ命令列に置き換える
そんな事は古代からやってる
自分で処理系を実装した事あれば誰でも知ってる
753: デフォルトの名無しさん [] 2025/07/09(水) 15:28:36.71 ID:cmuoaTCa(4/10) AAS
マクロだっていう反論が来るのかと思ったらスペシャルフォームだというので戸惑ってるw
そりゃいくつかの関数はミニマルコアとして書かなきゃいけないさ
それさえあれば関数とマクロと制御構造は統一できる、というのが言い分
754: デフォルトの名無しさん [sage] 2025/07/09(水) 15:34:56.94 ID:QwaFNVYh(2/8) AAS
ミニマルコアって何だ?
スペシャルフォームとマクロは引数を評価しないで渡す関数として実装される
そんなのは初期の頃からだと言っている
何で今さら発見した面してんのか?と言うことだ
755: デフォルトの名無しさん [sage] 2025/07/09(水) 15:40:52.83 ID:QwaFNVYh(3/8) AAS
引数を評価しないで渡す関数という点で、マクロとスペシャルフォームは同一の実装と言える
しかしマクロは環境を受け取らないといけないし、戻り値を再度評価する必要があるから、スペシャルフォームとマクロは区別する必要がある
756: デフォルトの名無しさん [sage] 2025/07/09(水) 15:42:40.68 ID:QwaFNVYh(4/8) AAS
更に、スペシャルフォームはifの様にコンパイラーが特殊なコンパイルをする必要があるので、普通の関数と区別する必要がある点も重要だ
757(1): デフォルトの名無しさん [] 2025/07/09(水) 15:45:21.52 ID:cmuoaTCa(5/10) AAS
評価しないで渡したい引数のうち、制御に関わるものならインラインクロージャでなんとかなりますよって話だよ
レキシカルにちゃんとしたクロージャをインライン展開される前提で引数として渡すんだよ
758: デフォルトの名無しさん [sage] 2025/07/09(水) 15:46:21.90 ID:QwaFNVYh(5/8) AAS
しかしながら、普通の関数でもスペシャルフォームの様な特殊なコンパイルをしたい場合があるので、その為にコンパイラーマクロが存在する
ただほとんど使われない
759(1): デフォルトの名無しさん [sage] 2025/07/09(水) 15:48:37.80 ID:QwaFNVYh(6/8) AAS
>>757
インライン関数はマクロで実装できる
環境もちゃんとハンドリング出来るので、インラインクロージャーもマクロで実装可能だ
何がしたいのか良く分からない…
760: デフォルトの名無しさん [sage] 2025/07/09(水) 15:50:14.77 ID:QwaFNVYh(7/8) AAS
mapcarに渡したlambdaをインライン展開したいと言うなら、mapcarを(コンパイラー)マクロにすれば可能だ
761: デフォルトの名無しさん [] 2025/07/09(水) 15:56:45.13 ID:cmuoaTCa(6/10) AAS
>>759
テイルコールみたいにファーストラムダ最適化も必須にすればインライン展開される分速くなる
762: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 16:17:26.50 ID:ZKntcAAj(5/7) AAS
最適化するために仕様の改定が必要か?
763: デフォルトの名無しさん [] 2025/07/09(水) 16:32:28.96 ID:eQ8lOX87(2/4) AAS
>>738
どのへんが既出なんだか教えてほしいということならALGOLとサンクのコンパイル研究あたりで出尽していると思うから60年前には既に研究レベルでなく, 実践されていたのではないか.AIにきいてもわからなかったか?
AIに尋ねたら1960年代初頭でサンクのインライン展開も含めてアイデアは出尽しているといわれた.
ついでにSMALLTALKとIFとブロックについても調べてみろよ.
LISPの関数呼び出しの最適化についてもおまえは50年前あたりの認識をしている. 当然SBCLあたりの最適化はおまえよりずっと先をいってる.
764: デフォルトの名無しさん [sage] 2025/07/09(水) 17:07:46.42 ID:ohpjpVt+(1/2) AAS
>ファーストラムダというのは
「ファーストラムダ」という言葉は、通常、AWS Lambdaを指すスラングとして使われることがあります。AWS Lambdaは、サーバーレスコンピューティングサービスで、コードをサーバーの管理なしに実行できます。
上下前次1-新書関写板覧索設栞歴
あと 94 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.018s