(defun check-for-arrow (x)
(format t "**~s**~s**~s**~s**"
(length (string x))
x
(eq x '->)
(and (eq (elt (string x) 0) #\-)
(eq (elt (string x) 1) #\>))) ; for debug
(eq x '->))
從REPL調用時,有:
(check-for-arrow '->)
打印,使用跟蹤:
0> Calling (CHECK-FOR-ARROW ->)
**2**->**T**T**
<0 CHECK-FOR-ARROW returned T
相反,當在一個Hunchentoot網絡應用程序中調用時,在表單中讀取數據時,在符號' - >'上調用時,將打印:
0> Calling (NORMALIZER::CHECK-FOR-ARROW ->)
**2**->**NIL**T**
<0 NORMALIZER::CHECK-FOR-ARROW returned NIL
Lisp是Clozure Common Lisp。
這是否依賴於實習符號的不同方式?可以在符號上使用'eq',或者我必須轉換字符串中的箭頭並檢查字符串是否相等?
謝謝。
注意:類似' - >'是一個符號和一個原子。 atom這個詞與剛纔的符號有不同的含義。所有不是缺陷的細胞都是原子。因此數字'3',字符串''foo'',矢量'#(1 2 3)',...都是原子 - 但它們不是符號。 –