我刚刚开始通过SICP(我自己,这不是一个class)工作,我一直在练习1.6几天,我似乎无法弄清楚。 这就是Alyssa用cond重新定义的一个cond ,就像这样: (define (new-if predicate then-clause else-clause) (cond (predicate then-clause) (else else-clause)) 她在一些简单的情况下成功地testing了它,然后用它来重新编写平方根程序( if工作得很好): (define (sqrt-iter guess x) (new-if (good-enough? guess x) guess (sqrt-iter (improve guess x) x))) 接下来的问题是:“当Alyssa试图用这个来计算平方根时会发生什么?解释。” [如果有必要,我很乐意再现其他程序( good-enough? , improve等),请让我知道。] 现在,我知道发生了什么:它永远不会返回一个值,这意味着程序无限recursion。 我无法解释为什么会发生这种情况。 无论new-if和new-if之间存在着细微的差别 任何和所有的帮助非常感谢。
另外,即使我可以使用Common Lisp,应该吗? 计划更好吗?
注意:我不是问要学哪个,哪个更好,或者类似的东西。 我拿起了SICP的免费版本,因为我觉得阅读起来不错(我听说过很好的东西,而且我对这种编程方面很感兴趣)。 我知道Scheme是Lisp的一种方言,我想知道:Scheme和Common Lisp之间的实际区别是什么? 似乎有很多关于“CL有一个更大的stdlib … Scheme对现实世界的编程不好”,但没有实际的事情说“这是因为CL是这个/有这个”。
我一直在使用PLT计划 ,但它有一些问题。 有没有人知道通过SICP的更好的实施?
我刚刚开始觉得我对于在球拍和scheme中使用lambda有一个模糊的理解,当我在SICP中遇到以下“替代”缺陷和汽车的定义 (define (cons xy) (lambda (m) (mxy))) (define (car z) (z (lambda (pq) p))) (define (cdr z) (z (lambda (pq) q))) 对于我的生活,我只是不能parsing它们。 任何人都可以解释如何parsing或扩展这些对于新手来说是有意义的吗?
我正在尝试与SICP,我有一些代码。 所以我开始: #lang scheme (word 'comp 'uter) 返回错误:函数(字)未定义。 即使我试图将其复制到IDE(运行): (define word? (let ((number? number?) (symbol? symbol?) (string? string?)) (lambda (x) (or (symbol? x) (number? x) (string? x))))) 还是一样。 我认为这可能是语言版本或其他问题。 以上是来自“Simply Scheme”,当我在SICP中准确地引入代码时: (define (sqrt x) (sqrt-iter 1.0 x)) IDE未定义返回sqrt-iter 。 代码可以在第一章中find: http : //mitpress.mit.edu/sicp/code/index.html