- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有问题的代码是这样的:
(define multirember&co
(lambda (a lat col)
(cond
((null? lat)
(col (quote ()) (quote ())))
((eq? (car lat) a)
(multirember&co a
(cdr lat)
(lambda (newlat seen)
(col newlat
(cons (car lat) seen)))))
(else
(multirember&co a
(cdr lat)
(lambda (newlat seen)
(col (cons (car lat) newlat)
seen))))))
col
但在示例中,他们似乎使用了原始定义。为什么不改。你怎么能在不传入参数的情况下重复它
newlat
和
seen
.
最佳答案
让我们看一个例子;也许这会有所帮助。 :-) 为简单起见,我将使用 list
作为收集器/延续,它只会返回一个带有延续参数的列表。
(multirember&co 'foo '(foo bar) list)
a = 'foo
lat = '(foo bar)
col = list
(eq? (car lat) a)
条件匹配,因为
lat
不为空,且
lat
的第一个元素是
'foo
.这将设置下一个递归到
multirember&co
因此:
a = 'foo
lat = '(bar)
col = (lambda (newlat seen)
(list newlat (cons 'foo seen))
else
匹配:自
lat
不为空,且
lat
的第一个元素是
'bar
(而不是
'foo
)。因此,对于下一次递归,我们有:
a = 'foo
lat = '()
col = (lambda (newlat seen)
((lambda (newlat seen)
(list newlat (cons 'foo seen)))
(cons 'bar newlat)
seen))
col = (lambda (newlat1 seen1)
((lambda (newlat2 seen2)
(list newlat2 (cons 'foo seen2)))
(cons 'bar newlat1)
seen1))
(null? lat)
子句匹配,因为
lat
现在是空的。所以我们叫
(col '() '())
((lambda (newlat1 seen1)
((lambda (newlat2 seen2)
(list newlat2 (cons 'foo seen2)))
(cons 'bar newlat1)
seen1))
'() '())
newlat1 = '()
和
seen1 = '()
时)变成
((lambda (newlat2 seen2)
(list newlat2 (cons 'foo seen2)))
(cons 'bar '())
'())
(cons 'bar '())
)
((lambda (newlat2 seen2)
(list newlat2 (cons 'foo seen2)))
'(bar)
'())
newlat2 = '(bar)
和
seen2 = '()
,我们得到
(list '(bar) (cons 'foo '()))
(list '(bar) '(foo))
'((bar) (foo))
关于recursion - 解释 The Little Schemer 第 137 页上的延续示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7004636/
我一直在阅读《经验丰富的策划者》,并且遇到了 length 函数的定义 (define length (let ((h (lambda (l) 0))) (set! h (L (lambd
考虑以下 s 表达式: ((lambda (car) (car (quote (a b c)))) cdr) 在我尝试过的大多数方案实现中,计算结果为 (b c)因为cdr传递给 lambda,将其命
我很难理解 The Little Schemer 的 evens-only*&co 发生了什么事情第 145 页的示例。 这是代码: (define evens-only*&co (lambda (
在从SICP学习了一些Scheme之后,我开始阅读The Little Schemer(我觉得很有趣),并且完成了大约四分之一。我注意到,无需使用lambda即可编写许多(大多数?全部?)解决方案,而
我正在通过 The LIttle Schemer 来学习 Scheme(作为一个老 C 程序员),作为一个练习,我尝试编写一个过程来仅使用 The Little Schemer 中的表单来展平列表;即
我一直在工作 The Reasoned Schemer (TRS)使用 Clojure.logic 并注意 differences documented here .我到达了第 3 章的第 24 帧,
所以,我花了很多时间阅读和重读 The Little Schemer 第 9 章的结尾,其中应用 Y 组合器是为 length 开发的。功能。我认为我的困惑归结为一个对比两个版本的长度的声明(在组合器
第178页,有一道题:what is the value of (cons rep-car (cons (cons rep-quote (cons (c
有问题的代码是这样的: (define multirember&co (lambda (a lat col) (cond ((null? lat) (col (quo
在推理的方案中,他们以“o”结尾命名标准 lisp 函数,例如 conso和 appendo . 我的问题是:为什么“The Reasoned Schemer”在其函数的末尾添加一个“o”? 最佳答案
我刚刚开始阅读小阴谋家。它从几个问题开始,询问给定的表达式是否是一个原子。这很简单,但有趣的是,第一个问题让我有点反感。它问: Is it true that this is an atom? a
我最近开始关注 The Little Schemer 中的示例在尝试 DrScheme 中的示例时, 我已经意识到从书中的示例到我可以在 DrScheme 中编写的内容有一些细微的语法变化。 首先,作
我目前正在阅读“The Little Schemer”,我需要一种方法来在我的 Windows 机器上测试本书中的 Scheme 示例。 我可以使用什么应用程序执行此操作(在 Windows 上,而不
我不明白 run n (x) g0 g1 ... 如何运行 listo 列表是这样定义的 (define listo (lambda (l) (conde [(nullo l)
我目前正在通过学习 The Reasoned Schemer 来学习 miniKanren。 而我卡在第5章第62帧的练习中:(run* (x) (flatten_o (a) x)),为什么输出的
(define get-first (lambda (l) (call-with-current-continuation (lambda (here) (se
在小策划师的第九章中,作者给出了以下两个函数 (define Q (lambda (str n) (cond ((zero? (remainder (first$ str )
我是一名优秀的程序员,十分优秀!