• ベストアンサー

lispでQUOTEの意味

lispを使ってプログラムをしているのですが、 (caar '('A))をエラーになると予想しながら実行したら >(caar '('A)) >QUOTE となりました。 なぜエラーにならなかったのですか? また、QUOTEはどういう意味ですか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

この辺は Lisp の基本. Lisp では 'なんとか と入力したら, それは自動的に (QUOTE なんとか) の形になります. それが何故かと聞かれたら「デフォルトでは ' がそうなるように設定されている」から, としか言いようがない. ちなみに QUOTE は「引数をそのまま返す」スペシャルフォーム. 「また」以降は, Lisp における「評価」を理解していれば出てこないはずの質問です. まず, Lisp は「ユーザーからの入力を読み込んで評価し, その結果を出力する」という動作 (read-eval-print ループ) を繰り返します. 「'Aを実行すると実行結果はA」というのは 1. 'A と入力すると 2. 自動的に (QUOTE A) となり 3. それを評価したら A になるので 4. 得られた結果である A を表示する という動作の結果です. また, 「(car 'A)を実行するとエラー」も 1. (car 'A) と入力すると 2. 自動的に (car (QUOTE A)) となり 3. それを評価するんだけどまず引数の (QUOTE A) が評価されて A になり 4. この A に対して car を適用する 5. はずなんだけど car はリストに対してしか適用できないのでエラー ということです.

noname#210749
質問者

お礼

回答ありがとうございます。 Lispでは、 自動的に’Aが(quote A)になることがよくわかりました。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

'A => (QUOTE A) です。 そこから (CAAR '('A)) =>(CAR 'A) =>(CAR (QUOTE A)) =>QUOTE ということでは無いでしょうか。

noname#210749
質問者

お礼

理解することができました。 ありがとうございました。

noname#210749
質問者

補足

回答ありがとうございます。 ’A => (QUOTE A) とリストになるのは何故ですか? また、 'Aを実行すると実行結果はAですし、 (car 'A)を実行するとエラーでした。 なので、 carのときは'Aは(QUOTE A)に変換されていません。 なぜ、 caarのときは'Aが(QUOTE A)に変換されるのですか?

すると、全ての回答が全文表示されます。

関連するQ&A