2013-03-02 2 views
2

다음과 같은 표현식이 있습니다. (map some-proc some-list) 예 : '(#f #f #f)으로 평가됩니다.논리적 적용 및

이 목록의 모든 불리언이 참인지 확인하고 싶습니다. 그러나 (and '(#f #f #f))은 을 귀담아 듣는 동안 '(#f #f #f)을 반환합니다.

이제 (apply and '(#f #f #f)) 인 경우 DrRacket 환경에서 and: bad syntax in: and 오류가 발생합니다. 래킷 참조가 내 문제와 동일한 것으로 보이는 (apply + '(1 2 3))의 예를 제공하기 때문에 혼란 스럽습니다.

무엇이 잘못 되었습니까? #f'(#f #f #f)에서 어떻게 만듭니 까?

답변

6

이에 대한 andmap 사용할 수 있습니다

> (andmap (lambda (x) x) '(#f #f #f)) 
#f 

문제는 모든 인수의 평가를 방지하기 위해, 프로 시저 아니라는 사실,하지만 매크로에서 유래한다.

그래도 게으름장에서 작동하려면 이 필요합니다. 그 일의

+0

와우 :

(foldr (lambda(x y) (and x y)) #t '(#f #f #f)) 

또는 내가 uselpa의 솔루션 (andmap)를 다시 작성합니다! 즉시 답변 주셔서 감사합니다. 그럼 내가 직접 초기 식에서 사용할 수 있습니다 :'(andmap some-proc some-list)' – skobls

2

그냥 다른 방법 :

(andmap identity '(#f #f #f)) 
+1

(foldr (lambda (xy) (xy)) * # t * '(#f # f #f))? – uselpa

+0

예, 제 실수였습니다. – demas