Scheme 中 "if" 和 "cond" 的区别
difference in "if" and "cond" in Scheme
我正在使用 Scheme 学习 Berkeley CS61A。 pigl
函数用于引入递归,示例代码如下
(define (pigl wd)
(if (pl-done? wd)
(word wd 'ay)
(pigl (word (bf wd) (first wd))) ) )
我尝试将if
改为cond
表达式,修改后的代码如下
(define (pigl2 wd)
(cond ((pl-done? wd) (word wd 'ay))
(else pigl2 (word (bf wd) (first wd))) ) )
根据我对SICP中if
和cond
解释的理解,我认为这两个过程应该是等价的。但是 pigl2
没有工作,它给出了 'ab
输入 'ba
并且正确答案是 abay
.
不知道是我理解错了if
和cond
的求值规则,还是犯了其他愚蠢的错误。请帮助我,谢谢!
这是你的代码,注释以突出问题:
(define (pigl2 wd)
(cond ((pl-done? wd) (word wd 'ay))
(else
pigl2 ; this line does nothing at all
(word (bf wd) (first wd))))) ; return result of calling `word`
您实际上忘记了 调用 pigl2
:缺少括号!这应该可以解决问题:
(define (pigl2 wd)
(cond ((pl-done? wd) (word wd 'ay))
(else (pigl2 (word (bf wd) (first wd))))))
我正在使用 Scheme 学习 Berkeley CS61A。 pigl
函数用于引入递归,示例代码如下
(define (pigl wd)
(if (pl-done? wd)
(word wd 'ay)
(pigl (word (bf wd) (first wd))) ) )
我尝试将if
改为cond
表达式,修改后的代码如下
(define (pigl2 wd)
(cond ((pl-done? wd) (word wd 'ay))
(else pigl2 (word (bf wd) (first wd))) ) )
根据我对SICP中if
和cond
解释的理解,我认为这两个过程应该是等价的。但是 pigl2
没有工作,它给出了 'ab
输入 'ba
并且正确答案是 abay
.
不知道是我理解错了if
和cond
的求值规则,还是犯了其他愚蠢的错误。请帮助我,谢谢!
这是你的代码,注释以突出问题:
(define (pigl2 wd)
(cond ((pl-done? wd) (word wd 'ay))
(else
pigl2 ; this line does nothing at all
(word (bf wd) (first wd))))) ; return result of calling `word`
您实际上忘记了 调用 pigl2
:缺少括号!这应该可以解决问题:
(define (pigl2 wd)
(cond ((pl-done? wd) (word wd 'ay))
(else (pigl2 (word (bf wd) (first wd))))))