问题标签 [scheme]

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 投票
4 回答
1649 浏览

scheme - 还车价值?还是Scheme很奇怪?

在我使用 Scheme 和列表的一个项目中,我注意到了这种半奇怪的行为。我设法将行为隔离到一个部分中。代码是:

为我们提供以下输出:

谁能给我解释一下:

  1. 为什么不(set-car! x 6)更新Z?因为根据我的理解car/cdr返回指针或者引用对应的值。这真的很奇怪,我有点困惑。
  2. 如果car/cdr不返回引用/指针,那么最终如何set-cdr!操作列表v

有任何想法吗?这是一个简单的解决方法,但我更好奇为什么会出现变量的怪异现象。

0 投票
6 回答
428 浏览

recursion - 如何改进这段代码?

我对 SICP练习 1.11的解决方案是:

正如预期的那样,(f 100)之类的评估需要很长时间。我想知道是否有办法改进这段代码(不考虑递归),和/或利用多核盒子。我正在使用'mit-scheme'。

0 投票
2 回答
2704 浏览

linux - 如何在 Ubuntu 8.10 中为 6.001 设置 MIT 方案

我通过视频讲座和讲义进行自学 6.001。但是,我在 Ubuntu (intrepid) 中设置 MIT 方案时遇到了一些问题。

我使用包管理并安装了 MIT-Scheme,但它显然是使用错误的版本。它应该是 7.5.1 而不是 7.7.90

我按照这个网站的说明(http://ocw.mit.edu/OcwWeb/Electrical-Engineering-and-Computer-Science/6-001Spring-2005/Tools/detail/linuxinstall.htm

到目前为止,我已经下载了 tar 文件,并解压到 /usr/local。我不知道第 3 步是什么意思。

然后我输入命令

方案 -large -band 6001.com -edit

错误是

此配置没有足够的内存。我尝试在sudo模式下运行,这次的错误是不同的Unable to allocate process table。

检测到不一致

我有接近 1GB 的可用内存,以及充足的硬盘空间。我应该怎么做才能成功设置?

0 投票
3 回答
7483 浏览

scheme - 将 LilyPond 源文件自动转置为多个键的最佳方法是什么?

问题

我正在使用LilyPond为教堂合唱团排版乐谱。根据在任何给定星期有空的人,歌曲将以不同的键播放。我们有一位了不起的钢琴家,可以弹奏我们扔给她的任何东西,吉他手通常会在交替和弦上用铅笔画,但我想通过在我们想要的任何键上提供精美的排版乐谱来让事情变得更容易。

所以说我们要唱我们的ABC。首先,我将获取任何可用的源转录并将其输入到 LilyPond 脚本中:

我想要自动转置它的能力,所以如果我想把整个东西放在'G'中,我把这首歌包装在一个 \transpose 调用中,如下所示:

我真正想要的是用一些东西代替“g”并多次生成旋律的输出。简单的 LilyPond 变量似乎在这里不起作用,到目前为止,我还没有成功定义一个方案函数来执行此操作。

我目前采取的方法是将上述文件命名为 twinkle.ly 并将其转换为名为 twinkle.ly.m4 的 M4 脚本,其内容如下所示:

然后我通过执行以下行来编译 while 事物:

我写了一个 Makefile 来为我做这件事,为我拥有的每首歌和我感兴趣的每一个键定义规则。

问题 必须有更好的方法来解决这个问题。鉴于 Lilypond 支持嵌入式方案,我宁愿不使用对其进行预处理的宏。有没有其他人想出解决同样问题的方法?

0 投票
2 回答
9185 浏览

scheme - 当省略“else”时,Scheme 的“cond”子句会发生什么?

我正在学习Scheme。我最近花了(太多!)时间试图找到程序中的错误,然后才意识到我在 cond 子句中错过了“else”词。但是在这种情况下的行为似乎有点奇怪。只用一个简单的程序(如下)试验条件,“whatever”会在 else 子句中按预期显示,但也会显示,但没有“else”,会显示周围的双引号和未解释的新行字面上打印。谁能向我解释发生了什么?TIA。

0 投票
3 回答
654 浏览

scheme - 我如何从 SICP 调用方案编号函数

在 SICP 中,(ex 2.6)以下功能被描述为“无数字生活”的方式。我正在努力理解这一点。作为起点,如何调用这些函数?我真的可以以某种方式应用它们,输出为 1 吗?(或任何其他数字?)

我最初的尝试没有成功:

0 投票
6 回答
551 浏览

functional-programming - 函数式:构造一个整数列表 1..n

这不是家庭作业。我正在自学标准机器学习。我也懂一点 Scheme,所以这个问题应该可以用任何一种语言来回答。

我自己强加的任务是编写一个函数来构造一个从 1 到 n 的整数列表。例如,list(7) 应该返回 [1,2,3,4,5,6,7]。O(n) 解决方案将是理想的。

很容易在线性时间内反向构造一个列表(即 [n,n-1,..,1]):

我尝试构建一个列表是 O(n^2) 因为追加操作是线性的。

我的下一个尝试是通过从 ni​​l 开始,将 n 附加到前面,然后向后递归到 1 来构建从末端到前面(从右到左)的列表。但它根本不起作用。

有些东西让我觉得我需要一个帮助函数来构建未终止的列表以用于递归,但我很难过。

0 投票
8 回答
1534 浏览

programming-languages - 为什么是高阶程序?

因此,如果一种语言提供更高阶的过程,那么我可以拥有返回过程的过程。就像是:

要创建新程序,我只需执行以下操作:

类似的任务可以在不支持高阶过程的语言中完成,方法是定义Proc接受 4 个而不是 3 个参数并调用此过程来定义ProcA,例如:

那么为什么有这么多关于高阶程序的模糊呢?我错过了什么吗?

0 投票
2 回答
520 浏览

list - 如何使用内置列表功能“过滤器”

请帮助我使用 DrScheme 内置功能“过滤器”。

“创建一个函数“hello”,它使用一个数字'Max'和一个数字列表'L',生成一个小于'Max'的'L'中的数字列表。”

编辑取自格式化的评论

这就是我到目前为止所拥有的

我不知道如何在函数 hello 中实现 Max。

0 投票
7 回答
1416 浏览

c++ - 用一种语言编写的代码如何从另一种语言调用

这是一个我一直想知道答案但从未真正问过的问题。

由一种语言(尤其是解释型语言)编写的代码如何被编译型语言编写的代码调用。

例如,假设我正在用 C++ 编写一个游戏,并且我将一些 AI 行为外包给了用 Scheme 编写的。用 Scheme 编写的代码如何达到编译后的 C++ 代码可以使用的程度?C++ 源代码如何使用它,C++ 编译代码如何使用它?使用方式有区别吗?

有关的

多语言如何在一个项目中交互?