[過去ログ] Lisp Scheme Part40 [転載禁止]©2ch.net (1002レス)
前次1-
抽出解除 レス栞

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
リロード規制です。10分ほどで解除するので、他のブラウザへ避難してください。
163
(3): 2015/07/22(水)10:24 ID:4IMBgQFd(1) AAS
>>161
マクロなら可能だがdefineでは定義不可能なケースを上げておく

defineで定義された関数(procedure)の適用では、まず全ての引数が評価されてからその結果が関数bodyに渡されて関数の結果が決まる。
もし、全ての関数を評価せずに前から必要な分だけ評価する関数を書きたい場合、defineでは無理。その場合はdefineは-syntaxなどをつかってマクロを定義することになる。

マクロは
>>162が述べているように第一段階としてSchemeのS式を生成し、第二段階でその生成されたS式を評価するわけだが、第一段階ではマクロの引数は評価されない点が重要。
それによって、defieとは異なり一部の引数をのみ評価することが可能となる。

or関数はその一例だな
もしdefineでmy_orを定義しようとすると全ての引数を評価するという無駄な関数となるわけだ。
もしaがtrueなら
省3
164
(1): 2015/07/22(水)10:26 ID:TPXSOrgT(1/2) AAS
>>163
補足
だからmy_orはマクロで定義するというわけな
どうだ?
チンコそそり立つほどわかったか?
165: 2015/07/22(水)10:28 ID:TPXSOrgT(2/2) AAS
>>163
訂正
もし、全ての関数を評価せずに
もし、全ての引数を評価せずに
166
(2): 2015/07/22(水)13:29 ID:wcjgZ6Dx(1) AAS
>>162でスゲーわかった気になったのに、>>163-164で全然わからなくなりました。
defineでも問題なさそうだけど。

(define my_or1
(syntax-rules ()
((_ a b) (or a b))))

(define-syntax my_or2
(syntax-rules ()
((_ a b) (or a b))))

(my_or1 #t (begin (print "!") #f)) ===> #t
(my_or2 #t (begin (print "!") #f)) ===> #t
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.039s