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 子集和序言_List_Prolog_Sum_Subset_Subset Sum_Clpfd_Swi Prolog - Fatal编程技术网

List 子集和序言

List 子集和序言,list,prolog,sum,subset,subset-sum,clpfd,swi-prolog,List,Prolog,Sum,Subset,Subset Sum,Clpfd,Swi Prolog,定义一个谓词子集(L,Sum,Subl),它接受一个数字列表L,一个数字和,并将Subl与一个L的子序列统一起来,这样Subl中的数字和就是Sum 比如说 ?- subsetsum([1,2,5,3,2], 5, SubSet); SubSet = [1,2,2]; SubSet = [2,3]; SubSet = [5]; SubSet = [3,2]; No. 我们有 sum([H1 | [H2 | Tail]], S):- sum([[H1+

定义一个谓词子集(L,Sum,Subl),它接受一个数字列表L,一个数字和,并将Subl与一个L的子序列统一起来,这样Subl中的数字和就是Sum

比如说

   ?- subsetsum([1,2,5,3,2], 5, SubSet);

   SubSet = [1,2,2];
   SubSet = [2,3]; 
   SubSet = [5]; 
   SubSet = [3,2];

No.
我们有

 sum([H1 | [H2 | Tail]], S):-
   sum([[H1+H2]|Tail], S):-
 sum([X], X).


下列条款应满足您的需要

subsetsum(SET, SUM, ANSWER) :-
    % Find a subset
    subset(SET, ANSWER),
    % Check elements of the subset add up to SUM
    sum(ANSWER, SUM).

% sum(LIST, SUM) - sums all numbers in the list
sum([], 0).
sum([X | T], SUM) :-
    sum(T, TAILSUM),
    SUM is TAILSUM + X.

% subset - finds subsets
subset([], []).
subset([E|Tail], [E|NTail]) :-
    subset(Tail, NTail).
subset([_|Tail], NTail) :-
    subset(Tail, NTail).

下列条款应满足您的需要

subsetsum(SET, SUM, ANSWER) :-
    % Find a subset
    subset(SET, ANSWER),
    % Check elements of the subset add up to SUM
    sum(ANSWER, SUM).

% sum(LIST, SUM) - sums all numbers in the list
sum([], 0).
sum([X | T], SUM) :-
    sum(T, TAILSUM),
    SUM is TAILSUM + X.

% subset - finds subsets
subset([], []).
subset([E|Tail], [E|NTail]) :-
    subset(Tail, NTail).
subset([_|Tail], NTail) :-
    subset(Tail, NTail).
使用,我们可以将库谓词
与您已经获得的
子集/2
一起使用!注意,我给了
subset/2
一个更合适的名称
list\u subsequence/2

list_subsequence([], []). list_subsequence([X|Xs], [X|Ys]) :- list_subsequence(Xs, Ys). list_subsequence([_|Xs], Ys) :- list_subsequence(Xs, Ys). subsetsum(List, Sum, Sub) :- list_subsequence(List, Sub), sum_list(Sub, Sum). 好的让我们用整数和浮点数运行另一个查询。。。那也行吗

?- subsetsum([1,2.1,5,3,2], 5.1, Xs). Xs = [1,2.1,2] ; Xs = [2.1,3] ; false. ?子类([1,2.1,5,3,2],5.1,Xs)。 Xs=[1,2.1,2] ; Xs=[2.1,3] ; 错。 看起来不错

使用,我们可以将库谓词
与您已经获得的
子集/2
一起使用!注意,我给了
subset/2
一个更合适的名称
list\u subsequence/2

list_subsequence([], []). list_subsequence([X|Xs], [X|Ys]) :- list_subsequence(Xs, Ys). list_subsequence([_|Xs], Ys) :- list_subsequence(Xs, Ys). subsetsum(List, Sum, Sub) :- list_subsequence(List, Sub), sum_list(Sub, Sum). 好的让我们用整数和浮点数运行另一个查询。。。那也行吗

?- subsetsum([1,2.1,5,3,2], 5.1, Xs). Xs = [1,2.1,2] ; Xs = [2.1,3] ; false. ?子类([1,2.1,5,3,2],5.1,Xs)。 Xs=[1,2.1,2] ; Xs=[2.1,3] ; 错。
看起来不错

如果使用的所有数字都是整数,并且您的Prolog处理器支持,请按此操作

:- use_module(library(clpfd)). z_z_product(A,B,AB) :- AB #= A*B. subsetsum_(Zs, Sum, Bs, [Sum|Vs]) :- same_length(Zs, Bs), append(Zs, Bs, Vs), Bs ins 0..1, maplist(z_z_product, Zs, Bs, Xs), sum(Xs, #=, Sum). :- (). z_z_乘积(A,B,AB):- ABA*B。 子合同(Zs、Sum、Bs、[Sum|Vs]):- (Zs,Bs), (Zs、Bs、Vs), Bs0..1, (z_z_产品,Zs,Bs,Xs), (Xs,#=,和)。 示例查询:

?- subsetsum_([1,2,5,3,2], 5, Sel, Vs), labeling([], Vs). Sel = [0,0,0,1,1], Vs = [5,1,2,5,3,2,0,0,0,1,1] ; Sel = [0,0,1,0,0], Vs = [5,1,2,5,3,2,0,0,1,0,0] ; Sel = [0,1,0,1,0], Vs = [5,1,2,5,3,2,0,1,0,1,0] ; Sel = [1,1,0,0,1], Vs = [5,1,2,5,3,2,1,1,0,0,1] ; false. ?子系统([1,2,5,3,2],5,Sel,Vs),([],Vs)。 Sel=[0,0,0,1,1],Vs=[5,1,2,5,3,2,0,0,0,1,1] ; Sel=[0,0,1,0,0],Vs=[5,1,2,5,3,2,0,0,1,0,0] ; Sel=[0,1,0,1,0],Vs=[5,1,2,5,3,2,0,1,0,1,0] ; Sel=[1,1,0,0,1],Vs=[5,1,2,5,3,2,1,1,0,0,1] ; 错。
如果所使用的所有数字都是整数,并且您的Prolog处理器支持,请像这样继续

:- use_module(library(clpfd)). z_z_product(A,B,AB) :- AB #= A*B. subsetsum_(Zs, Sum, Bs, [Sum|Vs]) :- same_length(Zs, Bs), append(Zs, Bs, Vs), Bs ins 0..1, maplist(z_z_product, Zs, Bs, Xs), sum(Xs, #=, Sum). :- (). z_z_乘积(A,B,AB):- ABA*B。 子合同(Zs、Sum、Bs、[Sum|Vs]):- (Zs,Bs), (Zs、Bs、Vs), Bs0..1, (z_z_产品,Zs,Bs,Xs), (Xs,#=,和)。 示例查询:

?- subsetsum_([1,2,5,3,2], 5, Sel, Vs), labeling([], Vs). Sel = [0,0,0,1,1], Vs = [5,1,2,5,3,2,0,0,0,1,1] ; Sel = [0,0,1,0,0], Vs = [5,1,2,5,3,2,0,0,1,0,0] ; Sel = [0,1,0,1,0], Vs = [5,1,2,5,3,2,0,1,0,1,0] ; Sel = [1,1,0,0,1], Vs = [5,1,2,5,3,2,1,1,0,0,1] ; false. ?子系统([1,2,5,3,2],5,Sel,Vs),([],Vs)。 Sel=[0,0,0,1,1],Vs=[5,1,2,5,3,2,0,0,0,1,1] ; Sel=[0,0,1,0,0],Vs=[5,1,2,5,3,2,0,0,1,0,0] ; Sel=[0,1,0,1,0],Vs=[5,1,2,5,3,2,0,1,0,1,0] ; Sel=[1,1,0,0,1],Vs=[5,1,2,5,3,2,1,1,0,0,1] ; 错。
变量必须是大写的我知道,我在定义susbsetsum函数时遇到了问题,谢谢,我2小时后要考试。。请有人帮助我你的代码有几个语法错误。通过在考试前修正问题来提高你的问题质量。。。这是巩固你积累的知识的好方法!(这也让你保持冷静!)变量必须是大写的我知道,我在定义susbsetsum函数时遇到了麻烦,谢谢,我2小时后就要考试了。。请有人帮助我你的代码有几个语法错误。通过在考试前修正问题来提高你的问题质量。。。这是巩固你积累的知识的好方法!(它也能让你保持冷静!)