我正在尝试按其深度递增列表的每个元素。例如:
foo([0, 0, [0]], [1, 1, [2]]) -> true
另外,我想在没有任何内置 Prolog 列表谓词的情况下这样做。关于如何解决这个问题的任何想法?
这个定义划分了一个没有任何内置谓词的列表:
halve(List, A, B) :- halve(List, List, A, B).
halve(B, [], [], B).
halve(B, [_], [], B).
halve([H|T], [_,_|T2], [H|A], B) :-
halve(T, T2, A, B).
对于 divide_half,您需要验证两件事(可以独立完成):列表定义了某种拆分,并且拆分的部分具有足够接近的长度。
其次,首先尝试查找每个元素,然后对其进行修改以跟踪深度,最后对其进行修改以构建列表的副本,其中包含已修改的元素(尽管我不明白这对一个人意味着什么-增加一个数字)。