4

なぜこれを行うのですか:

(every (lambda (x) (equal "a" x)) "aaaaa")

この:

(every (lambda (x) (equal "a" x)) "a")

return NIL、これは:

(every (lambda (x) (equal "a" x)) '("a" "a" "a" "a"))

を返しますTか?every私はすべてのシーケンスでうまくいったと思いました。

4

2 に答える 2

15

いつでも自分で見つけることができます。インタラクティブな Lisp システムを使用すれば、テストはわずか数秒で完了します。

CL-USER 1 > (every (lambda (x) (equal "a" x)) "a")
NIL

上記は NIL を返します。

Common Lisp 関数DESCRIBEを使用して、記述されたデータを取得します。

CL-USER 2 > (every (lambda (x)
                     (describe x)
                     (describe "a")
                     (equal "a" x))
                   "a")

#\a is a CHARACTER
Name                "Latin-Small-Letter-A"
Code                97
Bits                0
Font                0
Function-Key-P      NIL

したがって、の値xは文字です。キャラクター#\a

"a" is a SIMPLE-BASE-STRING
0      #\a
NIL

"a" の型はSIMPLE-BASE-STRING(ここでは LispWorks で) です。

の定義をEQUAL見ると、文字と文字列は型が異なるため決して等しくないことがわかります。

CL-USER 3 > (equal #\a "a")
NIL
于 2013-07-03T08:52:26.303 に答える