【发布时间】:2017-08-29 07:33:32
【问题描述】:
我是方案编程的新手,正在编写小代码时遇到以下问题,无法令人满意地推理。
(define (at_i lst i)
(if (eq? i 0)
(car lst)
(at_i (cdr lst)
(- i 1) )))
(at_i '(1 2 3 4) 0) 的评估返回 1。
现在让我们用 lambda 语法定义相同的过程。
(define (at_i lst i)
(lambda (vec x)
(if (eq? x 0)
(car vec)
(at_i (cdr vec)
(- x 1) )))
lst i)
但现在(at_i '(1 2 3 4) 0) 的求值返回0,它不在列表中,通常它返回索引为 1 的元素。
我不明白为什么会这样。
注意:我刚刚意识到它不是返回索引处的元素 - 1 而是索引本身。 @Renzo 在下面很好地解释了其原因。谢谢!
【问题讨论】:
-
Scheme 中的标准命名约定是
at-i。 -
以防万一:Scheme 的链表是一种根本不同的数据结构,例如,C++ 的基于动态数组的
vector。
标签: indexing lambda linked-list scheme guile