cons功能问题

时间:2011-04-06 19:56:39

标签: lisp

好吧,我最近开始学习lisp,做一个小程序,我发现了一个小问题。 问题是编写一个函数,如果一个名称还没有名称,就会为其添加标题。我的代码是:

(setf *man-names* '(carlos pablo dani sergio))
(setf *woman-names* '(eva alba luna laura))

(defun titledp (name)
    (cond ((member (car name) *man-names*) nil)
          ((member (car name) *woman-names*) nil)
          (t t)))
(defun add-title (name)
    (cond ((member (car name) *man-names*) (cons 'Mr. name))
          ((member (car name) *woman-names*) (cons 'Mrs. name))))

(defun title (name)
    (cond ((titledp (name)) name)
          (t add-title (name))))

当在'add-title'中调用cons时,我遇到一个问题,即没有定义函数'name'。为什么会这样?我该如何解决?

谢谢:)

2 个答案:

答案 0 :(得分:6)

你的括号很有趣。在title函数中,您使用(name)几次。这意味着调用名为name的函数,不带参数。我想这就是你想要的:

(defun title (name)
    (cond ((titledp name) name)
          (t (add-title name))))

答案 1 :(得分:0)

由于您需要一个名称值列表,因此您需要提交一个列表。 因此,(add-title'(carlos))或(add-title(list'carlos))将起作用。