제목이 거의 모든 것을 말합니다.목록에 적어도 하나의 non-nil 요소가 포함되어 있는지 확인하십시오.
나는
(atleastonenonnil '(nil nil nil nil '(A B C)))
=> T
내가 재귀 방법으로 그것을 할 수처럼 무언가를 찾고 있어요,하지만 난 할 수 없습니다. 내장 함수를 사용해야합니까? 사용 중 cLisp
제목이 거의 모든 것을 말합니다.목록에 적어도 하나의 non-nil 요소가 포함되어 있는지 확인하십시오.
나는
(atleastonenonnil '(nil nil nil nil '(A B C)))
=> T
내가 재귀 방법으로 그것을 할 수처럼 무언가를 찾고 있어요,하지만 난 할 수 없습니다. 내장 함수를 사용해야합니까? 사용 중 cLisp
목록의 첫 번째 요소를 처리하면 나머지는 모두 재귀 적으로 수행 할 수 있습니다. 코드는 다음과 같습니다.
(defun at-least-one-nonnil (l)
(and (not (nullp l))
(or (car l)
(at-least-one-nonnil (cdr l))))))
물론이 간단한 경우에는 이미 내장 함수가 있습니다.
(defun at-least-one-nonnil-v2 (l)
(some #'identity l))
하지만 재귀에 대해 배우는 데 도움이되지는 않습니다.
이 두 함수가 실제로 적어도 하나가 아닌 것은 아닌가요? 원하는 동작을 얻으려면 첫 번째 함수에서 마지막이 아닌 마지막 항목을 삭제하고 마지막에'# 'identity'로'# 'not'를 대체해야합니다. 또한, Common Lisp은'(defun function (args) ...)'를 사용하는 반면'(define (function args) ...) '는 scheme입니다. –
http://www.lispworks.com/documentation/HyperSpec/Body/f_everyc.htm#some –
대답으로 대답을 수락합니다. – Simbi