问题标签 [chez-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 回答
194 浏览

scheme - 为什么你可以重新定义 `lambda`?

我不理解这两个方案程序之间的以下行为:

程序 1

这个程序使用 运行,在没有打印出字符串的情况下scheme test.ss给我一个语法错误。lambda"hmm"

方案二

这里的最终结果a是 等于8


第一个程序中的行为是我在两个程序中所期望的行为。令我困惑的是为什么第二个程序不会因语法错误而失败。显然我正在重新定义lambda,但我认为这会在代码实际运行之前因语法错误而失败。在我看来,要知道这不是语法错误,您需要实际运行程序,但如果这是这种行为,那么我希望第一个程序在出错之前显示字符串。

简而言之,为什么第一个程序会导致语法错误,而第二个程序不会呢?

0 投票
2 回答
656 浏览

scheme - 如何在 chez 方案中加载 slib 库?

如何在 chez 方案中加载 slib 库?

或任何其他用于 chez 方案的 Web 服务器库?

在 slim 手册上它说:

  1. 配置方案实现以定位 SLIB 目录和实现目录。
  2. 安排每个 Scheme 实现加载其 SLIB 初始化文件。
  3. 为每个 Scheme 实现构建 SLIB 目录。

我不知道如何专门执行第 3 步和第 4 步。

如果我在文档 slib 中运行“chez”,这就是我得到的:

0 投票
1 回答
244 浏览

compiler-construction - 在 Scheme 中,`(begin)` 的返回值是多少?

我知道这(begin expr1 expr2 ...)将评估所有表达式并返回最后一个评估的表达式。

我发现在 Chez Scheme 中,它允许在begin没有这样的表达式的情况下使用:(begin). 我正在使用 Chez Scheme 作为我学习的一部分。当我在控制台中写入时,(begin)它不会发送语法错误,它只是不显示任何内容,就像我得到void.

我的问题是,那将返回什么?

我认为这是您可以通过运行获得的 void 对象(void)。然而,当我测试它时,我意识到它不是。

我正在学习 Chez Scheme 作为我正在学习的编译器课程的一部分,我需要实现可以处理特殊单词的编译器的一部分begin。所以我需要知道为什么这甚至可能以及这个函数返回什么。

编辑:

我正在添加有关此主题的链接。我无法完全理解答案。另外,他没有提到返回类型。

0 投票
1 回答
97 浏览

macros - 检查标识符是否在宏扩展点被词法绑定?

这可能是一个新手问题,但我正在尝试编写一个宏来检测标识符是否在宏扩展点被词法绑定,并相应地更改其输出。这在 R6RS 方案中是否可行,如果可以,如何实现?

为什么我想知道

我正在使用宏在 Chez Scheme 中编写一个玩具 Objective-C 绑定层,我最初的挑战是有效地处理 Objective-C 选择器。程序必须在运行时查询 Objective-C 运行时,以获取SEL对应于每个选择器名称的实际对象。程序中使用的选择器名称在扩展期间将是静态已知的,并且很容易让我的宏插入该查询代码,但我想避免重复查询相同的选择器名称。

SEL我对此的第一个想法是对绑定到外部对象的方案定义有一些命名约定。这样,我可以(define)为每个唯一的选择器设置一个,因此每个选择器都有一个运行时查询。这取决于我的宏能够检测到任何给定选择器的这些绑定,并在它们不存在时引入它们,因此是我的问题。

这个解决方案仍然不完美,因为我的宏可能会在内部范围内扩展,但这对我来说是最明显的。有没有更好的方法在扩展时“实习”表达式?

0 投票
1 回答
117 浏览

syntax - 制作“派生”标识符的最简洁方法?

Scheme 宏生成“派生”标识符是很常见的,例如定义记录类型foo(使用 R6RS 语法记录 API)将如何默认定义一个名为make-foo. 我想在我自己的宏中做类似的事情,但我在标准库中找不到任何干净的方法。我最终写了这个:

我将语法对象(假定为标识符)转换为数据,将该符号转换为字符串,创建一个带有前缀的新字符串,将该字符串转换为符号,然后最后将该符号转换为标识符相同的句法环境identifier

这行得通,但它似乎迂回和凌乱。有没有更干净或更惯用的方法来做到这一点?

0 投票
2 回答
3783 浏览

scheme - Chez 方案可以生成编译后的二进制文件吗?

我最近一直在使用鸡肉方案,我发现它真的很好,有人建议 chez 方案是最快的方案实施。所以我想尝试一下,但我不确定如何从 chez 创建编译的二进制文件,就像在鸡计划中一样。

0 投票
1 回答
55 浏览

macros - 生成函数的宏

我正在尝试为整数的约束编程编写一些宏,特别是我正在尝试扩展

进入

当递归地使用语法规则时,我可以在开始时创建嵌套的 let,但我认为我失去了在最后调用参数列表的可能性。有什么办法吗?

0 投票
1 回答
374 浏览

scheme - 可以加速这个 Chez Scheme 微基准测试吗?

这个双循环在 Chez Scheme 中比在 C++ 中慢 50 倍(分别用--optimize-level 3和编译)-O3

对比

我意识到 Scheme 中的内存间接比 C++ 中的多,但性能差异仍然令人惊讶......

有没有一种简单的方法可以加快 Scheme 版本的速度?(没有将内存布局更改为完全不习惯的东西)

0 投票
0 回答
73 浏览

scheme - R6RS:应用于空列表的语法表达式形式是否返回包装的语法对象?

考虑 R6RS 方案中的以下表达式:

当我在 Racket 中键入这个表达式时,会返回一个(包装的)语法对象。另一方面,相同的表达式在 Chez Scheme 中产生(展开的)空列表。

我想知道哪个系统符合 R6RS(或者标准是否允许这两种行为)。R6RS 中的相关段落是解析输入并产生输出。在那里,它说:

语法产生的输出根据以下规则进行包装或解包......不包含任何模式变量的任何部分的副本都是一个包装的语法对象。

(syntax ())模板中不包含任何模式变量,所以看起来结果应该是一个包装的语法对象,并且 Racket 是对的。

另一方面,Chez Scheme 的作者 R. Kent Dybvig 是该syntax-case系统的发明者之一,因此人们期望 Chez Scheme 严格遵循该标准。

0 投票
1 回答
139 浏览

read-eval-print-loop - Chez计划的先前结果

在 Chez Scheme REPL 中,是否可以得到之前的结果?例如在 ruby​​ 的 irb repl 中,可以使用下划线。

例如,我可以执行以下操作吗?

得到6?