你好,我希望能得到关于这个任务的一些建议或指导:
定义一个包含三个参数的语句,其中第一个是列表,第二个是元素(原子或列表),第三个是一个列表,它必须满足与第一个列表相等,但是第一个列表中匹配第二个参数的元素将被删除。
Examples:
> elimina([f, e, d, [a, h], a, d, a], a, L)
L = [f, e, d, [a, h], d]
> elimina([f, e, d, [ a, h], a, [d, a]], [a, h], L)
L = [f, e, d, a, [d, a]]
我尝试过:
elimina([],_,[]).
elimina([X],X,[]).
elimina([X],Y,[X]).
elimina([H|T],H,Result) :-
elimina([T],H,Result).
elimina([H|T],Y,Result):-
elimina([T],H,Result).
我有一个疑问,当我在递归调用时应该写什么:
elimina([T],H,Result).
因为我不知道当输入的第二个元素匹配头部而不匹配头部时应该有何不同的行为。所以我使用了相同的调用。
同时,我怀疑这是否真的需要添加基本情况:elimina([X],Y,[X])
? 我认为我们可以通过与实际在列表中的要删除的元素进行匹配来完成练习。
感谢您的时间。
elimina([a],a,[a])
不正确地成功了。 - false