List 将元素替换为列表方案
我需要用Scheme中的另一个元素替换列表中的一个元素,但问题是需要替换的列表可以嵌套 例如,如果我有列表List 将元素替换为列表方案,list,scheme,racket,List,Scheme,Racket,我需要用Scheme中的另一个元素替换列表中的一个元素,但问题是需要替换的列表可以嵌套 例如,如果我有列表”(1(2 3 4 5)(6 7))并且我需要用9替换5,那么我的输出应该是”(1(2 3 4 9)(6 7)) 你能帮我解决这个问题吗?解决这类问题有一个基本策略: 首先,求出一个简单的列表。i、 例如,编写函数,使其在输入列表没有子列表的情况下工作 然后,添加一个条件,以便如果要检查的元素是一个列表,则使用该列表递归到函数中 以下是一些骨架代码: (define (replace lst
”(1(2 3 4 5)(6 7))
并且我需要用9替换5,那么我的输出应该是”(1(2 3 4 9)(6 7))
你能帮我解决这个问题吗?解决这类问题有一个基本策略:
(define (replace lst from to)
(cond ((null? lst) '()) ;; end of input
((list? (car lst)) <???>) ;; encountered a sublist
((equal? (car lst) from) <???>) ;; found the element we're replacing
(else <???>))) ;; everything else
(定义(将lst从替换为)
(cond((null?lst);;输入结束
((列表?(汽车lst));;遇到子列表
((相等的?(汽车lst)从));;找到了我们要替换的元素
(其他);;;其他一切
请注意,第二个
cond
子句(list?(car lst))
是支持子列表的版本中唯一新增的内容。解决此类问题有一个基本策略:
(define (replace lst from to)
(cond ((null? lst) '()) ;; end of input
((list? (car lst)) <???>) ;; encountered a sublist
((equal? (car lst) from) <???>) ;; found the element we're replacing
(else <???>))) ;; everything else
(定义(将lst从替换为)
(cond((null?lst);;输入结束
((列表?(汽车lst));;遇到子列表
((相等的?(汽车lst)从));;找到了我们要替换的元素
(其他);;;其他一切
请注意,第二个cond
子句(list?(car lst))
是支持子列表的版本中唯一新增的功能。下面是一个函数:
(define (replace L new old)
(cond ;;((null? L) L)
((list? L)
(map
(lambda (lst) (replace lst new old))
L))
(else
(if (equal? L old)
new
L))))
使用示例:
> (replace '(1 (1 2 3 4 (5 6 3) 3 4)) 7 3)
'(1 (1 2 7 4 (5 6 7) 7 4))
> (replace '() 7 3)
'()
> (replace '(1 (1 2 3 4) 3 4) 7 3)
'(1 (1 2 7 4) 7 4)
或:
例如:
(替换’(1(12 3 4(5 6 3)3 4))7 3)->’(1(12 7 4(5 6 7)7 4))这里有一个函数:
(define (replace L new old)
(cond ;;((null? L) L)
((list? L)
(map
(lambda (lst) (replace lst new old))
L))
(else
(if (equal? L old)
new
L))))
使用示例:
> (replace '(1 (1 2 3 4 (5 6 3) 3 4)) 7 3)
'(1 (1 2 7 4 (5 6 7) 7 4))
> (replace '() 7 3)
'()
> (replace '(1 (1 2 3 4) 3 4) 7 3)
'(1 (1 2 7 4) 7 4)
或:
例如:
(替换’(1(12 3 4(5 6 3)3 4))7 3)->’(1(12 7 4(5 6 7)7 4))我有一个没有子列表的列表功能。如果(carlst)是一个列表,我不知道如何递归到函数中。好的,这很简单。你知道你是如何处理匹配替换元素的情况的,对吗?您的答案应该是
(cons(替换(cdr lst)from to))
。子列表案例的答案是类似的,只是对
使用了不同的表达式(提示:如果内部列表是平面列表怎么办?对于
,您会使用什么?如果它不是平面列表,它还会工作吗?)。如果(carlst)是一个列表,我不知道如何递归到函数中。好的,这很简单。你知道你是如何处理匹配替换元素的情况的,对吗?您的答案应该是(cons(替换(cdr lst)from to))
。子列表的答案是相似的,只是
的表达式不同(提示:如果内部列表是平面列表怎么办?如果它不是平面列表,你会用什么?如果它不是平面列表,它还会工作吗?)嗯,你试过什么?嗯,你试过什么?