私はCommon-Lispでこの最初/最後のことを得ていません。はい、私はそれが動作する方法を参照してください、しかし、私はそれがそのように動作する理由を取得しません。Common Lisp:最初に最初に戻りますが、最後に最後のリストを返しますか?
基本的に、リストの最初の項目を取得するには、(first mylist)
を使用できます。しかし、私が最後のアイテムをしたい場合、(last mylist)
はそれを私に与えません。代わりに、それは私に私のリストの最後の項目を含むリストを与える!
(私はClozure-CLを使用していますが、これはバグのようなものですが、私はLisp-n00bなので、古いものにならないようにしようとしています。 !だから、
に)」トリック:)壊れて、例えば:
? (setq x '((1 2) (a b)))
=> ((1 2) (A B))
? (first x)
=> (1 2) ; as expected
? (last x)
=> ((A B)) ; why a list with my answer in it?!
? (first (last x))
=> '(A B) ; This is the answer I'd expect from plain-old (last x)
誰かが最後にこれを行い、なぜ私が理解するのに役立つことはできますか?これらのアイテムを間違って使用していますか? first
は本当に奇妙なボールですか?
ありがとうございます! Common Lispのlast
で
Doing '('(1 2) '(a b))は実際には意味がありません。代わりに '((1 2)(a b)))を使用してください。あなたが書いたものは、以下のリストを作成します:((quote(1 2))(quote(a b)))。ここで2つの見積もりは、あなたが意味する特別な演算子として解釈されるのではなく、同じ名前を持つ普通の古いシンボルだけが解釈されます。私が何を評価しているのかを知るには(最初の(最初の( '(1 2)'(a b)))))REPLに入れてください。 QUOTEを返します。 –
トーマス:あなたは正しいです。ソースが編集されました。 – Olie