问题标签 [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.
scheme - 方案中的数组表示
我是函数式编程领域的新手,刚刚开始学习 Scheme(尽管它是一种半函数式编程语言)。我做了一些关于列表的教程,这些教程在 Scheme 中得到了很好的支持。我想知道 Scheme 是否支持摆弄数组?
还是我需要定义自己的数据类型?列表是一种归纳定义的数据类型。如果我要将数组定义为一种新的数据类型,那么它可以归纳定义吗?
请帮忙。提前致谢。
干杯
c# - 为什么 C# 没有词法嵌套函数?
为什么 C# 语言设计者可能不包含对此类内容的支持(来自计算机程序的结构和解释,第二版,第 30 页):
data-structures - Lisp/Scheme 中的自引用数据结构
有没有办法在lisp或scheme中构建一个自引用数据结构(比如一个带循环的图)?我以前从未想过它,但由于缺乏进行破坏性修改的方法,我找不到直接的方法来制作它。这只是函数式语言的一个本质缺陷吗?如果是这样,那么像 haskell 这样的惰性函数式语言呢?
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”运算符的部分取代了对包的讨论。
scheme - 如何在 DrScheme 中重新定义常量标识符?
我正在使用 DrScheme 编写一个 Scheme 解释器。我定义了一个读取评估打印循环,并且我正在重新定义评估过程。这在 Chez Scheme 等其他方案实现中效果很好,但我不喜欢 Chez Scheme 中的代码编辑,所以我想为此使用 DrScheme。
当我进行如下定义时: (define (eval exp env) (cond ...)) 它说:define-values: cannot change constant identifier: eval
有没有办法覆盖它并让我更改常量标识符?我宁愿不必重命名所有变量来解决这个问题。
functional-programming - 您如何正确计算 Scheme 中的成对差异?
给定一个数字列表,比如说,如果你有 x -1 = 0 ,你(1 3 6 10 0)
如何计算差异 (x i - x i-1 )?
(本例中的结果应该是(1 2 3 4 -10)
)
我发现这个解决方案是正确的:
但是,我认为应该有更优雅但同样灵活的解决方案。这只是丑陋的。
我是函数式编程的新手,想听听有关代码的任何建议。
谢谢。
programming-languages - 修复 Lisp 语法
作为 Lisp 的新手,我想知道 Lisp 语法是否可以“固定”?
有人说 Lisp 中的语法是其最大的优势之一。我不太明白这一点。
难道不能用空格、换行和缩进的组合来替换“明显的”括号吗?就像在 Python 中一样?
在我看来,括号是 Lisp 代码中最常用的字符。我想知道这是否属实 - 但如果是这样,这不是一个建议,语法中有一些冗余吗?
这个问题是否有一些简单的答案 - 为什么有这么多括号?
例如:
为什么不:
例如,在行尾关闭括号,并始终在新行中打开它们。只有 1 是模棱两可的——它是 1 还是 (1)——但我们可以引入一个例外——单个标记没有“列出”。
这能行吗?
编辑:
lisp - 对 let 语句的 Lisp 评估
我正在编写一个 Scheme 解释器,我面临着一个有效的 let 语句,例如:
我的解释器只实现了 Scheme 的一个纯函数子集,所以不会有 set! 之类的副作用。在纯函数式语言中,为什么要在上面的 let 语句中允许多个表达式?
在编写我的解释器时,除了 let 中的最后一个表达式,我还有什么理由应该评估任何东西?似乎它们永远不会影响评估的最后一个语句的结果。
lisp - 如何判断列表是否包含第三项?
我有一个函数,它接受一个包含两个或三个元素的列表。
但是这段代码失败了
在 (null? (caddr ls)) 表达式上。
我也试过
但它也没有用。如何判断是否有第三项?