2011-04-06 2 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))'는 clisp에'(MR. CARLOS)'를 반환합니다. 예상은 무엇입니까? – khachik

답변

6

괄호는 재미 있습니다. title 함수에서 (name)을 두 번 사용합니다. 즉, 인수없이 name이라는 함수를 호출하는 것을 의미합니다. 나는 이것이 당신이 원하는 것이라고 생각합니다 :

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

나는 당신에게 이것을 어떻게 감사해야할지 모른다. 나는 그 문제가 이전의 기능에 있다고 생각하면서 미쳤다. 그러나 그것은 내 앞에 있었다. – gumbo

0

당신은 당신의 이름 가치를위한 목록을 기대하고 있기 때문에, 당신은 목록을 제출해야합니다. 따라서 (add-title '(carlos)) 또는 (add-title (list'carlos))가 작동합니다.

+0

고마워,하지만 죄수 문제가 그 기능에 있다고 생각하기는 혼란 스러웠다. ( – gumbo