我需要更新我的列表,但效果不佳。
所以可以说我有两个列表。
(define list1 '(1 2 3 4 5 6 7 8 9 10))
(define list2 '())
1. (define (divisionlist symbol1 symbol2 list newlist)
2. (cond [(empty? list) null]
3. [(equal? symbol2 (car list))
4. (divisionlist symbol1 symbol2 (cdr list) newlist)]
5. [(equal? symbol2 (remainder (car list) symbol1))
6. (append newlist (car list))
7. (divisionlist symbol1 symbol2 (cdr list) newlist)]
8. [else
9. (divisionlist symbol1 symbol2 (cdr list) newlist)]))
(divisionlist 3 1 list1 list2)
我想做的是找到除以 3 时余数为 1 的整数。 所以对于我的 list1,结果将是 '(4 7 10)。 我想将我的结果一一插入到list2中,即函数划分列表中的“newlist”。 但在代码的第 6 行,“追加”不会将我的结果插入到最新的结果中。 有人有想法吗???非常感谢!
最佳答案
在Scheme中,列表过程不会就地更新列表,它们会返回一个新列表作为结果,并且您必须对返回的值执行某些操作 - 例如,将其分配给变量或将其作为参数传递。我们可以做的是通过调用该过程来构建一个新列表,然后如果需要的话将其分配给一个变量。例如:
(define (divisionlist symbol1 symbol2 lst) ; don't call a parameter `list`
(cond [(empty? lst) null]
[(equal? symbol2 (car lst))
(divisionlist symbol1 symbol2 (cdr lst))]
[(equal? symbol2 (remainder (car lst) symbol1))
; notice how we use `cons` to build a new output list
(cons (car lst) (divisionlist symbol1 symbol2 (cdr lst)))]
[else
(divisionlist symbol1 symbol2 (cdr lst))]))
(define list1 '(1 2 3 4 5 6 7 8 9 10))
(define list2 (divisionlist 3 1 list1))
现在 list2
将包含预期值:
list2
=> '(4 7 10)
关于scheme - Racket :更新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27141146/