N4t*_*t1c 5 scheme functional-programming callcc define-syntax control-flow
我被告知"call/cc"可用于实现任意控制流构造,所以我试图使用"call/cc"来实现所有这样的构造,但是我遇到了麻烦.假设我没有"if",我将如何使用"define-syntax"和"call/cc"来实现它?有可能或者我被误导了吗?我知道如何使用"call/cc"实现无条件跳转,但在机器级别使用分支指令执行条件执行,分支指令的执行取决于处理器的状态位.如果没有这种类型的结构,我看不出它是如何完成的.
你不能 - 你必须有一些方法来测试事物并根据它们是真还是假来行动.你可以接近,有一些布尔值的功能表示.例如,使用共同的教会编码:
(define (true x y) x)
(define (false x y) y)
Run Code Online (Sandbox Code Playgroud)
现在你可以考虑一个测试(返回其中一个编码的布尔值)作为一个接受"成功"延续和"失败"延续的函数,并使用它继续:
(define (if c x y) (c x y))
Run Code Online (Sandbox Code Playgroud)
如果你想试验这个,你需要考虑一个事实,即Scheme不是一个懒惰的语言,所以你需要把事情搞砸.例如:
(define (true x y) (x))
(define (false x y) (y))
(define-syntax if
[(if c x y) (c (lambda () x) (lambda () y))])
Run Code Online (Sandbox Code Playgroud)
(但你仍然需要修改现有的谓词等来返回这些布尔值.)
无论哪种方式,call/cc本身并没有真正做任何相关的事情......