在Prolog中制作连续数字的嵌套列表

问题描述 投票:0回答:1

任何人都可以检查这是否是一个完整的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]).```

list recursion prolog logic computer-science
1个回答
0
投票

问题需要缩小范围。

我建议查看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)))] ;
© www.soinside.com 2019 - 2024. All rights reserved.