任何人都可以检查这是否是一个完整的BS代码。显然它不起作用,因为我的答案是错误的,但我只是想知道这是否在正确的轨道上,或者完全不是。顺便说一句,我以前从未在 prolog 上编程过,我只是在学习基础知识。
nested([], []).
nested([H1], [[H1]])
nested([H1,H2|T], [Out]) :-
H2 - H1 is 1,
nested([H2|T], [[H1|Out]]);
nested([H2|T], [H1|Out]).```
问题需要缩小范围。
我建议查看Peano算术,它具有有用的关系属性。举个简单的例子:
consecutive_peano_list([H|T]) :-
consecutive_peano_list_(T, H).
consecutive_peano_list_([], _).
consecutive_peano_list_([H|T], P) :-
H = s(P),
consecutive_peano_list_(T, H).
然后创建一个优雅的后继者列表,而不关心第一个元素的起点:
?- consecutive_peano_list(L).
L = [_] ;
L = [_A, s(_A)] ;
L = [_A, s(_A), s(s(_A))] ;
L = [_A, s(_A), s(s(_A)), s(s(s(_A)))] ;