프롤로그를 처음 사용하여 도움이 필요합니다. 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(_,_,_,_).
분명히 잘못된 것이 있습니다. 당신이 나를 도울 수? 감사 :( MR
편집 :
내가 가진 몇 가지 사실
art(xxx,weight_xxx).
이것은
total_ing([],0).
total_ing([X|C],I0):-
art(X,N),
total_ing(C,I1),
I0 is I1 + N.
I을 xxx는 요소로리스트의 무게를 계산하는 기능입니다 그것을
genera_ext([],L_tipi, Figlio)
여기서 L_tipi는 선택할 수있는 요소 xxx의 목록입니다.
길이가 3 인 요소 xxx의 가능한 모든 하위 목록을 생성하고 가장 큰 가중치를 갖는 것을 선택하고 싶습니다.
어떻게 이것을 부릅니까? 작동하지 않는 목표는 무엇입니까? 당신이 원하는 것을 정확하게 보여줄 수 있습니까? 'total_ing/2'의 코드는 어디에 있습니까? –