Scheme是否有内置ref函数?《The Little Learner》示例代码报错咨询
问题解答
1. Scheme中是否存在名为ref的内置函数?
标准Scheme中没有名为ref的内置函数。部分Scheme方言或第三方扩展库可能会提供该函数,但它不属于R5RS/R6RS/R7RS等标准规范的内容。
2. 上述代码存在什么问题?
代码调用了未定义的ref函数,这就是报错“variable ref is not bound”的核心原因——你的Scheme解释器找不到这个函数的绑定关系,既不是标准内置函数,也没有提前自定义。
3. 如何在Scheme中表示数组元素的索引?
Scheme里区分列表(list)和向量(vector,更接近传统数组),索引方式不同:
- 针对列表(比如代码里的
(list 1.0 0.0)),使用list-ref函数,语法为(list-ref 列表对象 索引值),索引从0开始计数。 - 针对向量(用
#(...)定义,比如#(1.0 0.0)),使用vector-ref函数,语法为(vector-ref 向量对象 索引值),索引同样从0开始。
修复后的代码示例:
(define line (lambda (x) (lambda (θ) (+ (* (list-ref θ 0) x) (list-ref θ 1))))) (display ((line 7.3) (list 1.0 0.0)))
运行这段代码会输出7.3,符合预期。
内容的提问来源于stack exchange,提问作者clark
相关产品推荐
相关产品推荐

