Lisp Scheme Part41 (856レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
745
(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 13:05:25.01 ID:ZKntcAAj(1/7) AAS
オペランドを評価しない関数 fexpr を導入することでスペシャルフォームを手続きと同列にファーストクラスオブジェクトとして扱うアイデアはあるよ。
それを整理して scheme 風言語として構築したものもある。
外部リンク[html]:web.cs.wpi.edu

まあそれはそれとして、
>>738
738(2): デフォルトの名無しさん [] 2025/07/09(水) 01:41:00.59 ID:qReXyC09(1/3) AAS
どのへんが既出なんだか教えてほしいもんだがまあいいや
これはテイルコールみたいにファーストラムダの最適化も必須にしませんかという提案だ
それが実現すれば、内部的に無名関数を呼ぶことで実装されていた制御構造が軒並みその最適化にかかる
「C言語が中括弧を開くような感覚で関数を呼んじゃう」というのはLISPの本当に欠点らしい欠点の筆頭だから、
それが改善されればLISPの使い道が違ってくる可能性がある
> 内部的に無名関数を呼ぶことで実装

と最適化の話を繋げるのは意味がわからんぞ。
処理系の実装方法の一部は言語仕様として強制すべきというのが前提になってる?
747: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 14:21:01.11 ID:ZKntcAAj(2/7) AAS
>>746
746(1): デフォルトの名無しさん [] 2025/07/09(水) 14:05:12.47 ID:cmuoaTCa(1/10) AAS
>>745
>処理系の実装方法の一部は言語仕様として強制すべきというのが前提になってる?

テイルコールはそうでしょ
最適化は処理系がやってくれることを保証するので
単純ループに相当するものでもどんどん再帰の形で書きましょうってことでしょ

ファーストラムダも同じ
制御構造相当のものをlambdaを使って書いても最適化されますよってこと
> テイルコールはそうでしょ
> 最適化は処理系がやってくれることを保証するので

仕様上は
・正しく末尾再帰が行われていること
・アクティブな末尾呼出しの回数制限がないなら正しく末尾再帰が出来ている
という迂遠な表現になっている。

つまり、何が出来るべきなのかという書き方であって、どう実装すべきかに言及することを避けてる。

同様に処理系のメカニズムに言及することを避けて提案を表現してみてよ。
749
(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 14:40:18.45 ID:ZKntcAAj(3/7) AAS
>>748
748(1): デフォルトの名無しさん [] 2025/07/09(水) 14:35:00.91 ID:cmuoaTCa(2/10) AAS
テイルコールってのは

call func
ret

って並んでたら

jmp func

に置き換えるんだよ

ファーストラムダもある種の関数のインライン展開ってだけ
テイルコールの説明なんか要らん。 知ってるから。
仕様を変える提案をするなら仕様書にどう書きたいのかで説明してくれと述べてる。
751: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 14:57:26.23 ID:ZKntcAAj(4/7) AAS
>>750
750(1): デフォルトの名無しさん [] 2025/07/09(水) 14:49:42.58 ID:cmuoaTCa(3/10) AAS
>>749

>>743
意味を為さない言葉を何万回繰り返したところで何も変わらんぞ。
妥当な文章を書く能力がないならもう出来ることはない。
論外。 終わり。
762: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 16:17:26.50 ID:ZKntcAAj(5/7) AAS
最適化するために仕様の改定が必要か?
768: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 18:09:52.06 ID:ZKntcAAj(6/7) AAS
Scheme はコンパイル結果を気楽に見る方法がないことも多いんだけど……
Gauche だと disasm で見れる。

(define (foo x y) ((lambda(a b)(+ a b)) x y))
(define (bar x y) (+ x y))
(disasm foo)
(disasm bar)

表示の意味がわからなくても foo と bar が同じになっていることはわかるだろう。
(バージョンによるかも?)
ごく普通にそういう最適化はしてる。
773
(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 22:54:33.01 ID:ZKntcAAj(7/7) AAS
>>772
772(2): デフォルトの名無しさん [] 2025/07/09(水) 22:06:22.87 ID:cmuoaTCa(9/10) AAS
>>770
letでローカル変数3つ確保しましたって時に
実際には内部でlambdaが呼ばれてるわけだろ?
この時にlambdaをインライン展開したら
オペランドスタックと返り値スタックが省かれて
変数スタックだけになって制御構造と同じコストになるだろ?
これは大きな最適化なんだよ
let が lambda に展開される (させる) 例が仕様に書いてあるのはあくまでも挙動の説明に過ぎず、多くのリッチな処理系ではそんな展開はしない。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.034s