2

나는 종종 다음과 같은 '(nil nil nil t nil t nil nil nil) 같은 truth-list을 가지고 있고 그러나 (reduce #'or truth-list)공통 혀짤배기 고차원의 논리 또는 기능

를 호출하고 싶습니다이 작동하지 않습니다와 나는 or 매크로 것으로 나타났습니다. 이 기능을 함수처럼 작동시킬 수있는 빠르고 쉬운 방법이 있습니까? 내가 한 일은 지나가는 것입니다 : (lambda (p q) (or p q))을 제 기능으로 삼았습니다. 그러나 나는이 점을 여러 번 보았으므로 더 나은 방법이있을 것입니다.

모든 도움에 감사드립니다!

답변

5

아니요. 실제로 함수가 필요합니다. BINARY-OR 함수를 정의하면됩니다. 자주 사용하는 경우 코드에 추가하십시오.

대안 :

(some #'identity '(nil nil nil t nil t nil nil nil)) 

또는

(loop for i in '(nil nil nil t nil t nil nil nil) thereis i) 

보너스 : 상기 두 형태는 제 참 값으로 멈출 것이다. reduce 변종은 그렇지 않습니다.

+1

또는 (position-if-not # '널 목록) - 실제로 많은 옵션이 있습니다. – Xach

+1

@Xach :'find-if-not'는 어떻습니까? 우리는 색인이 필요하지 않습니다. –

+0

이렇게 많은 옵션! – Xach