當從CLISP移植遺留代碼的SbCl,我遇到語法這引起由該代碼而沒有明顯的錯誤運行在CLISP所示的問題:口齒不清:必需的參數,以defun定義不是一個符號
(defun foo ((alpha integer))
(princ (type-of alpha))
(princ " ")
(prin1 alpha)
(terpri))
(foo 3)
(foo 3.5)
(foo (list "beta" "gamma" "delta"))
;;; output follows ;;;
(INTEGER 0 281474976710655) 3
SINGLE-FLOAT 3.5
CONS ("beta" "gamma" "delta")
顯然integer
在第一行純粹作爲評論性裝飾。
SBCL,遇到的#'foo
相同的定義,抱怨:
Required argument is not a symbol: (ALPHA INTEGER)
究竟是integer
這裏的目的是什麼?這兩種行爲中的哪一種(如果有)符合標準?
編輯:
有問題的遺留代碼是一些(古)排序cl-lex
,但不this one。
你確定它是'defun'而不是'defmethod'嗎? – rsm
@rsm是的,它是'defun'。你看到的代碼就像我運行它一樣,而輸出完全按照它的結果。 –