有人知道if和in what之间有什么区别吗?或者为什么我不能使用if替换或者作为标识符?我在下面贴了一些代码。谢谢!
;if definition
(define heiner-or
(lambda (test-1 test-2)
(if test-1
#t
test-2)))
;or definition
> (heiner-or (= 10 10) (> 2 5))
#t
> (heiner-or (> 23 42) (< 5 2))
#f发布于 2018-11-16 09:07:38
看看if和or的文档。if用于测试一个条件,并且只执行两个可能值中的一个--如果条件为true,第一部分将被执行,如果是false,则执行第二部分:
(if (= 1 0)
"not executed"
"executed")
=> "executed"or是一个可以接收多个参数的逻辑连接器,它将返回它找到的第一个非假值,如果所有值都为false,则返回false。通常使用or连接布尔表达式,但情况并不总是这样:
(or #f 7 10)
=> 7
(or (= 1 0) (= 1 2))
=> #f还请记住,在Scheme中,所有值都被认为是true,但#f除外,它是false。关于您问题的最后一部分:是的,您可以使用if模拟or,如下所示:
; equivalent to (or value1 value2)
(if value1
value1
value2)以上是一个简化,因为理想情况下,我们应该精确地计算value1一次,也因为这个版本不支持多个参数。但是要小心:一旦你试图把它写成一个程序,你就会遇到麻烦!
(define (my-or value1 value2)
(if value1
value1
value2))这将不能作为一个or,该过程在计算if之前对两个参数进行评估,而真正的or只计算所需的表达式,直到它找到一个true值--这就是我们所说的短路评估。为了明白我的意思,试试这个:
(or 42 (/ 1 0))
=> 42
(my-or 42 (/ 1 0))
=> /: division by zero我们不能真正地将or、if作为过程来实现,它们是特殊的形式,需要在解释器级别用特殊的评估规则来实现。
https://stackoverflow.com/questions/53334040
复制相似问题