2011-04-06 150 views
0

那么,我最近开始学习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)))) 

时,在“添加标题”,利弊叫我收到写着功能“名”没有定义的问题。为什么会发生?我该如何解决它?

谢谢:)

+0

你怎么称呼它? '(add-title'(carlos))'返回'(MR。CARLOS)'在clisp中。是什么预期? – khachik 2011-04-06 20:14:39

回答

6

你的括号很有趣。在您的title功能中,您几次使用(name)。这意味着调用没有参数的称为name的函数。我认为这是你想要的:

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

我不知道该如何谢谢你。我以为这个问题出现在前一个功能中变得疯了,但它只是在我的面前。 – gumbo 2011-04-07 15:01:25

0

既然你正在等待你的名字值列表,你需要提交一个列表。 因此,(add-title'(carlos))或(add-title(列表'carlos))将起作用。

+0

谢谢,但我很困惑,认为问题是在该功能:( – gumbo 2011-04-07 14:59:16