Lisp-funcall函数接收的参数太少?
我正在试图找出Lisp-funcall函数接收的参数太少?,lisp,common-lisp,Lisp,Common Lisp,我正在试图找出funcall的正确用法。我有这个功能: (defun frame-add-slot (frame slot) (push (list slot) (rest (assoc frame *frames*)))) 我试图让另一个函数调用它 (defun frame-add-subframe (superframe subframe) (let ((res (push (list subframe) (rest *frames*)))) (funcall (frame
funcall
的正确用法。我有这个功能:
(defun frame-add-slot (frame slot)
(push (list slot) (rest (assoc frame *frames*))))
我试图让另一个函数调用它
(defun frame-add-subframe (superframe subframe)
(let ((res (push (list subframe) (rest *frames*))))
(funcall (frame-add-slot) subframe 'ako))))
但是,当我尝试以这种方式传递两个参数时,clisp告诉我被调用的函数接收的参数太少。我做错了什么<代码>*框架*是我的知识库。看起来是这样的:
(setf *frames* '((mammal
(eats
(:value meat)
(:if-needed (food))))
(4-legged-animal
(ako
(:type mammal)
(:default beings))
(blood
(:type warm-blooded)))
(husky
(ako
(:type dog))
(origin
(:value alaska)
(:default north-america))
(roots
(:value unknown)))
(dog
(ako
(:type 4-legged-animal))
(exterior
(:value furry)
(:default skin)))
(abner
(isa
(:type husky)
(:default dog))
(shape
(:weight 40-lbs)
(:height 20-inches)
(:color brown))
(acts
(:demeanor friendly)
(:sometimes rough)))
(gypsy
(isa
(:default dog))
(acts
(:demeanor unpredictable))
(shapes
(:weight 45-lbs)
(:color black-and-brown)))))
在(funcall(frame add slot)子帧“ako”)
中,通过在其周围放置paren来调用frame add slot
请尝试
(funcall#“frame-add-slot subframe”ako)
您的frame add subframe
功能有几个问题:
(defun frame-add-slot (frame slot)
(push (list slot) (rest (assoc frame *frames*))))
funcall
?您应该能够直接调用frame add slot
:(frame add slot subframe'ako)
funcall
的用法是值得的,那么您可以这样使用它:(funcall#'frame-add-slot subframe'ako)
res
?该变量未使用您能解释一下为什么需要
FUNCALL
FRAME-ADD-SLOT
是一个正常命名的函数,您可以这样调用它,而无需FUNCALL
(defun frame-add-subframe (superframe subframe)
(let ((res (push (list subframe) (rest *frames*))))
(frame-add-slot subframe 'ako))))
文字数据
稍后在代码中将
*帧*
设置为常量文字数据。在函数中,您正在修改此常量数据。在标准通用Lisp中,这些修改的效果是未定义的。您需要新分配的数据结构-可以毫无问题地修改这些数据结构。例如,请参见函数COPY-TREE
,以递归方式创建深度嵌套列表的新副本。复制树的结果可以修改。顺便问一下,这是家庭作业问题吗?