Lisp Scheme Part41 (855レス)
Lisp Scheme Part41 http://mevius.5ch.net/test/read.cgi/tech/1531587928/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
750: デフォルトの名無しさん [] 2025/07/09(水) 14:49:42.58 ID:cmuoaTCa >>749 >>743 http://mevius.5ch.net/test/read.cgi/tech/1531587928/750
751: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 14:57:26.23 ID:ZKntcAAj >>750 意味を為さない言葉を何万回繰り返したところで何も変わらんぞ。 妥当な文章を書く能力がないならもう出来ることはない。 論外。 終わり。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/751
752: デフォルトの名無しさん [sage] 2025/07/09(水) 15:02:22.57 ID:QwaFNVYh >>740 ifだって普通の関数だろw インタープリターとしての実装は単なる関数呼び出しだ スペシャルフォームなので引数は評価せず渡す(通常の関数の場合は評価した結果を渡す) で、(バイト)コンパイラーはifは関数呼び出しにはせず条件ジャンプ命令列に置き換える そんな事は古代からやってる 自分で処理系を実装した事あれば誰でも知ってる http://mevius.5ch.net/test/read.cgi/tech/1531587928/752
753: デフォルトの名無しさん [] 2025/07/09(水) 15:28:36.71 ID:cmuoaTCa マクロだっていう反論が来るのかと思ったらスペシャルフォームだというので戸惑ってるw そりゃいくつかの関数はミニマルコアとして書かなきゃいけないさ それさえあれば関数とマクロと制御構造は統一できる、というのが言い分 http://mevius.5ch.net/test/read.cgi/tech/1531587928/753
754: デフォルトの名無しさん [sage] 2025/07/09(水) 15:34:56.94 ID:QwaFNVYh ミニマルコアって何だ? スペシャルフォームとマクロは引数を評価しないで渡す関数として実装される そんなのは初期の頃からだと言っている 何で今さら発見した面してんのか?と言うことだ http://mevius.5ch.net/test/read.cgi/tech/1531587928/754
755: デフォルトの名無しさん [sage] 2025/07/09(水) 15:40:52.83 ID:QwaFNVYh 引数を評価しないで渡す関数という点で、マクロとスペシャルフォームは同一の実装と言える しかしマクロは環境を受け取らないといけないし、戻り値を再度評価する必要があるから、スペシャルフォームとマクロは区別する必要がある http://mevius.5ch.net/test/read.cgi/tech/1531587928/755
756: デフォルトの名無しさん [sage] 2025/07/09(水) 15:42:40.68 ID:QwaFNVYh 更に、スペシャルフォームはifの様にコンパイラーが特殊なコンパイルをする必要があるので、普通の関数と区別する必要がある点も重要だ http://mevius.5ch.net/test/read.cgi/tech/1531587928/756
757: デフォルトの名無しさん [] 2025/07/09(水) 15:45:21.52 ID:cmuoaTCa 評価しないで渡したい引数のうち、制御に関わるものならインラインクロージャでなんとかなりますよって話だよ レキシカルにちゃんとしたクロージャをインライン展開される前提で引数として渡すんだよ http://mevius.5ch.net/test/read.cgi/tech/1531587928/757
758: デフォルトの名無しさん [sage] 2025/07/09(水) 15:46:21.90 ID:QwaFNVYh しかしながら、普通の関数でもスペシャルフォームの様な特殊なコンパイルをしたい場合があるので、その為にコンパイラーマクロが存在する ただほとんど使われない http://mevius.5ch.net/test/read.cgi/tech/1531587928/758
759: デフォルトの名無しさん [sage] 2025/07/09(水) 15:48:37.80 ID:QwaFNVYh >>757 インライン関数はマクロで実装できる 環境もちゃんとハンドリング出来るので、インラインクロージャーもマクロで実装可能だ 何がしたいのか良く分からない… http://mevius.5ch.net/test/read.cgi/tech/1531587928/759
760: デフォルトの名無しさん [sage] 2025/07/09(水) 15:50:14.77 ID:QwaFNVYh mapcarに渡したlambdaをインライン展開したいと言うなら、mapcarを(コンパイラー)マクロにすれば可能だ http://mevius.5ch.net/test/read.cgi/tech/1531587928/760
761: デフォルトの名無しさん [] 2025/07/09(水) 15:56:45.13 ID:cmuoaTCa >>759 テイルコールみたいにファーストラムダ最適化も必須にすればインライン展開される分速くなる http://mevius.5ch.net/test/read.cgi/tech/1531587928/761
762: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 16:17:26.50 ID:ZKntcAAj 最適化するために仕様の改定が必要か? http://mevius.5ch.net/test/read.cgi/tech/1531587928/762
763: デフォルトの名無しさん [] 2025/07/09(水) 16:32:28.96 ID:eQ8lOX87 >>738 どのへんが既出なんだか教えてほしいということならALGOLとサンクのコンパイル研究あたりで出尽していると思うから60年前には既に研究レベルでなく, 実践されていたのではないか.AIにきいてもわからなかったか? AIに尋ねたら1960年代初頭でサンクのインライン展開も含めてアイデアは出尽しているといわれた. ついでにSMALLTALKとIFとブロックについても調べてみろよ. LISPの関数呼び出しの最適化についてもおまえは50年前あたりの認識をしている. 当然SBCLあたりの最適化はおまえよりずっと先をいってる. http://mevius.5ch.net/test/read.cgi/tech/1531587928/763
764: デフォルトの名無しさん [sage] 2025/07/09(水) 17:07:46.42 ID:ohpjpVt+ >ファーストラムダというのは 「ファーストラムダ」という言葉は、通常、AWS Lambdaを指すスラングとして使われることがあります。AWS Lambdaは、サーバーレスコンピューティングサービスで、コードをサーバーの管理なしに実行できます。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/764
765: デフォルトの名無しさん [] 2025/07/09(水) 17:09:06.44 ID:cmuoaTCa インライン展開を俺が発明したなんて言ってないだろ この形をしたラムダをそうすると効くんじゃないかというのが俺の発明だ あと、クロージャを引数として渡すのもSmalltalkやRubyはやってるだろう 俺の発明は「インライン関数を引数として渡すという逆接はものごとを見通しよくしますよ」だ http://mevius.5ch.net/test/read.cgi/tech/1531587928/765
766: デフォルトの名無しさん [sage] 2025/07/09(水) 17:25:03.45 ID:ohpjpVt+ そうやってevalの時点で評価されなかった式を何時どうやって誰が適用するのか というおとぎ話を自慢毛に語るスレ http://mevius.5ch.net/test/read.cgi/tech/1531587928/766
767: デフォルトの名無しさん [] 2025/07/09(水) 17:29:15.92 ID:cmuoaTCa evalはインタープリタ、lambdaはコンパイラ http://mevius.5ch.net/test/read.cgi/tech/1531587928/767
768: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 18:09:52.06 ID:ZKntcAAj 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 が同じになっていることはわかるだろう。 (バージョンによるかも?) ごく普通にそういう最適化はしてる。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/768
769: デフォルトの名無しさん [] 2025/07/09(水) 18:36:27.57 ID:CwmzIZ1x 自分で処理系書いてから言え http://mevius.5ch.net/test/read.cgi/tech/1531587928/769
770: デフォルトの名無しさん [] 2025/07/09(水) 19:18:13.79 ID:eQ8lOX87 >>765 少なくともLISP界隈では発明では全くないからHaskell, OCaml, コンパイラの最適化方面のスレで展開してみたら? A正規化あたりと絡めて展開すればよりアカデミックなやりとりが期待できるのでは? http://mevius.5ch.net/test/read.cgi/tech/1531587928/770
771: デフォルトの名無しさん [sage] 2025/07/09(水) 19:46:08.96 ID:QwaFNVYh map系の関数にラムダ式を渡したら、それがインライン展開されてコンパイルされるのは、最近の言語では当然の様にやってる http://mevius.5ch.net/test/read.cgi/tech/1531587928/771
772: デフォルトの名無しさん [] 2025/07/09(水) 22:06:22.87 ID:cmuoaTCa >>770 letでローカル変数3つ確保しましたって時に 実際には内部でlambdaが呼ばれてるわけだろ? この時にlambdaをインライン展開したら オペランドスタックと返り値スタックが省かれて 変数スタックだけになって制御構造と同じコストになるだろ? これは大きな最適化なんだよ http://mevius.5ch.net/test/read.cgi/tech/1531587928/772
773: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/09(水) 22:54:33.01 ID:ZKntcAAj >>772 let が lambda に展開される (させる) 例が仕様に書いてあるのはあくまでも挙動の説明に過ぎず、多くのリッチな処理系ではそんな展開はしない。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/773
774: デフォルトの名無しさん [] 2025/07/09(水) 23:21:02.31 ID:cmuoaTCa >>773 リッチでない処理系がこの最適化ひとつでリッチ同然になる http://mevius.5ch.net/test/read.cgi/tech/1531587928/774
775: デフォルトの名無しさん [] 2025/07/09(水) 23:40:56.18 ID:eQ8lOX87 テム・レイ最適化って呼ばせてほしい http://mevius.5ch.net/test/read.cgi/tech/1531587928/775
776: デフォルトの名無しさん [] 2025/07/09(水) 23:41:46.05 ID:QSSrKuoD おかしな人が居ると捗るよね。でもまともなこと言ってる人もだんだんおかしなことをいいだして、実はおかしな人しかいなかったと気づかされる。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/776
777: デフォルトの名無しさん [sage] 2025/07/10(木) 00:52:48.56 ID:nn3AKhN3 (macroexpand '(let ((a 1) (b a) (c b)) c)) ;=>((lambda (a b c) c) 1 a b) (macroexpand '(let* ((a 1) (b a) (c b)) c)) ;=>((lambda (a) ((lambda (b) ((lambda (c) c) b)) a)) 1) (macroexpand '(letrec ((a 1) (b a) (c b)) c)) ;=>((lambda (a b c) (set! a 1) (set! b a) (set! c b) c) '() '() '()) あいあい いいいい 飛ばして えいえい おいおい 戻して うーいうい http://mevius.5ch.net/test/read.cgi/tech/1531587928/777
778: デフォルトの名無しさん [sage] 2025/07/10(木) 01:03:21.83 ID:qcnALR7R >>772 そこに興味あるなら、この後CPS変換を調べるといいよ その後関数をジェネレーターに変換して、yieldに対応出来たら一人前だよw 更にその後はAsync/Awaitが待っている http://mevius.5ch.net/test/read.cgi/tech/1531587928/778
779: はちみつ餃子 ◆8X2XSCHEME [sage] 2025/07/10(木) 07:45:53.86 ID:UMLMi9p2 >>774 let は 常に lambda に展開せねばならず、引数の受け渡しはスタックを使うことという制約を入れて最適化の邪魔をしてまでひとつの最適化を入れる? 馬鹿馬鹿しい。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/779
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 76 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.011s