我要解決下面的練習中的Prolog:序言 - 尋找最長遞增子
對於整數
Zs
的列表,max_sequence(Zs,Xs)
找到一個longest increasing subsequenceXs
。
示例查詢:
?- max_sequence([1,2,1,2,3,4,2,1,2,1],Xs). Xs = [1,2,3,4]. % expected result ?- max_sequence([1,2,1,2,3,4,2,1,6,7,7,2,1,8],Xs). Xs = [1,2,3,4,6,7,8]. % expected result
我不明白爲什麼...但我的代碼是錯誤的,結果總是false
。
max_sequence(L,R) :-
cresc(L,[],R).
cresc([],[],[]).
cresc([H|T],C,[H|C]) :-
maxList(H,C),
\+ member(H,C),
cresc(T,C,C).
cresc([H|T],C,C) :-
member(H,C),
cresc(T,C,C).
cresc([H|T],C,C) :-
\+ maxList(H,C),
cresc(T,C,C).
maxList(_,[]).
maxList(N, [H|T]) :-
N>H,
maxList(N,T).
我想知道我的方法是否正確。 感謝您的幫助!
你可以用的東西像你'maxList/2'謂詞開始。這是什麼意思,語義?它的目的是什麼?如果'N'大於'L'的每個成員,或者如果'L'是空的,無論如何,它看起來像'maxList(N,L)'成功。這是你的意圖嗎?那麼當'C'沒有實例化時,'cresc/2'的第二個子句具有'maxList(H,C)'。這可能是不正確的,我敢打賭你可能會在'>/2'上看到一個實例化錯誤(儘管你還沒有確切地說過你嘗試過的例子或者你得到了什麼錯誤)。 – lurker
maxList是你寫的內容,檢查N是否是那些已經被控制的(C列表中的)最大的數字,並且即使L爲空也是成功的。是的,實例化錯誤是我最初的問題,但更重要的是,似乎我的程序無法正常工作,我不明白爲什麼(所以我的語義問題)。 – JinLemon
而不是正確的序列([1,2,3,4])我只有一個錯誤 – JinLemon