【发布时间】:2014-05-02 19:15:11
【问题描述】:
我目前正在学习scheme,遇到了以下问题:
证明或反驳以下陈述: 过程 my-or:
(define my-or
(lambda (test1 test2)
(if test1
#t
test2)))
与带有两个参数的内置过程“或”的工作方式相同。 提示:
(或)= #f
(or <a1> ... <an>) = (if <a1>
#t
(or <a2> ... <an>))
如果你反驳了这个说法,找到一个程序,其中两者的区别 可以注意到程序。
所以,我相信这两个过程之间没有区别,因为它们对于两个参数都以相同的方式工作(由这个基于过程的球拍文档的树形图描绘 if and or):
if/or
.. ..
#f #t
.. ..
test2 outcome: #t
.. ..
#f #t
.. ..
outcome: #f outcome: #t
还有,因为如果我按照第二个提示中提到的方式重写 my-or 我仍然得到相同的输出,例如:
> (my-or (= 10 10) (> 2 5))
--> #t
> (my-or (> 23 42) (< 5 2))
--> #t
重写:
> (if (= 10 10) #t (or (> 2 5)))
--> #t
> (if (> 23 42) #t (or (< 5 2)))
--> #f
唯一困扰我的是我们应该反驳这个陈述的感觉,因为提到:“如果你反驳这个陈述,找到一个可以注意到两个过程之间差异的程序。”
这就是为什么我不知道是否有人有想法来反驳该陈述,或者是否有人可以以其他方式确认我的想法如何证明该陈述是正确的..
【问题讨论】:
标签: functional-programming scheme racket procedure