在prolog中生成列表

时间:2014-01-13 13:50:06

标签: prolog

我正在尝试列出值n,n+1,...2*n-1的列表 例如,如果我有n=4 ==> [4,5,6,7]

我已设法编写此代码,但显示前n个元素的列表。你能帮我修改一下吗?

create(N,L):-
   create_list(N,[],L).

create_list(0,L,L).         
create_list(N,R,L):-
   N>0,
   N1=N-1,
   create_list(N1,[N|R],L).

2 个答案:

答案 0 :(得分:1)

以下是create/2基于list_from_to/3编写逻辑纯版本create(From,Zs):- To #= 2*From-1, list_from_to(Zs,From,To). 的方法,my answer定义为问题" Fill list in SWI-Prolog":

?- create(4,Zs).
Zs = [4,5,6,7] ;
false.

这是您在问题中的查询:

create/2

由于?- create(N,[4,5,6,7]). N = 4. ?- create(N,[4,_,_,_]). N = 4. 是纯粹的,它是多功能的,也可以以不同的方式使用:

.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus{

/* no need for box shadow */

}

答案 1 :(得分:0)

从某种意义上说,你正在做'反向'。尝试

create(N,L):-
    M is 2*N,
    create_list(N,M,L).

create_list(N,M,[N|R]):-
    N < M,
    N1 = N+1, % note: check if your Prolog accepts is/2 instead
    create_list(N1,M,R).
create_list(M,M,[]).