标签: sicp

Scheme和Common Lisp之间有什么实际区别?(或任何其他两种Lisp方言)

注意:我不是在问哪个学习,哪个更好,或者类似的东西.

我拿起SICP的免费版本,因为我觉得阅读会很好(我听说过很好的东西,而且我对这种编程方面很感兴趣).

我知道Scheme是Lisp的一种方言,我想知道:Scheme和Common Lisp之间的实际区别是什么?

似乎有很多关于'CL有一个更大的stdlib ...方案对现实世界的编程不好......'但实际上并没有说'这是因为CL就是这个/有这个'.

lisp scheme common-lisp sicp racket

71
推荐指数
3
解决办法
2万
查看次数

通过SICP工作的最佳方案实施是什么?

我一直在使用PLT Scheme,但它有一些问题.有没有人知道通过SICP更好的实施?

lisp scheme sicp

63
推荐指数
5
解决办法
3万
查看次数

SICP练习1.6的解释是什么?

我刚刚开始通过SICP(我自己;这不适合一个班级),我已经在练习1.6中苦苦挣扎了几天,我似乎无法弄明白.这是Alyssa重新定义if的方式cond,如下所示:

(define (new-if predicate then-clause else-clause)
    (cond (predicate then-clause)
          (else else-clause))
Run Code Online (Sandbox Code Playgroud)

她在一些简单的情况下成功测试它,然后用它来重新编写平方根程序(它工作得很好if):

(define (sqrt-iter guess x)
    (new-if (good-enough? guess x)
            guess
            (sqrt-iter (improve guess x)
                       x)))
Run Code Online (Sandbox Code Playgroud)

然后问题是:"当Alyssa试图用它来计算平方根时会发生什么?解释." [如果有必要,我很高兴能重现其他程序(good-enough?,improve,等),只是让我知道.]

现在,我知道会发生什么:它永远不会返回一个值,这意味着程序无限地递归.我无法解释为什么会这样.无论之间存在什么微妙的差异,if并且new-if正在逃避我.任何和所有帮助非常感谢.

recursion sicp

58
推荐指数
5
解决办法
7946
查看次数

我可以将Common Lisp用于SICP,还是Scheme是唯一的选择?

另外,即使我可以使用Common Lisp,我应该吗?方案更好吗?

lisp scheme common-lisp sicp

47
推荐指数
4
解决办法
9839
查看次数

您将使用哪种语言进行SICP的自学?

我抓住了学习函数式编程的bug.所以我的下一个自学项目是通过计算机程序结构和解释.不幸的是,我从未学过Lisp,因为我不是大学的CS专业.

虽然SICP并不强调编程工具,但是练习需要选择一种类似Lisp的语言.似乎Scheme的一些实现将是阻力最小的路径.另一方面,我听说有人使用过Common LispClojure.在我看来,Common Lisp或Clojure更有可能在生产代码中使用,因此我的简历稍微好一点.顺便说一下,我完全认为学习语言本身就是值得的,但学习一种帮助我简历的语言仍然是一个好处.我是资本家,也是关于我学习的学者.

如果你不得不自学SICP,你会选择哪种语言?为什么?理想情况下,我想使用可以在JVM上运行的语言.我当然可以使用REPL与bash和emacs一起工作的语言.

附加:有没有人试过不使用Scheme阅读SICP?如果是这样,你的经历是什么样的?

lisp scheme functional-programming clojure sicp

32
推荐指数
4
解决办法
7193
查看次数

Dret博士对SICP的问题

我正在通过SICP工作.目前,在第一章中,我遇到了让Racket重新定义"原语"的问题.例如,我的印象是我应该可以任意做(define + 5),这样就可以了,或重新定义sqrt程序.相反,我明白了:

define-values: cannot change constant variable: +
Run Code Online (Sandbox Code Playgroud)

我的语言目前设置为R5RS,我认为这样可以解决与SICP的兼容性问题.

lisp scheme sicp racket

30
推荐指数
3
解决办法
1万
查看次数

Dr.Racket中哪个lang数据包适合SICP?

我正在尝试使用SICP,我得到了一些代码.所以我开始:

#lang scheme
(word 'comp 'uter)
Run Code Online (Sandbox Code Playgroud)

返回错误:函数(字)未定义.

即使我试图将其复制到IDE(运行):

(define word?
  (let ((number? number?)
        (symbol? symbol?)
        (string? string?))
    (lambda (x)
      (or (symbol? x) (number? x) (string? x)))))
Run Code Online (Sandbox Code Playgroud)

还是一样.

我认为这可能是语言版本的某些问题或者其他问题.


以上是"简单方案",当我在SICP中引入代码时:

(define (sqrt x)
    (sqrt-iter 1.0 x))
Run Code Online (Sandbox Code Playgroud)

IDE返回sqrt-iterundefined.代码可以在第一章找到:http://mitpress.mit.edu/sicp/code/index.html

scheme sicp dr.racket

26
推荐指数
2
解决办法
1万
查看次数

不知道如何解决SICP练习1.11

练习1.11:

函数ff(n) = nif n < 3f(n) = f(n - 1) + 2f(n - 2) + 3f(n - 3)if 的规则定义n > 3.编写一个f通过递归过程计算的过程.编写一个f通过迭代过程计算的过程.

递归地实现它很简单.但我无法弄清楚如何迭代地做到这一点.我尝试与给出的Fibonacci示例进行比较,但我不知道如何将其用作类比.所以我放弃了(羞辱我)并用Google搜索解释,我发现了这个:

(define (f n)
   (if (< n 3)
       n
       (f-iter 2 1 0 n)))

(define (f-iter a b c count)
   (if (< count 3)
       a
       (f-iter (+ a (* 2 b) (* 3 c))
               a
               b
               (- count 1))))
Run Code Online (Sandbox Code Playgroud)

阅读之后,我理解代码及其工作原理.但我不明白的是从函数的递归定义到此需要的过程.我不明白代码是如何在某个人的头脑中形成的.

你能解释一下解决方案所需的思考过程吗?

iteration recursion scheme sicp

25
推荐指数
2
解决办法
5645
查看次数

在Scheme中是否有等价于Lisp的"运行时"原语?

根据SICP第1.2.6节,练习1.22:

大多数Lisp实现包括一个名为runtime的原语,它返回一个整数,指定系统运行的时间(例如,以微秒为单位测量).

我正在使用DrScheme,运行时似乎不可用,所以我正在寻找一个好的替代品.我在PLT-Scheme Reference中发现有一个current-milliseconds原语.有谁知道Scheme中的计时器是否具有更好的分辨率?

lisp scheme sicp racket

23
推荐指数
2
解决办法
5746
查看次数

Mit-Scheme的空值?

谁能告诉我mit-scheme中的空值表示是什么?在SICP书中,它应该是"零"但它不起作用.谢谢.

scheme sicp mit-scheme

23
推荐指数
2
解决办法
1万
查看次数