问题标签 [sicp]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1926 浏览

lisp - 运行基于 SICP 模式匹配规则的替换代码

我在网上找到了本课的代码(http://groups.csail.mit.edu/mac/ftpdir/6.001-fall91/ps4/matcher-from-lecture.scm),我玩得很开心试图调试它。该代码看起来与 Sussman 所写的非常相似:

我正在使用 R5RS 在 DrRacket 中运行它,我遇到的第一个问题是那个原子?是一个未定义的标识符。所以,我发现我可以添加以下内容:

然后我试图弄清楚如何实际运行这个野兽,所以我再次观看了视频并看到他使用以下内容:

正如苏斯曼所说,我应该回来(+ 1 0)。相反,使用 R5RS 我似乎打破了扩展字典的过程:

它返回的具体错误是: mcdr: expects argument of type mutable-pair; 给定#f

使用 neil/sicp 时,我在以下行中断了评估程序:

它返回的具体错误是:模块中的未绑定标识符:用户初始环境

所以,说了这么多,我会很感激一些帮助,或者是朝着正确方向的一个很好的推动。谢谢!

0 投票
2 回答
534 浏览

shell - 运行 SICP 方案文件,例如快速失败的测试

经过几年的编程,似乎是时候最终攻击SICP 了。但是,与其在 Emacs 中编辑和运行所有内容,我更愿意使用不同的编辑器和一个简单的makefile来运行所有练习。这似乎并不完全是经典,因为在某些“失败”之前,我找不到任何对像运行文件这样基本的东西的引用。那么如何在 shell 上运行 Scheme,以便它加载文件,按顺序评估每个表达式,并在遇到一个评估为或退出代码为零的语句时立即以非零退出代码终止,如果#f整个文件评估成功?到目前为止最接近解决方案的事情:

编辑:换句话说,如果其中的任何表达式评估为 ch1.s​​cm ,是否有某种方法可以在加载 ch1.s​​cm 期间停止评估#f

0 投票
2 回答
1053 浏览

scheme - SICP 练习 1.2

我在 SICP 中的练习 1.2 中遇到了困难。

将以下内容翻译成前缀形式:

这就是我所拥有的,我无法弄清楚为什么它不起作用。我错过了什么?

0 投票
4 回答
721 浏览

c# - C# 开发人员开始 SICP - 建议的开发环境?

我终于开始阅读SICP。

我下载了GNU/MIT 方案,看来我需要在 Edwin 编辑器中工作,当你习惯它时我相信它会很棒,但是我真的不希望在学习方案的同时不必学习新的编辑器。

我希望会有一个 Visual Studio 插件或类似的东西。

我真的很高兴只使用notepad ++并使用命令行进行编译。

有没有人有任何建议?

0 投票
4 回答
5240 浏览

scheme - 仍然推荐 SICP 吗?

我对 python 有一些经验,我要求一种新的语言,并说我很难实现我所学的。他们建议我学习 SICP。说它使用了一种很棒的语言并教授了很棒的编程基础知识。

但我注意到它是在 1984 年出版的。你们推荐它,还是我被拖了?:p

谢谢。

0 投票
7 回答
2466 浏览

javascript - 我想实现一个用于学习 SICP 的方案解释器

我正在阅读Structure and Interpretation of Computer Programs一书,我想逐渐编写一个方案解释器。

你知道最容易阅读(而且简短)的方案的实现吗?我将用 C 编写一个 JavaScript。

0 投票
2 回答
390 浏览

scheme - SICP视频讲座2

我对这个例子有疑问

-1+ 和 1+ 有什么问题,当我评估它时,我得到了这个结果

  • DrScheme:-1+:此函数未定义
  • 球拍:对未定义标识符的引用:-1+

但我写了这个,它可以工作

0 投票
2 回答
1113 浏览

macros - 你如何编写一个 MIT Scheme 宏来返回一个 lambda 形式?

我试图在 MIT 方案中创建与这个微不足道的(在 Common Lisp 中)宏的等价物,这让我感到困惑:

这是一个简单的个人项目,一个基于第二个 SICP 讲座中构建的函数的数值方程求解器。我不在乎这个宏是否“安全”或“卫生”,或者如果 exp 引用除 'x. 我希望能够写作

其中 solv 是:

而不必打字

但无法弄清楚如何使用 MIT 方案语法规则来做到这一点。

我已经尝试过了,但它不起作用:

我尝试了其他可能不值得提及eval但无济于事的事情。

此外,参考了关于 Scheme 宏系统的优秀教程(不是参考资料),这些教程从简单的小示例开始,并带有大量评论,特别是展示了如何将反引号逗号样式的 LISP 宏(对我来说非常直观)转换为Scheme 的语法宏系统会很棒。

0 投票
2 回答
481 浏览

clojure - SICP sqrt NullPointerException

在 Clojure 中实现一些初始 SICP 代码时,我遇到了意外的 NullPointerException。特别是,我想实现第 1.1.7 节中的迭代平方根过程。

这是代码:

这适用于足够小的值,例如(sqrt 16). NullPointerException clojure.lang.Numbers.lt (Numbers.java:3693)对于任何大于 about 的输入,我都会收到错误消息(square 2718)

有任何想法吗?

更新整个回溯(前一个是我在 repl 中得到的全部内容):

在 sicp_in_clojure.chapter_one$sqrt$good_enough_QMARK___14.invoke(chapter_one.clj:40) 在 sicp_in_clojure.chapter_one$sqrt 的 clojure.lang.Numbers.lt(Numbers.java:3693) 的线程“main”java.lang.NullPointerException 中的异常。在 sicp_in_clojure.chapter_one$eval19.invoke(chapter_one.clj:48) 的 sicp_in_clojure.chapter_one$sqrt.invoke(chapter_one.clj:37) 调用(chapter_one.clj:43)。 :6465) at clojure.lang.Compiler.load(Compiler.java:6902) at clojure.lang.Compiler.loadFile(Compiler.java:6863) at clojure.main$load_script.invoke(main.clj:282) at clojure .main$script_opt.invoke(main.clj:342) at clojure.main$main.doInvoke(main.clj:426) at clojure.lang.RestFn.invoke(RestFn.java:408) at clojure.lang.Var。在 clojure.lang.AFn 调用(Var.java:401)。applyToHelper(AFn.java:161) 在 clojure.lang.Var.applyTo(Var.java:518) 在 clojure.main.main(main.java:37)

0 投票
2 回答
574 浏览

emacs - 从信息缓冲区向方案解释器发送代码

我想在我的 Emacs 中学习 SICP。我已经安装了 MIT Scheme、Emacs 24 并下载了 sicp 信息(使用本指南http://www.pchristensen.com/blog/articles/setting-up-and-using-emacs-infomode/)。现在我可以在专用缓冲​​区(Mx run-scheme)中运行方案解释器,但是当我尝试从信息缓冲区(Cx Ce)发送定义表达式之一时出现以下错误:

看起来 Emacs 正在尝试使用 Lisp 解释器执行此代码。作为此问题的解决方法,我现在打开方案缓冲区(*.scm 文件),从 info 中将代码复制到其中,然后他们使用 Cx Ce 执行它。但我想直接从信息缓冲区执行它。我该如何设置?