作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这里有几个问题,关于 letcc
在 The Seasoned Schemer 中使用。
(define (intersect-all sets)
(letcc hop
(letrec
((A (lambda (sets)
(cond
((null? (car sets)) (hop '())
((null? (cdr sets)) (car sets))
(else
(intersect (car sets)
(A (cdr sets)))))))
; definition of intersect removed for brevity
(cond
((null? sets) '())
(else (A sets))))))
letcc
实现了,这基本上类似于 catch
和 throw
在 ruby(和看似 CL)中,这基本上意味着可以通过调用任何命名的 letcc
来缩短整个代码块是。这感觉就像我在这一系列短书中遇到的最不“实用”的东西,它让我觉得使用它有点犹豫,因为我想学习一种好的实用风格。我是不是误会了letcc
,或者它不是真正的函数式编程概念,只是为了提高性能而存在?我可以在一些例程中间然后突然进入代码中的另一个点的整个想法感觉有点不对……就像在 Java 中滥用 try/catch 来进行程序流一样。 letcc
我在 OS X 中安装的 guile (1.8.7) 版本中似乎不存在。我应该在 guile 中寻找它的另一个名称吗? letcc
通过将它与 Java 中的 try/catch 或 ruby 中的 catch/throw 进行比较(这不是异常处理,只是为了清楚,对于非 ruby 主义者),它在功能级别上究竟是如何工作的?它能否以更长、更复杂的方式表达,让我相信它毕竟是功能性的? 最佳答案
call-with-current-continuation
, 通常也使用更友好的名称 call/cc
, 和 let/cc
是一个可以用 call/cc
构建的简单宏.let/cc
与一堆 others builtins 一起内置在 same family ,另外还有一个 whole library各种控制操作符(带有广泛的引用文献列表。)。 let/cc
的简单用法确实类似于 catch/throw 之类的东西——更具体地说,这种延续通常被称为“转义延续”(或有时“向上”)。这是您在该代码中的一种用途,通常用于实现 abort
或 return
.(define (foo f) (f 100))
(let/cc k (+ (foo k) "junk") (more junk))
关于functional-programming - 经验丰富的计划者,letcc 和诡计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11103852/
这里有几个问题,关于 letcc在 The Seasoned Schemer 中使用。 (define (intersect-all sets) (letcc hop (letrec
书中The Seasoned Schemer - 作者编写了以下代码: (define intersectall (lambda (lset) (letcc hop (letr
我是一名优秀的程序员,十分优秀!