【发布时间】:2016-01-11 10:42:51
【问题描述】:
我在 Racket 中得到了两个 if 语句指令:
(define (if-fun c thn els) (if c thn els))
(define-syntax-rule (if-mac c thn els) (if c thn els))
请介意解释一下这两个 if 语句的评估方式之间的差异,并提供一个使用每个 if 语句定义的示例吗?在此示例中,我很难区分如何评估宏和函数参数。我尝试了一些小例子,例如:
(if-fun (> 3 4) true false) ;; #f
(if-mac (> 3 4) true false) ;; #f
但显然这并不能帮助我区分这两个定义。
-谢谢
【问题讨论】:
-
尝试
(if-fun #true 'something (/ 1 0)),然后尝试(if-mac #true 'something (/ 1 0));) -
另外:在
#lang racket中尝试(define (if-lazy c thn els) (if c (thn) (els)))和(if-lazy #t (lambda () 'something) (lambda () (/ 1 0)))。或者类似地尝试#lang lazy和(print (if-fun #t 'something (/ 1 0)))。