Scheme 递归函数
我做了一个函数搜索,它接受一个los,一个数字,并返回列表的第numth个符号。简单的Scheme 递归函数,scheme,racket,Scheme,Racket,我做了一个函数搜索,它接受一个los,一个数字,并返回列表的第numth个符号。简单的 (define (search los num) (cond [(empty? los) empty] [(zero? num) (first los)] [else (lookup (rest los) (- num 1))])) (check-expect (lookup (list 'a 'b 'c 'd) 0) 'a) 但是我很难理解如何设计一个函数,它接受一个los(
(define (search los num)
(cond
[(empty? los) empty]
[(zero? num) (first los)]
[else (lookup (rest los) (- num 1))]))
(check-expect (lookup (list 'a 'b 'c 'd) 0) 'a)
但是我很难理解如何设计一个函数,它接受一个los(符号列表)、一个符号(s)和一个数字(numth),并返回los,其中numth符号替换为s
像这样的-
(change (list 'a 'b 'c 'd) 'hello 2) ;==> (list 'a 'b 'hello 'd)
(change (list 'a 'b 'c 'd) 'hi 0) ;==> (list 'hi 'b 'c 'd)
首先,考虑如何复制列表。这不涉及
num
参数
然后,如果
num
为0,则使用与search
中相同的num
递减方法替换(而不是复制)列表元素。首先,考虑如何复制列表。这不涉及num
参数
然后,如果num
为0,则使用search
中相同的num
递减方法替换(而不是复制)列表元素。以下是一个解决方案:
(define (change los s num)
(cond ((null? los) '())
((< num 0) los)
((= num 0) (cons s (cdr los)))
(else (cons (car los) (change (cdr los) s (- num 1))))))
change
的参数为我们提供了要替换的符号和位置。所以我们倒计时,重新创建列表,直到那一点。然后,当我们倒计时到0时,我们可以将列表中的当前符号替换为新符号,只需将其替换为当前符号即可。我添加了<0
检查只是因为。这里有一个解决方案:
(define (change los s num)
(cond ((null? los) '())
((< num 0) los)
((= num 0) (cons s (cdr los)))
(else (cons (car los) (change (cdr los) s (- num 1))))))
change
的参数为我们提供了要替换的符号和位置。所以我们倒计时,重新创建列表,直到那一点。然后,当我们倒计时到0时,我们可以将列表中的当前符号替换为新符号,只需将其替换为当前符号即可。我添加了<0
检查只是因为。您是否打算命名您的函数lookup
而不是search
,也许?您是否打算命名您的函数lookup
而不是search
?