问题标签 [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.
macros - 如何使用 Scheme 定义语法宏增加记录字段
给定一个带有许多数字字段的 Chez Scheme 记录,这些字段不断地被小增量和减量(通常是一个)改变,有没有办法编写一个可以通过将字段传递给字段值来改变字段值的宏?我现在完成此操作的方式类似于以下 REPL 成绩单:
最好有一个简单的宏,比如inc!
,它可以对记录中的字段执行变异递增/递减操作。我从类似 Lisp的Scheme 版本开始incf
,decf
这适用于“正常”变量(并且易于实现),但在这种情况下dec!
,它不使用设置可变记录字段的机制。r-x-set!
有没有明显的方法来编写这样的宏?您可以只传递对记录字段的引用而不必为每个字段编写不同的东西吗?
scheme - 计划过程异常:参数数量不正确
我是一个新的阴谋家。也许这个问题很简单。但这真的让我很困扰。
我定义了一个程序
然后我称之为
发生异常
为什么?
scheme - 例外:体内功能的多个定义
我有一个简单的程序:
当我运行它时,我有一个例外;我做错了什么?
/home# scheme-script /home/scheme/main.ss
异常:body 中 abs 的多个定义(顶级程序 #<annotation /home/scheme/main.ss[0:15](import (... ))> #<annotation /home/scheme/main.ss)[17:122] (define (...) (...))> #<annotation /home/scheme/main.ss[124:156] (define (...) (...))> #<annotation /home/scheme/main.ss[158:210] (define (...) (...))> #<annotation /home/ scheme/main.ss[212:244] (display (...))> /home/scheme/main.ss 的第 1 行,字符 1 附近
chez-scheme - 在 Chez Scheme 中显示工作不正常
我在 Mac 上使用 chez 9.5.4。
以下代码:
做这个:
为什么意外的尤达?
我该如何防止这种情况?
它在鸡计划中按预期工作。
debugging - 关闭 Chez Scheme 中调试的尾调用优化
我正在 Chez Scheme 中调试以下程序。
运行这个程序会报错。
(debug)
该程序产生以下信息:
请注意,堆栈帧仅包含最后一帧proc3
,但我想显示proc2
和proc1
。这似乎是由于 Scheme 的 TCO(尾调用优化)阻止了调试器检查精确的调用堆栈帧。
如果我调用(proc3 x2)
而(proc2 x1)
不是在尾部位置,调试器可以正常打印精确的调用堆栈帧。
有没有办法在 Chez Scheme 中暂时关闭 TCO?(仅用于调试)
谢谢。
ffi - 带有 Chez Scheme FFI 的 ReadProcessMemory
我在使用 Chez Scheme 的 FFI 和 kernel32/user32.dll 的 ReadProcessMemory 函数从任意内存地址读取时遇到了一些问题。我得到了进程句柄,一切都很好,但我在读取函数本身的很多方面都在苦苦挣扎:
从这里我得到Exception in read-process-memory: invalid foreign-procedure argument #<ftype-pointer iptr 1417957226080>
了,但我很确定我正在处理很多关于这个错误的事情。
提前致谢
c - 由于 C 跨平台,chez-scheme FFI 的错误
有ac文件
当我在 chez-scheme 中调用它时
当我在互联网上搜索它时,我发现 termios.h 是针对 POSIX 终端的,而我的操作系统是 Debian。
请问为什么会出现这个错误提前谢谢。
scheme - 是否有可能在 Chez-Scheme 的调试模式下获得当前的 raise 继续?
我有以下程序:
调试.scm
我在 REPL 中运行它。它按预期崩溃了。
然后我进入调试模式并检查了 raise continuation。
我的问题是,是否有可能在调试模式下获得当前的提升继续?
我想通过评估表达式来检查它,比如
谢谢。
c - 方案和C之间的混合编程
我正在阅读 CSUG 以了解 chez-scheme 的 FFI。所以我可能有一些初学者的错误。我只是想知道 FFI 是否存在一些问题。C 有一些类型的数据,就像 char、float、double、int、functions、struct、union 或 enumeration。但它们不存在于方案中。有数字、列表、字符、字符串和符号。或者defstruct
宏
它们的数据类型之间是否存在一些不兼容的问题。如果是退出,FFI 的解决方案是什么。
conditional-statements - 关于Scheme中cond表达式的问题
对于 Chez Scheme 9.5.5 版,请考虑以下两个示例cond
:
第一个表达式的计算结果为#t
,而第二个表达式的计算结果为1
。
似乎第一个表达式首先扩展为(cond (#t #t) (else 2))
,而第二个表达式(cond ((> 2 1) 1) (else 2))
在评估之前扩展为。
我的问题是:由于表达式的(> 2 1)
值为,所以这两个表达式具有不同的值#t
对我来说是违反直觉的。cond
有充分的理由以cond
这种方式定义吗?
编辑:我用 GNU Guile 3.0.1 尝试了这两个表达式:
- 该表达式
(cond #t (else 2))
触发了一个错误,它显示“cond: invalid clause in subform #t of (cond #t (else 2)”。 - 该表达式的
(cond (> 2 1) (else 2))
计算1
结果与 Chez Scheme 9.5.5 相同。 - 表达式的
(cond (#t) (else 2))
计算结果为#t
。
Edit2:使用 CHICKEN Scheme 5.1.0:
- 该表达式
(cond #t (else 2))
触发了一个错误,它表示“在 (cond ...) 的扩展期间 - 在 `cond' 中 - 不是正确的列表:#t”。 - 该表达式的
(cond (> 2 1) (else 2))
计算1
结果与 Chez Scheme 和 GNU Guile 一样。 - 该表达式的
(cond (#t) (else 2))
计算结果为#t
但带有一个警告,上面写着“警告:#t' clause in
cond 之后的子句:(else 2)”。