问题标签 [r5rs]

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 回答
282 浏览

macros - 是否可以匹配 R5RS 宏定义语法/语法规则中的重复模式?

这个 R5RS 宏是我尝试过的,也是我想做的。球拍或其他实现不喜欢这个宏,正是我想要魔法发生的地方。

这在 Common Lisp 中很容易:

我也一直在阅读定义语法入门并认为 is-eqv 的实现?会为我指出正确的方向,但似乎它不是在那里定义的宏。

如果在 R5RS 编译时不可能,那么如何使用 R6RS 来完成?

0 投票
1 回答
912 浏览

scheme - 方案 R5RS 的 ANTLR 文法

我是 ANTLR 的初学者,我正在通过一个例子来学习它。我使用 C 作为我的目标语言。该示例是取自此问题的 Scheme R5RS 语法文件,稍作修改(重命名语法名称并添加一些选项,语法规范不变)。

antlr 生成了词法分析器和解析器,我用一个测试编译它main(),我只是做一些初始化并简单地调用解析器。当使用一段方案代码运行测试程序时,解析器检测到一些语法错误(这不应该发生!)

maintest.c 中的函数

test.scm 中的方案代码:

终端输出:

我已经阅读了语法规范,它是正确的。我无法弄清楚问题出在哪里......有人可以帮忙吗?谢谢!

======================回复=========================

按照 and 的语法规则patterntemplate我下到了下面的代码片段。我认为解析将template与之匹配并失败,因为template没有quasiquote替代方案。

我相信 for 的语法规则template正确地遵循了 R5RS 规范,并且该代码被其他 R5Rs 方案实现所接受(我在 scheme48 和 guile 中对其进行了测试)。这怎么可能发生?

我想我的分析一定有问题……

0 投票
2 回答
1073 浏览

random - 无限随机流

我在创建从 0 到 9 的无限随机数字流时遇到了一些麻烦。这就是我现在所处的位置:

唯一的问题是,(random 9)似乎只启动了一次。流确实是随机的,但流的值保持不变。

我得到7, 7, 7, 7, 73, 3, 3, 3, 3

关于每次无限循环重新开始时如何启动随机函数的任何想法?我已经在网上搜索了所有内容,但找不到任何方法来解决这个问题。

0 投票
2 回答
423 浏览

scheme - 如何在 R5RS 中编程?

我需要帮助在 dr Racket 中以 r5rs 的语法对此进行编码。调整函数,使其计算前 n 个偶数的总和

0 投票
2 回答
1183 浏览

compiler-construction - 是否有不同“RnRS”方案标准的摘要?

我需要为学术编译器实现选择一个方案标准。它必须足够简单,但仍然应该是一种强大的语言。Scheme有几个(RRS-R7RS)标准。这些报告是否有公开比较以供选择?如果不是,您会推荐哪一个作为第一个编译器?

0 投票
2 回答
716 浏览

lisp - Scheme中'define'的返回值是多少?

我很好奇definein Scheme 的返回值。所以我在 Racket 中写了以下几行

并得到错误

我对此有两个问题:

  1. 这是否意味着define没有返回值?
  2. 根据 R5RS,define不是表达式。这是一个程序结构。只有表达式有返回值,而其他形式没有,这是真的吗?
0 投票
1 回答
681 浏览

scheme - 方案函数只接受一个输入值而不是两个

我在下面有一个此功能,可让它打印您输入的列表(iota 1 10),因此在列表中打印数字 1-10(1 2 3 4 5 6 7 8 9 10)。我如何将其更改为仅取一个数字并仍从列表中的 1-(所选数字)打印。我只是想不通我应该怎么做。谢谢。

0 投票
2 回答
335 浏览

lambda - lambda 如何在方案中处理其主体内的未绑定变量?

在此代码段中:

(set! f (lambda...))被评估时,变量 g 不绑定到任何位置。正如 R5RS 的规范(链接在这里)所说:

计算 lambda 表达式时生效的环境将作为过程的一部分被记住。当稍后使用一些实际参数调用过程时,将通过将形式参数列表中的变量绑定到新位置来扩展评估 lambda 表达式的环境,相应的实际参数值将存储在这些位置,并且lambda 表达式主体中的表达式将在扩展环境中按顺序计算。

其中“有效环境”在某一时刻被定义为:

命名位置的标识符称为变量,并且被称为绑定到该位置。在程序中某个点生效的所有可见绑定的集合称为该点生效的环境。

所以内部 lambda 应该只捕获像这样的环境{f: (location #1)};并且当通过调用(f 5)用于评估其主体的环境来评估它时,它应该是{f: (location #1), x: (location #2)}不包含g.

但是 DrRacket(还有 petite,它是一个 R6RS 实现)在评估上述代码段时给出了 10。所以环境确实包含g. 为什么?

=====

似乎该方案要求定义语句仅出现在<body>. 但此代码段也返回 10:

0 投票
1 回答
444 浏览

map - 应用程序不是程序(方案映射程序)

我正在尝试在 R5RS 中编写自己的简化地图程序。简而言之,它接受一个过程和两个列表,并返回一个列表,其中包含在两个参数列表中的每对对象上调用的过程的结果,直到其中一个为空。

这适用于算术运算符,例如:

但是,当我尝试传递返回 #t 或 #f 的匿名 lambda 函数(我的 both? 过程的返回值)时,这不起作用。

我在 DrRacket 中收到的具体错误是:

如果有人能告诉我如何纠正这个错误,我会很高兴。我不明白为什么这段代码自己会失败。

0 投票
1 回答
594 浏览

scheme - 我在 DrRacket 做错了什么

所以我读到 DrRacket 是一个很好的通用 lisp IDE。我下载了它并将语言设置为R5RS并编写了以下函数定义:

但是它返回一个错误

而且我不知道如何解决它,考虑到 defun 是 common lisp 中一个完善的关键字。