2016-10-05 137 views
0

根据这些定义:评估球拍表达

(define s 8) 
(define p (/ s 2)) 
(define (f s p) 
     (cond [(or (> s 0) p) 'yes] [(< s 0) 'no])) 

我要评估这个表达式:

(f 0 (and (< s p) (> s 2))) 

到目前为止,我有:

 ⇒ (f 0 (and (< 8 p) (> s 2))) 
     ⇒ (f 0 (and (< 8 4) (> s 2))) 
     ⇒ (f 0 (and false (> s 2))) 
     ⇒ (f 0 false) 

如何完成这个?

回答

1

您需要将其替换为fcond表达式)的主体,并将参数替换为其匹配参数。

+0

如果我写0,而不是COND – kaminey

+0

程序不接受什么让你觉得你应该更换' cond'与0? –

+0

@ScottHunter:我认为很明显kaminey不理解你的答案。我明白你的迟疑只是给他/她作业的完整答案,但是也许你可以组成一个不同的函数来演示你的“用f的身体替换它”过程? – ruakh

0

球拍看到该f是一个过程,并评估它的参数:

(f 0 (and (< s p) (> s 2))) ; ==> 
(f 0 (and (< 8 4) (> 8 2))) ; ==> 
(f 0 (and #f #t))   ; ==> 
(f 0 #f)     ; s=0, p=#f 

然后,参数代入变量在身体的f

; ==> 
(cond [(or (> 0 0) #f) 'yes] 
     [(< 0 0) 'no]) 

因为两者(or (> 0 0) #f)(< 0 0)#f结果是实现选择的未定义值。在球拍是#<void>

; ==> 
#<void> 

这本来是可以避免总是有一个else项:

(define (f s p) 
    (cond [(or (> s 0) p) 'yes] 
     [(< s 0) 'no] 
     [else 'banana])) 

(f 0 (and (< s p) (> s 2))) ; ==> banana