【发布时间】:2018-07-26 03:04:35
【问题描述】:
可以说,我有一个函数range,它逐步返回一个数字列表,我已经实现了它,它运行良好。现在,我需要在上面写一个迭代器函数,所以如果我在列表上运行迭代器函数,它将超时返回列表的第一个元素。
(define next '(1 2 3 4))
(next) => 1
(next) => 2
(next) => 3
(next) => 4
(next) => '()
我的问题是我不知道什么类型的方案语法可以实现这一点,因为每次我们调用函数next 时,都会刷新意志。但是我需要实现下一个函数,这样如果我第二次调用列表中的下一个,列表不会被刷新,所以它会得到列表的第二项
我需要知道什么具体的方法来实现这一点,或者我需要修改我的range 函数来做到这一点。
我的迭代函数如下所示:
(define (iterator L)
(let ((start (car L))
(step (car (cdr L)))
(end (car (cdr (cdr L))))
)
(lambda ()
(if (> start end)
'()
(set! start
(+ start step)
)
)
)
)
)
我的下一个定义
(define next (iterator '(0 2 7)))
我的错误信息是:Error: execute: unbound symbol: "iterator" []。
【问题讨论】:
-
你的范围实现被破坏了,实际上它没有编译...
-
我已回滚您的上次编辑(正如 Óscar López 建议的那样),因为它使答案无效。