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或
    会在继续之前计算这两个参数,并且由于遇到被零除的情况而失败

谢谢您的回答!我收到以下输出:>(或#t(/10))#t>(我的或#t(/10))/:除以零我想这表明我的或继续评估test2,“或者”但是,只评估test1。。。这就是我应该注意到的吗?好吧-你的编辑说得很清楚:非常感谢!!:)我已经试过了,只是发现我必须等待——以前不知道!好的:)祝你晚上愉快——我想是下午吧@用户3566193我很高兴能帮助你,也祝你晚上好!(这附近是下午:))
     > (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