2016-04-04 12 views
1

Schemeでは、私は(quote (+ 2 3)) returns (+ 2 3)を実行しています。私が理解したところでは、引用文は何らかの目的のために私の表現を評価しないようSchemeに伝えました。私はリストを(+ 2 3)引用符を使用せずにしようとしています。だから私が試した:
型付き:(cons '+' (cons 2 (cons 3 '())))
スキームのリターン:(+ cons 2 (cons 3 (quote())))
- 私はこの戻り値を得た理由を私は理解していません。私は、型指定された(+ 2 3)
を期待していた:(cons '+' (2,3))
スキームのリターン:(+ 2 3)
- 私はこれが働いていたかを理解していません。だから、(cons '+' (2,3))(quote (+ 2 3))と同じですか?スキームの引用式のリストのリスト

+1

引用符が多すぎます。あなたは '(cons '+' ...)ではなく、'(cons '+ ...) 'をしたいと思います。 –

+0

@AlexisKingああ、私は、+が文字で、次にNULLリストを指定する '()と言うのに、' + 'が必要だと思った。 –

+1

@AnonymousGal '+'はシンボルです。文字は '#\ +'と書かれます。 2つの単一引用符を使用すると、最初の引用符は '+' -symbolを引用し、第2の引用符は次のリストを引用符で囲みます。 – jkiiski

答えて

0

'expressionは、(quote expression)と同じであり、expressionと評価されていません。

(cons '+ '(cons 2 (cons 3 '())))と書くと、+と2番目の引数(cons 2 (cons 3 '()))の両方を引用しています。 'には終了マーカーはありません。ペアを表示するとき、あなたはそれが(+ . (cons 2 (cons 3 (quote()))))

への実装をオンにしなかった理由'(quote())''()を表示する方法を選択することができます不思議に思った場合

のLispシステムがリストとしてペアテールとペアを表示するにデフォルト設定されます。私のショー'()あなたのショーは(quote())です。それらは正確に同じものを表しているため、視覚化以外のものではそれほど違いはありません。

`(1 , 2)は、unquoting2であるため、(list '1 2)と同じです。幸いなことに、それは数であり、常にそれ自身に評価されます。カンマは要素の間の何らかの分離であったかもしれませんが、そうではありません。いくつかの要素だけが可変である大きなデータ構造を簡単に書くことができます。

(define (test e) 
    `(a list with ,e representing some wanted structure)) 

(test 'test) ; ==> (a list with test representing some wanted structure) 
関連する問題