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

scheme - 如何确定 Chicken Scheme 中是否存在变量?

Chicken Scheme 有没有办法在运行时确定当前是否定义了变量?

编辑:XY 问题。

我正在编写一个生成代码的宏。这个生成的代码必须以相互递归的方式调用宏——让宏简单地调用自身是行不通的。当宏被递归调用时,我需要它的行为与最初调用时不同。我会使用嵌套函数,但是呃....它是一个宏。

粗略的例子:

(是的,我知道 scheme 不使用 defmacro,但我来自 Common Lisp。而且我似乎无法在这里加上反引号,否则一切都会陷入困境。)

我不希望宏的 INITIAL 调用采用仅在递归调用时才有意义的额外参数。我希望它通过其他方式知道。

我可以获取生成的代码来调用嵌套在第一个宏中并且在调用站点不存在的宏吗?例如,生成调用(,other-macro)而不是(macro)?

但这不应该起作用,因为宏不是像函数那样的一流对象......

0 投票
1 回答
80 浏览

macros - 如何在 Chicken Scheme 宏中调用“when”宏?

Chicken Scheme 定义了一个(when)宏,相当于(if (begin)). 但是,当我尝试从我自己的一个宏中调用它时,它抱怨“变量”未定义:

错误:在 (blah ...) 扩展期间 - 未绑定变量:当

我该怎么import做才能完成这项工作?

0 投票
1 回答
142 浏览

macros - 如何从 Chicken Scheme 中的宏扩展程序中使用现有的宏 - 例如`let-values`?

如何从我自己的宏中调用内置的 Chicken Scheme 宏 - 特别let-values是在这种情况下?

未绑定变量:let-values

0 投票
1 回答
1169 浏览

scheme - 在 Chicken Scheme 中使用 vs Import vs Require vs Require-extension

我对鸡(use)(import)鸡之间的区别有点模糊。同样,(load)(require)有何(require-extension)不同?

这些东西在网站上似乎很少提及。

0 投票
1 回答
1088 浏览

scheme - How to statically link a Chicken Scheme program that uses extensions?

I have need to compile and statically link a Chicken program. I expect to use many extensions, most notably http-client.

I can compile the source with the following command:

or

But when I run it, I get the following error:

I have also tried (declare (uses http-client)) in the source, with no success:

Static linking is something I need. This is not an XY problem. I need my executables to run on a freshly-installed Linux system with no dependancies. This is the primary reason I switched from Common Lisp to Scheme in the first place.

What am I doing wrong, please?

0 投票
1 回答
106 浏览

scheme - 如何加载包含 #><# sharp-sign read 语法的 Chicken Scheme 文件?

我可以在 repl 或在使用加载的文件中使用大多数尖锐符号读取宏(load)

但我不能使用外部声明语法#> <#

诚然,可能没有理由在 repl 中使用它,但我正在尝试编写一个程序,该程序(load)在运行时作为其他源并自省它们,当它遇到语法时它就会崩溃:

我怎样才能(load)包含#>尖锐语法的文件?

0 投票
2 回答
81 浏览

scheme - 编译鸡计划鸡蛋“查找表”的问题

我正在尝试静态编译和链接一个 Chicken Scheme 程序,而这个鸡蛋给我带来了一些麻烦。当我在 repl 上尝试时,我得到了同样的错误,但有更多信息;所以这里是:

我试过的所有其他鸡蛋都编译得很好。有人可以帮我解决这个问题吗?这有点让我停下脚步。

0 投票
1 回答
795 浏览

compilation - 如何编译多个鸡计划文件?

我需要编译一个包含多个源文件的 Chicken Scheme 项目,但我遇到了错误。

根据手册这个 SO answer,我需要将(declare)s 放入我的来源。为什么编译器不能只看到我正在导入另一个源代码超出了我的范围,但是嗯。

问题是,即使我把(declare)s 放进去,编译器也会抱怨(import)s 和(use)s。

infinity.filesystem.scm:

infinity.general.scm:

命令:

编译器说:

语法错误(导入):无法从未定义的模块导入

未绑定变量:使用

如果我只是删除“infinity.general”的importuse声明,文件就会编译。但是,我有两个问题:

  1. 在没有and子句的情况下,生成的.o文件会真正起作用吗?或者它会在运行时抱怨缺少代码?importuse
  2. csi要求我的代码包含(import)(use)声明,而csc要求它不包含。但是,我要求我的代码同时适用于csicsc

请问我该如何解决?

0 投票
1 回答
1272 浏览

compilation - 如何编译这个鸡计划代码?

显然我之前的问题太宽泛了。所以这里又是一个简化的问题,并带有示例源代码。

我正在尝试编译一个包含多个文件的 Chicken Scheme 项目:

测试-a.scm:

测试-b.scm:

根据官方手册,我应该这样做:

我实际得到的是:

语法错误(导入):无法从未定义的模块导入

注意事项:

  • 我正在调用一个宏。
  • 我有一个(declare (uses条款,但 csc 找不到我的来源。
  • csc test-a.scm test-b.o -o test也不行。
  • 如果我删除load,该程序将无法在 csi 中运行。
  • 如果我删除use,该程序将无法在 csi 中运行。
  • 我需要该程序在 csi 中工作。

如何在不破坏与 csi的兼容性的情况下进行编译?

0 投票
2 回答
874 浏览

lambda - 计划中的让过 lambda?

在 Common Lisp 中,如果我想要两个函数共享状态,我会执行一个let over lambda,如下所示:

这些函数不是本地的let- 它们是维护对共享状态变量的引用的全局函数,该变量本身从外部是不可见的。例如,我可以在代码的其他地方执行以下操作:

然而,在 Scheme 中,这样的构造声明了局部函数,这些函数从外部是不可见的:

我能想到实现这种功能的唯一方法(除了在模块中使用未导出的全局变量)是这样的:

在 Scheme 中有没有一种方法可以编写let-over-lambda形式而无需求助于这种丑陋的变通方法?还是我需要编写一个宏来包装这种丑陋?(顺便说一句,我知道letrec,这不是解决这个问题的方法。)

顺便说一句,我使用的是 Chicken Scheme,但我的问题应该与所有 Schemes 有关。