2010-07-07 6 views
0

안녕하세요, cond 문에 and을 사용하려고합니다. 기본적으로 어떤 코드를 실행하기 전에 <exp1>이 true인지 단순히 확인하는 대신 Scheme을 사용하여 <exp1><exp2>이 true인지 확인해야합니다. (and #t #f)#f으로, (and (= 10 (* 2 5)) #t)#t으로 평가됩니다. 불행하게도, 계획은 x가 첫 번째 요소 #t 또는 #f이 (사실, 난 그냥 (and (eqv? (length x) 1) (car x))을하고 싶어 하나에 평가하는 S-표현 목록입니다스키마에서 "and"사용

(and (eqv? (length x) 1) (eqv? (car x) #t)) 

을 허용하지 않습니다, 그러나 그것은 작동하지 않았다).

누구나 내가 잘못하고있는 것을 설명하거나이를 고칠 방법을 설명 할 수 있습니까? 부수적으로, 누구든지 ...이 무엇을 의미하는지 알고 있습니까? 감사!

+1

당신은 (자동차, x는) 하나 #T 또는 #F로 나타 확실하다? –

+3

*'* '를 구현하려 했습니까? 아니면 * 사용하려고합니까? 일반적으로 귀하의 질문은 명확하지 않으며 일부 텍스트가 숨겨진 잘못된 형식으로 인해 어려움을 겪습니다. 그것을 분류하지 않으면 아무 말을하기가 매우 어려울 것입니다. –

답변

3

"여기서 x는 첫 번째 요소가 #t 또는 #f 중 하나로 평가되는 S- 표현식 목록입니다 (실제로는 (eqv? (length x) 1) (car x))하지만, 작동하지 않았다. "

(car x)의 두 번째 경우, 당신은 단지 목록의 첫 번째 요소를 얻을, 당신이 그것을 평가하지 않습니다.

이 목록 x는 목록 ((eq? 3 3))이다 말 나는 단지 무언가를 말하고 있습니다. 길이가 1이고 첫 번째 요소가 #t으로 평가되는데이지만이 경우 (car x)목록을 가져옵니다.(eq? 3 3)은 하나의 기호 목록과 두 개의 숫자입니다.

(eval (car x) (null-environment))에서와 같이 문제의 해결책은 eval이며 목록과 같은 데이터를 평가합니다.

다른 대답에서 언급 한대로 ((car x))을 사용하는 경우 목록 (list (lambda() #t))을 평가하여 x를 구성한 경우 목록의 첫 번째 요소가 썽크 (null) 인 경우에만 작동합니다.

이 경우 첫 번째 요소는 인수없이 호출 할 때 #t을 생성하는 함수입니다.

0

(car l1) 
; #t  
(and (car l1) (car (cdr l1))) 
; #f 

(('#T #F #T를) L1 정의) 작동하지만 이것은 당신이하려고하는

(define l2 '((eq? 1 1) (eq? 1 2))) 

(car l1) 
; '(eq? 1 1) 
(and (car l1) (car (cdr l1))) 
; fails 

하지 않는?

가능한 경우 목록에 입력하기 전에 표현식을 평가하는 것이 좋습니다.

아니면 시도 할 수 :

(define l3 (list eq? 1 1)) 

l3 
; '(#<procedure:eq?> 1 1) 

(apply (car l3) (cdr l3)) 
; #t 
관련 문제