スキーム機能の何かを理解するのに問題があります。次のコードを見てください。
(let
((a (list (< 10 30) (display "This message should never be printed"))))
(not (car a)))
2 質問の立ち上がり、A、この方法で a を定義すると、それを「トリガー」ではなくリスト内の項目にしたいだけなのに、表示機能が実行されるのはなぜですか。B、実行しないようにするにはどうすればよいですか?
評価を防ぐには、引用する必要があります:
(let ((a '((< 10 30) (display "This message should never be printed"))))
(car a))
(let ((a '((< 10 30) (display "This message should never be printed"))))
(cdr a))
収量
'(< 10 30)
'((display "This message should never be printed"))
ただし、これらの式を後で評価したい場合、最も簡単な方法はそれらをラムダ式にラップすることです。
(define a
(list
(lambda () (< 10 30))
(lambda () (displayln "This message should never be printed"))))
(first a)
=> #<procedure>
((first a))
=> #t
(second a)
=> #<procedure>
((second a))
=> This message should never be printed