2009-12-03 4 views
2

나는 T를 반환해야합니다 "를 반환-에서"리스프간단한 LISP 기능

(defun testp (lst) 
    (mapC#'(lambda (x y) 
      (if (null lst) 
       (return-from testp t))) 
     lst 
     (cdr lst))) 

내가 생각하는 시험 (testp '무기 호)에 대한 이해를 테스트하기 위해 테스트 함수를 작성하지만 NIL을 반환합니다. NIL을 반환하는 이유에 대한 이해를 도울 수 있습니까?

감사합니다.

+1

이전 질문에 대한 답변을 수락하면 향후 질문에 대한 도움을 얻을 수 있습니다. –

답변

3

두 개의 빈 목록을 통해 MAPC를 호출합니다.

목록에 매핑 할 요소가없는 경우 어떻게 LAMBDA 함수를 사용해야합니까?

Btw.의 경우 'lst'대신 'list'를 쓸 수 있습니다.

(defun testp (list) 
    (mapC#'(lambda (x y) 
      (if (null list) 
       (return-from testp t))) 
     list 
     (cdr list))) 
3

일반적으로, mapc는 목록의 각 요소에 람다 적용됩니다. 내 생각에 (Common Lisp을 사용하지 않는다.) mapc에는 목록에 아무런 원소도 없기 때문에 람다는 전혀 호출되지 않으며 결과적으로 함수의 반환 값은 mapc의 반환 값이며, (아무 것도 넘어서 매핑되었으므로) nil입니다.