Scheme 方案删除第一个实例的元素
我想删除列表中的第一个元素 范例Scheme 方案删除第一个实例的元素,scheme,racket,Scheme,Racket,我想删除列表中的第一个元素 范例 > (remove-first '(10 20 30 40 50 40 30 20 10) 10) (20 30 40 50 40 30 20 10) > (remove-first '(10 20 30 40 50 40 30 20 10) 40) (10 20 30 50 40 30 20 10) > (remove-first '("A" "B" "C" "d" "e" "F") "d") ("A" "B" "C" "e" "F") &g
> (remove-first '(10 20 30 40 50 40 30 20 10) 10)
(20 30 40 50 40 30 20 10)
> (remove-first '(10 20 30 40 50 40 30 20 10) 40)
(10 20 30 50 40 30 20 10)
> (remove-first '("A" "B" "C" "d" "e" "F") "d")
("A" "B" "C" "e" "F")
> (remove-first '(10 20 30 40 50 40 30 20 10) 60)
(10 20 30 40 50 40 30 20 10)
> (remove-first (remove-first '(10 20 30 40 50 40 30 20 10) 40) 40)
(10 20 30 50 30 20 10)
但我不知道我的代码中缺少了什么,也许我陷入了一个无限循环
(define remove-first
(lambda (li num)
(if
(= num (car li))
(else
(remove-first (cdr li) num)
)
)
)
)
您应该研究用于遍历输入列表和构建输出列表作为答案的标准模板,相同的解决方案结构用于许多问题,并且您的代码目前不遵守该模板。其他错误包括:
- 您缺少基本情况-遍历整个列表时会发生什么情况
- 找到元素后,必须跳过它并添加列表的其余部分
- 列表可以包含数字和字符串,因此有必要使用
进行比较,因为equal?
仅适用于数字=
- 最后,当调用递归时,必须将当前元素添加到正在生成的输出列表中
(define remove-first
(lambda (li val)
(cond ((null? li) '())
((equal? val (car li)) (cdr li))
(else (cons (car li) (remove-first (cdr li) val))))))
您应该研究用于遍历输入列表和构建输出列表作为答案的标准模板,相同的解决方案结构用于许多问题,并且您的代码目前不遵守该模板。其他错误包括:
- 您缺少基本情况-遍历整个列表时会发生什么情况
- 找到元素后,必须跳过它并添加列表的其余部分
- 列表可以包含数字和字符串,因此有必要使用
进行比较,因为equal?
仅适用于数字=
- 最后,当调用递归时,必须将当前元素添加到正在生成的输出列表中
(define remove-first
(lambda (li val)
(cond ((null? li) '())
((equal? val (car li)) (cdr li))
(else (cons (car li) (remove-first (cdr li) val))))))
你的产出是多少?你有什么错误吗?你错过了基本情况。如果列表为空,您会怎么做?您的输出是什么?你有什么错误吗?你错过了基本情况。如果列表为空,您会怎么做?