问题标签 [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 投票
2 回答
6780 浏览

scheme - 方案中的数组表示

我是函数式编程领域的新手,刚刚开始学习 Scheme(尽管它是一种半函数式编程语言)。我做了一些关于列表的教程,这些教程在 Scheme 中得到了很好的支持。我想知道 Scheme 是否支持摆弄数组?

还是我需要定义自己的数据类型?列表是一种归纳定义的数据类型。如果我要将数组定义为一种新的数据类型,那么它可以归纳定义吗?

请帮忙。提前致谢。

干杯

0 投票
2 回答
3582 浏览

c# - 为什么 C# 没有词法嵌套函数?

为什么 C# 语言设计者可能不包含对此类内容的支持(来自计算机程序的结构和解释,第二版,第 30 页):

0 投票
11 回答
4060 浏览

data-structures - Lisp/Scheme 中的自引用数据结构

有没有办法在lisp或scheme中构建一个自引用数据结构(比如一个带循环的图)?我以前从未想过它,但由于缺乏进行破坏性修改的方法,我找不到直接的方法来制作它。这只是函数式语言的一个本质缺陷吗?如果是这样,那么像 haskell 这样的惰性函数式语言呢?

0 投票
10 回答
16161 浏览

lambda - 什么是通话/抄送?

我已经尝试过几次来掌握延续call/cc的概念。每一次尝试都是失败的。有人可以向我解释这些概念吗,最好用比维基百科或其他 SO 帖子中更现实的例子。

我有网络编程和 OOP 的背景。我也了解 6502 程序集,并与 Erlang 有过一次小小的交流。但是,我仍然无法理解 call/cc。

0 投票
4 回答
2910 浏览

scheme - 为什么 Scheme 不支持一流的环境?

我一直在阅读 SICP(计算机程序的结构和解释),并且非常兴奋地发现了这种奇妙的特殊形式:“make-environment”,他们演示了将其与 eval 结合使用作为编写模块化代码的一种方式(摘录来自第 4.3 节“包”):

然后他们展示了它是如何工作的

在他们的例子中,他们接着准确地展示了我想要的用法——一种优雅的、极简主义的方式在方案中做“OO”风格......他们“cons”在一起一个“type”,这实际上是什么由“make-environment”特殊形式(即 vtable)和 arg(“状态”)返回...

我非常兴奋,因为这正是我一直在寻找的一种在 Scheme 中“按符号”进行多态调度的方法,而无需编写大量显式代码或宏。

即我想创建一个“对象”,它有两个函数,我在不同的上下文中调用它们......但我不想用“car”和“cdr”来引用它们,我想同时声明并通过它们的符号名称来评估它们。

无论如何,当我读到这篇文章时,我迫不及待地想回家试试。

想象一下,当我在 PLT 计划和 Chez 计划中遇到以下情况时,我会感到失望:

SICP 中提到的“make-environment”发生了什么?这一切看起来如此优雅,正是我想要的,但似乎任何现代 Scheme 解释器都不支持它?

理由是什么?仅仅是“make-environment”的名称不同吗?

更多信息稍后发现

我看了一下在线版本:

http://mitpress.mit.edu/sicp/full-text/book/book-ZH-28.html#%_sec_4.3

我正在读的是SICP的第一版。第二版似乎用关于非确定性编程和“amp”运算符的部分取代了对包的讨论。

0 投票
2 回答
3585 浏览

scheme - 如何在 DrScheme 中重新定义常量标识符?

我正在使用 DrScheme 编写一个 Scheme 解释器。我定义了一个读取评估打印循环,并且我正在重新定义评估过程。这在 Chez Scheme 等其他方案实现中效果很好,但我不喜欢 Chez Scheme 中的代码编辑,所以我想为此使用 DrScheme。

当我进行如下定义时: (define (eval exp env) (cond ...)) 它说:define-values: cannot change constant identifier: eval

有没有办法覆盖它并让我更改常量标识符?我宁愿不必重命名所有变量来解决这个问题。

0 投票
7 回答
892 浏览

functional-programming - 您如何正确计算 Scheme 中的成对差异?

给定一个数字列表,比如说,如果你有 x -1 = 0 ,你(1 3 6 10 0)如何计算差异 (x i - x i-1 )?

(本例中的结果应该是(1 2 3 4 -10)

我发现这个解决方案是正确的:

但是,我认为应该有更优雅但同样灵活的解决方案。这只是丑陋的。

我是函数式编程的新手,想听听有关代码的任何建议。

谢谢。

0 投票
16 回答
3800 浏览

programming-languages - 修复 Lisp 语法

作为 Lisp 的新手,我想知道 Lisp 语法是否可以“固定”?

有人说 Lisp 中的语法是其最大的优势之一。我不太明白这一点。

难道不能用空格、换行和缩进的组合来替换“明显的”括号吗?就像在 Python 中一样?

在我看来,括号是 Lisp 代码中最常用的字符。我想知道这是否属实 - 但如果是这样,这不是一个建议,语法中有一些冗余吗?

这个问题是否有一些简单的答案 - 为什么有这么多括号?

例如:

为什么不:

例如,在行尾关闭括号,并始终在新行中打开它们。只有 1 是模棱两可的——它是 1 还是 (1)——但我们可以引入一个例外——单个标记没有“列出”。

这能行吗?

编辑:

谢谢你们!我现在看到lispin网站上有一些链接

0 投票
3 回答
1491 浏览

lisp - 对 let 语句的 Lisp 评估

我正在编写一个 Scheme 解释器,我面临着一个有效的 let 语句,例如:

我的解释器只实现了 Scheme 的一个纯函数子集,所以不会有 set! 之类的副作用。在纯函数式语言中,为什么要在上面的 let 语句中允许多个表达式?

在编写我的解释器时,除了 let 中的最后一个表达式,我还有什么理由应该评估任何东西?似乎它们永远不会影响评估的最后一个语句的结果。

0 投票
5 回答
2204 浏览

lisp - 如何判断列表是否包含第三项?

我有一个函数,它接受一个包含两个或三个元素的列表。

但是这段代码失败了

在 (null? (caddr ls)) 表达式上。

我也试过

但它也没有用。如何判断是否有第三项?