如果IntList包含單調遞增>整數,然後是單調遞減整數,則hill(+ IntList)成功。例如,> [1,2,5,8,11,6,3,-1]是一個小丘,但[1,2,5,8,11,6,9,3,-1]和[1 ,2,3,4,5,6]不是山。你可能會認爲IntList只包含整數。Prolog IntList定義
這是我迄今所做的:
hill(List) :-
increasing(List), decreasing(List).
increasing([H|Tail]) :-
sm(H,Tail),
increasing(Tail).
increasing([]).
decreasing([H|Tail]) :-
gr(H,Tail),
decreasing(Tail).
decreasing([]).
hill([]).
gr(X,[H|Tail]) :- X>H.
gr(X,[]).
sm(X,[H|Tail]) :- X<H.
sm(X,[]).
但是,這是行不通的。邏輯是:數字列表是hill
如果它是increasing
,然後decreasing
。我怎麼說?此代碼確實爲increasing
和decreasing
,但沒有列表可以是increasing
和decreasing
。
任何想法?
順便說一句,我不允許使用除原始規則和事實以外的任何其他東西。 – DarthVader 2009-11-15 04:48:58
你的導師如何定義「原始規則和事實」? – bcat 2009-11-15 04:51:34
#您可以使用的唯一預定義謂詞是算術/比較,成員/ 2,長度/ 2和附加/ 3(如果不需要,則不需要使用這些謂詞)。 #不要使用任何非聲明性構造。這包括(但不限於)cut(!),assert/retract,not和bagof/setof。 – DarthVader 2009-11-15 04:54:05