Я пытаюсь выяснить правильное использование 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 говорит мне, что вызываемая функция получает слишком мало аргументов. Что я делаю неправильно? *Frames*
это моя база знаний. Это выглядит так:
(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)))))