【发布时间】:2020-11-16 16:20:40
【问题描述】:
我正在尝试根据条件更改列表中的元素。假设我有一个清单, L = '(0 1 1 0 0)。我只希望在此列表中找到的第一个“零”为“零”,对于该列表中的任何其他“零”,我希望它们为 1。因此我的示例列表将变为 L = '(0 1 1 1 1)。这是我到目前为止所做的,
(let dLoop ((L '(0 1 1 0 0))
(i 0)
(j 1))
(if (and (<= i (length L)) (<= j (- (length L) 1)))
(begin
(if (zero? (list-ref L i))
(begin
(cond
[(zero? (list-ref L j)) (list-set L j 1)]
[else (dLoop L i (add1 j))]
)
)
(dLoop L (add1 i) (add1 j))))
L))
这只会返回,L = '(0 1 1 1 0)
由于某种原因,一旦找到第一个重复的零,代码就会终止!我真的很感激有关此问题的一些见解
【问题讨论】:
-
也许你可以使用
cdr和cons,而不是像在C中那样迭代循环;一种更常见于 lisps 的方法。
标签: loops conditional-statements scheme racket let