SBCLするCLISPからレガシーコードを移植する場合、私は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
で最初の行は純粋にコメントの装飾として機能します。 #'foo
の同じ定義に遭遇
SBCLは、文句を言う:まさにここinteger
の目的である
Required argument is not a symbol: (ALPHA INTEGER)
何?これらの2つの動作(どちらか一方でも)が標準に準拠していますか?
EDIT:
問題のレガシーコードは、いくつかの(古代)cl-lex
の一種ではなくthis oneです。
あなたは 'defmethod'ではなく' defun'だったと確信していますか? – rsm
@rsmはい、それは 'defun'でした。私はそれを実行したときとまったく同じコードを見ています。 –