我需要更新我的列表,但它不能很好地工作。
所以我想说我有两个清单。
(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)
我想要做的是找到余数为1的整数,如果我除以3。 所以对于我的list1,结果将是'(4 7 10)。 我想将我的结果逐个插入到list2中,这是" newlist"在功能部门列表中。 但是在代码的第6行,"追加"不会将我的结果插入最新版本。 有人有想法???非常感谢你!
答案 0 :(得分:3)
在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)