Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
List 在prolog中定义谓词_List_Prolog_Dcg_Clpfd - Fatal编程技术网

List 在prolog中定义谓词

List 在prolog中定义谓词,list,prolog,dcg,clpfd,List,Prolog,Dcg,Clpfd,我正在努力解决这个问题: 定义谓词len_NM(L,N,M),它检查某个列表L是否至少包含长度不小于M的N元素 OP表示: 定义谓词len_NM(L,N,M),它检查某个列表L是否至少包含长度不小于M的N元素 在此答案中,我们不解决原始问题,而是解决以下变化: 定义谓词len_NM(L,N,M),它检查某个列表L是否包含长度不小于M的N元素 与之类似,我们定义了seqq1//1,以建立非空列表列表与其展开的对立面之间的关系: seq([]) --> []. seq([E|Es]) -

我正在努力解决这个问题:

定义谓词
len_NM(L,N,M)
,它检查某个列表
L
是否至少包含长度不小于
M
N
元素

  • OP表示:

    定义谓词
    len_NM(L,N,M)
    ,它检查某个列表
    L
    是否至少包含长度不小于
    M
    N
    元素

  • 在此答案中,我们不解决原始问题,而是解决以下变化:

    定义谓词
    len_NM(L,N,M)
    ,它检查某个列表
    L
    是否包含长度不小于
    M
    N
    元素

  • 与之类似,我们定义了
    seqq1//1
    ,以建立非空列表列表与其展开的对立面之间的关系:

    seq([]) --> []. seq([E|Es]) --> [E], seq(Es). seqq1([]) --> []. seqq1([Es|Ess]) --> {Es=[_|_]}, seq(Es), seqq1(Ess). 请注意,
    seq1//1
    在“两个方向”工作:

  • 在这个答案中,我们使用:


  • 让我们运行一些示例查询

    ?- len_NM([[1,2,3],[4],[5,6],[7,8,9,10],[11,12]],_,N,L).
      N = 5, L = 1             % five lists have length of at least one 
    ; N = 4, L = 2             % four lists have length of at least two
    ; N = 2, L = 3             % two of at least three (e.g., [1,2,3] and [7,8,9,10])
    ; N = 1, L = 4             % one list has length of four (or more)
    ; N = 0, L in 5..sup.      % no list has length of five (or more)
    
    好的!这个怎么样

    ?- append(Xs,_,[x,x,x,x,x,x]),   % With `Xs` having at most 6 elements ...
       N #>= 1,                      % ... `Xss` shall contain at least 1 list ...
       len_NM(Xss,Xs,N,4).           % ... having a length of 4 (or more).
      Xs = [x,x,x,x],     N = 1, Xss = [[x,x,x,x]]
    ; Xs = [x,x,x,x,x],   N = 1, Xss = [[x],[x,x,x,x]]
    ; Xs = [x,x,x,x,x],   N = 1, Xss = [[x,x,x,x],[x]]
    ; Xs = [x,x,x,x,x],   N = 1, Xss = [[x,x,x,x,x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x],[x],[x,x,x,x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x],[x,x,x,x],[x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x],[x,x,x,x,x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x,x],[x,x,x,x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x,x,x,x],[x],[x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x,x,x,x],[x,x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x,x,x,x,x],[x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x,x,x,x,x,x]]
    ; false.
    

    请展示你迄今为止所做的尝试,你的问题是什么?你想让我们为你写代码吗?这很容易,但它不是这样工作的。确实很容易:len_NM(L,N,M):-聚合(计数,(成员(E,L),长度(E,T),T>=M),C>=N。 :- use_module(library(clpfd)).
    len_NM(Xss,Ys,N,M) :-
       M #>= 1,
       N #>= 0,
       phrase(seqq1(Xss),Ys),
       maplist(length,Xss,Ls),
       tcount(#=<(M),Ls,N).
    
    ?- len_NM([[1,2,3],[4],[5,6],[7,8,9,10],[11,12]],_,N,L).
      N = 5, L = 1             % five lists have length of at least one 
    ; N = 4, L = 2             % four lists have length of at least two
    ; N = 2, L = 3             % two of at least three (e.g., [1,2,3] and [7,8,9,10])
    ; N = 1, L = 4             % one list has length of four (or more)
    ; N = 0, L in 5..sup.      % no list has length of five (or more)
    
    ?- append(Xs,_,[x,x,x,x,x,x]),   % With `Xs` having at most 6 elements ...
       N #>= 1,                      % ... `Xss` shall contain at least 1 list ...
       len_NM(Xss,Xs,N,4).           % ... having a length of 4 (or more).
      Xs = [x,x,x,x],     N = 1, Xss = [[x,x,x,x]]
    ; Xs = [x,x,x,x,x],   N = 1, Xss = [[x],[x,x,x,x]]
    ; Xs = [x,x,x,x,x],   N = 1, Xss = [[x,x,x,x],[x]]
    ; Xs = [x,x,x,x,x],   N = 1, Xss = [[x,x,x,x,x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x],[x],[x,x,x,x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x],[x,x,x,x],[x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x],[x,x,x,x,x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x,x],[x,x,x,x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x,x,x,x],[x],[x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x,x,x,x],[x,x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x,x,x,x,x],[x]]
    ; Xs = [x,x,x,x,x,x], N = 1, Xss = [[x,x,x,x,x,x]]
    ; false.