【发布时间】:2017-10-06 14:39:09
【问题描述】:
我是 Prolog 的新手,我需要一些帮助:D
我学习了递归并且知道如何使用它(或多或少)。 我在使用图表时遇到问题。我正在尝试解决背包问题,所以我一步一步来。
我的问题: 我有一个类型列表,我想制作长度为 n(=3) 的所有子列表,并选择具有最大价值的一个。我想我需要一个函数来拉出类型列表的头部并将其传递给另一个递归计算“儿子”的函数。我的想法是这样的:
append([],L2,L2):- !.
append([T|C],L2,[T|L3]):-
append(C,L2,L3).
genera_ext(_,[],_).
genera_ext(Padre,[TT|CT],Figlio):-
genera(Padre,TT,[TT|CT],Figlio),
genera_ext(Padre,CT,[]).
genera(Padre,Elem,L_tipi,Figlio):-
append(Padre,[Elem],Base),
copy_term(Figlio,Base),
length(Base,Lun),
Lun =< 3,
genera_ext(Base,L_tipi,Temp),
total_ing(Temp,I_Temp),
total_ing(Base,I_Base),
I_Temp >= I_Base,
copy_term(Figlio,Temp),
nl,write("Figlio = "),write(Figlio).
genera(_,_,_,_).
显然有问题。你可以帮帮我吗?谢谢 :( 先生。
编辑:
我有一些事实
art(xxx,weight_xxx).
这是计算由元素 xxx 组成的列表的权重的函数
total_ing([],0).
total_ing([X|C],I0):-
art(X,N),
total_ing(C,I1),
I0 is I1 + N.
我叫它
genera_ext([],L_tipi, Figlio)
其中 L_tipi 是我可以选择的元素 xxx 的列表。
我想生成长度为 3 的元素 xxx 的所有可能子列表,并选择权重最大的那个。
【问题讨论】:
-
你怎么称呼这个?什么是不工作的目标?你能告诉我们你希望做什么吗?
total_ing/2的代码在哪里?
标签: list prolog graph-theory knapsack-problem