2012-03-06 9 views
1

注:初めて* lispのLispのどのような関数で、変数名を比較することができますか?

を使用して、私は宿題を持っている、と私たちは基本的に0または1例で式をバインドすると想定されています

(defun orexp (a b) (list 'or a b)) 

(setq p3 (orexp 1 'a)) ;which equals (or 1 a) 

は、私は関数を作成したいと言いますそれらを結合することによって、それらを評価し、それらを単純化するが、簡素化を無視して、どのように私はこのような何かやってそれらをバインドすることができます。

(evalexp p3 '((a 0))) 

をし、で終わる:

(or 1 0) 

私はそれを検索しようとしましたが、何も見つかりませんでした。私はそれがより良い説明が必要かどうか私に教えてください、私は情報を残しているので、その宿題と私は答えが欲しくないので、私の問題について行く方法のヒント。ありがとう。

答えて

2

タイトルでは、シンボル(変数名と呼ぶもの)を比較したいとします。

> (eq 'a 'a) 
true 
> (eq 'a 'b) 
false 

それはどういう意味ですか?

+0

はい、それは何ですか? – Andy

+0

実際、変数名を比較できますか? – Andy

+1

はい、あなたはlispのシンボルを比較できます。 –

1

eqとシンボルを比較できます。

機能は(defun evalexp (expression bindings) #| ... |#)のようになります。 コメント部分(#| ... |#)にコードが含まれています。 expressionツリーを歩かなければならず、シンボルが見つかるたびにそのシンボルのバインディングがbindingsに存在するかどうかをチェックし、シンボルをその値に置き換えてください。

0

実は、EQはその特異性に実装依存であるが、それはない?:

効果はCommon Lispの当量は、その引数の両方が ``同じものです場合でも、真実であるという保証を行いませんということですその物が文字か数字であれば '' '。 (hyperspecから)

あなたが関与引数を引用し、私はあなたが望んでいた場合は、手で引用符なしであなたが欲しいものを行うには小さな小さなマクロを書くことができると思うのであればEQが動作するはずです:

(defmacro es (x y) 
      `(eq (quote ,x) (quote ,y))) 

作品と思います。

+0

質問は同じパッケージ内のシンボルに関するものなので、これは無関係です。 – Svante

関連する問題