저는 학교에서 Lisp을 배우고 있는데, 만들려는 프로그램 중 하나는 mapcan을 사용하여 remove-if-not의 기능을 복제하는 프로그램 중 하나입니다. 프로그램을 만들었지 만 제대로 작동하지만 출력을 이해하지 못합니다. I 실행한다면이 프로그램이 왜 원자 목록을 반환합니까?
구체적 :
(findall 'numberp '(1 a 3))
를 출력한다 (1-3)
프로그램은 다음과 같다 :
가(defun findAll (fct l)
(cond
((null l) nil)
((mapcan (lambda(x) (if (funcall fct x) (list x) nil)) l))
)
)
용액 내 이해이고 다음과 같습니다 : "목록의 각 요소에 대해 l 함수를 호출합니다. 함수의 결과가 적합하고 요소 x가 true를 반환하면 요소 su를 반환합니다. 괄호로 둘러 쌓인 경우 "
특히"list (x) "에 대한 일련의 연속적인 호출이 결국 (1 2)과 같은 원자 목록을 반환하는 방법을 이해하지 못합니다.
그러나 최종 결과가 함께 추가 된 이유는 무엇입니까? 그냥 목록이 아닌가요? – edoreld
@edoreld : MAPCAN이 수행합니다. 해당 설명서를 참조하십시오. http://www.lispworks.com/documentation/HyperSpec/Body/f_mapc_.htm#mapcan –