-1

スキーム機能の何かを理解するのに問題があります。次のコードを見てください。

(let
  ((a (list (< 10 30) (display "This message should never be printed"))))
  (not (car a)))

2 質問の立ち上がり、A、この方法で a を定義すると、それを「トリガー」ではなくリスト内の項目にしたいだけなのに、表示機能が実行されるのはなぜですか。B、実行しないようにするにはどうすればよいですか?

4

1 に答える 1

1

評価を防ぐには、引用する必要があります:

(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
于 2013-11-05T23:01:33.467 に答える