Functional programming 不同的方案程序;或;
我目前正在学习该计划,遇到以下问题: 证明或反驳以下陈述: 我的程序或:Functional programming 不同的方案程序;或;,functional-programming,scheme,racket,procedure,Functional Programming,Scheme,Racket,Procedure,我目前正在学习该计划,遇到以下问题: 证明或反驳以下陈述: 我的程序或: (define my-or (lambda (test1 test2) (if test1 #t test2))) 与具有两个参数的内置过程“or”的工作原理相同。 tipp: (或)=#f 而且,因为如果我重写我的or,按照第二篇tipp中提到的方式 我仍然得到相同的输出,例如: > (my-
(define my-or
(lambda (test1 test2)
(if test1
#t
test2)))
与具有两个参数的内置过程“or”的工作原理相同。
tipp:
(或)=#f
而且,因为如果我重写我的or,按照第二篇tipp中提到的方式
我仍然得到相同的输出,例如:
> (my-or (= 10 10) (> 2 5))
--> #t
> (my-or (> 23 42) (< 5 2))
--> #t
>(我的or(=10 10)(>25))
-->#t
>(我的or(>2342)(<52))
-->#t
重写:
> (if (= 10 10) #t (or (> 2 5)))
--> #t
> (if (> 23 42) #t (or (< 5 2)))
--> #f
>(如果(=10)t(或(>25)))
-->#t
>(如果(>2342)#t(或(<52)))
-->#f
唯一让我感到困扰的是,由于提到“如果你反驳了这个陈述,找到一个可以注意到这两个过程之间差异的程序”,我们觉得应该反驳这个陈述
这就是为什么我不想知道是否有人有想法反驳该陈述,或者是否有人可以以其他方式确认我的想法如何证明该陈述是正确的。事实上,基于过程的版本
my or
与内置的or
不同。要证明这一点,请尝试以下方法:
(or 1 (/ 1 0))
=> 1
(my-or 1 (/ 1 0))
=> /: division by zero
说明:
- 内置的
是一种特殊形式,意思是:通常适用于程序的评估规则对于或
是不同的(顺便说一句,或
也是如此)和
使对其参数的计算短路:返回非false的第一个参数的值作为结果返回,其余参数将不进行计算李>或
执行正常的函数调用,在将其传递到my or
的主体之前,将对其所有参数进行评估my or
- 上面的示例清楚地表明:
不会计算被零除的值,它会在找到第一个非假值时立即返回,而或
会在继续之前计算这两个参数,并且由于遇到被零除的情况而失败my或
> (if (= 10 10) #t (or (> 2 5)))
--> #t
> (if (> 23 42) #t (or (< 5 2)))
--> #f
(or 1 (/ 1 0))
=> 1
(my-or 1 (/ 1 0))
=> /: division by zero