2010-09-14 75 views
6

爲什麼是它的Common Lisp的數組語法沒有評估它的參數:Common Lisp:爲什麼不用數組字面來評估參數?

(let ((a 1)) #2A((a 2) (3 4))) 
=> #2A((A 2) (3 4)) 

我早就猜到這是#2A((1 2) (3 4))。這是因爲A在讀者時間不可用?

+0

你期望列表文字''((a 3)(3 4))'來評估嗎? – kwatford 2010-09-14 14:20:39

+1

是否是'((a 2)(3 4))'列表文字?我認爲這是'quote'和'((a 2)(3 4))'是列表文字。 – 2010-09-14 18:09:13

+0

'''只是'quote'的一個閱讀器宏。所以'((a 2)(3 4))'只是'(quote((a 2)(3 4)))'。在通用lisp程序的源代碼中,引用列表是列表文字。裸列表代表程序的代碼,而不是其數據。起初有點令人困惑,但稍後會有意義。 – kwatford 2010-09-14 18:38:02

回答

5

總之,是的。

#2A((A 2) (3 4))不是(make-array '(2 2) :initial-contents (list (list a 2) (list 3 4)))的縮寫(「語法糖」)。如果有的話,它可以合理化爲(make-array '(2 2) :initial-contents (quote ((A 2) (3 4)))),但這會有點誤導,因爲陣列構造已經發生在讀取時。

相關問題