【问题标题】:different scheme procedure for "or"“或”的不同方案程序
【发布时间】: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


    【解决方案1】:

    实际上,基于过程的版本my-or与内置的or不同。为了证明这一点,试试这个:

    (or 1 (/ 1 0))
    => 1
    
    (my-or 1 (/ 1 0))
    => /: division by zero
    

    解释:

    • 内置的or是一个特殊形式,意思是:对于or,通常申请程序的求值规则是不同的(顺便说一句,@也一样) 987654326@)
    • or 对其参数的求值短路:返回非 false 的第一个参数的值作为结果返回,其余参数将求值!
    • my-or 执行正常的函数调用,所有它的参数将在 将它们传递给 my-or 的主体之前进行评估
    • 上面的例子清楚地表明:or 不计算除以零,它在找到第一个非假值时立即返回,而 my-or 计算 两个 参数在继续之前,它失败了,因为它遇到了零除

    【讨论】:

    • 感谢您的回答!我收到以下输出: > (or #t (/1 0)) #t > (my-or #t (/1 0)) /: 除以零我猜这表明 my-or 继续评估 test2 , "or" 但是,只评估 test1...这是我应该注意的吗?
    • 好的 - 你的编辑说得很清楚:非常感谢!! :)
    • 我已经尝试过了,只是发现我必须等待 - 以前不知道!会的 :) 祝你晚上愉快——或者我想你下午好!
    • @user3566193 很高兴为您提供帮助,也祝您晚安! (这里是下午:))
    猜你喜欢
    • 2018-06-01
    • 2020-07-26
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多