私は最初のコードのいくつかをemacslispで書き込もうとしていますが、次の動作を理解できません
(defun sq (x) (* x x))
(member 9 '(1 2 3 4 (sq 3)))
これは評価されnil
ますが、私が期待していた値は(9)
今、私は* emacs lispが適用順序評価を使用していると思いますが、関数が適用される前にリストが評価されなかったのはなぜですか?
非ゼロ状態をテストするためだけに必要だったので、最終的に次のように機能させることができました。
(member 9 (cons (sq 3) '(1 2 3 4)))
これはに評価されます(9 1 2 3 4)
私の質問は(sq 3)
、引数内の要素であった前の例とは異なり、関数(短所)への「直接」引数であるため、これは機能しますか?ここで許容可能な回避策を使用しcons
ていますか、それとも目的の動作を取得するためのより良い/正しい方法がありますか?
* emacs lispが使用する順序評価を確実に見つけることはできませんでしたが、schemeインタープリターで同じ式を試し、同じ答えを得ました。SICPから、schemeが適用可能な順序評価を使用していることがわかりました。今、私は本当に混乱しています!
助けていただければ幸いです。