【发布时间】:2014-03-03 04:11:09
【问题描述】:
我正在浏览Simply Scheme 并刚刚进入递归部分。
我不明白为什么当满足基本情况时,Scheme 返回递归过程的“构建”值,而不是导致基本情况评估为#t 的实际参数值。
例如,看看这个递归过程的示例代码 sn-p,它将一个单词作为输入,将其反转,然后将其吐回:
(define (reverse wd)
(if (empty? wd) wd
(word (last wd) (reverse (bl wd)))))
这让我感到困惑:(if (empty? wd) wd
我了解,当形参 wd 的实际参数值为空(或 "")时,基本情况的计算结果为 #t,导致 if 的第二个参数的值被计算。
我不理解的是if(在这种情况下为wd)的第二个参数如何返回一个非空的东西,即使它看起来是一样的,触发基本情况的空的形式参数。
我错过了什么?
如果文档(或文本)中有解释这一点的内容,我很乐意查看它。
【问题讨论】:
-
为了清楚(可能已经很清楚),如果
test为真,(if test then-part else-part)的值为then-part,如果test为假,else-part的值。因此,每当wd为空时,您将返回wd(为空)。但是,只要wd不为空,您就会返回(word (last wd) (reverse (bl wd)))。当wd不为空时,您知道为什么它不会为空吗?即使不考虑(reverse (bl wd)),只看(word (last wd) …),我们也会看到一些非空的东西,因为(last wd)是something,而(word <something> …)是一个以<something>开头的字符串。 -
@JoshuaTaylor - 是的,我明白了。 Sylwester 和 Chris Jester-Young 帮助确定了以下 cmets 的最终点。欢迎您的贡献。
标签: recursion scheme mit-scheme