Lisp Scheme Part41 (808レス)
上下前次1-新
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん
752: 07/09(水)15:02 ID:QwaFNVYh(1/8) AAS
>>740
ifだって普通の関数だろw
インタープリターとしての実装は単なる関数呼び出しだ
スペシャルフォームなので引数は評価せず渡す(通常の関数の場合は評価した結果を渡す)
で、(バイト)コンパイラーはifは関数呼び出しにはせず条件ジャンプ命令列に置き換える
そんな事は古代からやってる
自分で処理系を実装した事あれば誰でも知ってる
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の様にコンパイラーが特殊なコンパイルをする必要があるので、普通の関数と区別する必要がある点も重要だ
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を(コンパイラー)マクロにすれば可能だ
771: 07/09(水)19:46 ID:QwaFNVYh(8/8) AAS
map系の関数にラムダ式を渡したら、それがインライン展開されてコンパイルされるのは、最近の言語では当然の様にやってる
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.047s