【问题标题】:Generate list in prolog在 prolog 中生成列表
【发布时间】:2014-01-13 13:50:05
【问题描述】:

我正在尝试列出值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).

【问题讨论】:

    标签: prolog


    【解决方案1】:

    以下是您如何编写基于list_from_to/3逻辑纯版本的create/2,在my answer 中定义以质疑“Fill list in SWI-Prolog”:

    create(From,Zs):-
       To #= 2*From-1,
       list_from_to(Zs,From,To).
    

    这里是您在问题中的查询:

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

    由于create/2是纯粹的,它是多才多艺的,也可以以不同的方式使用:

    ?- create(N,[4,5,6,7]).
    N = 4.
    
    ?- create(N,[4,_,_,_]).
    N = 4.
    

    【讨论】:

      【解决方案2】:

      从某种意义上说,您正在“反向”进行操作。试试

      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,[]).
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-01-21
        • 1970-01-01
        • 1970-01-01
        • 2017-10-02
        • 2013-04-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多