2017-01-16 35 views
0

我想寫一個程序,獲得一個列表作爲輸入,並且列表是有序返回ture,如果列表沒有排序列表。我寫了一個程序,得到一個列表作爲輸入,並返回true如果這個列表是有序的,否則返回false(有序(列表))我也寫一個程序,收到一個列表和排序,並返回有序列表作爲輸出(bubblesort( List,Ordered))但我不能將它們合併在一起編寫一個程序,如果列表被排序,則返回true否則對列表進行排序。我想了很多,但我不能。請幫助我 非常感謝如果列表是命令返回true否則如果列表沒有排序排序列表

+2

你能提供你的代碼和你的預期輸出的例子嗎?知道你在做什麼將幫助我們幫助你。 –

+0

BubbleSort通常是一種包含外部循環和內部循環的算法,您可以在其中交換內部值,外部循環控制需要迭代的次數(在最壞情況下爲二次方程;可以在之後停止在一些內迭代過程中沒有進行交換)。除去外面的一個,並且只在計算需要的交換時重複一次。如果沒有,它已經訂購。 (當然,您可以刪除實際的交換,並只計算需要保留原始列表的情況) – sascha

+0

除了接受投票之外,您還可以進行投票。 –

回答

0

例如,我想命令([1,2,3])返回true作爲輸出和有序([1,3,2])返回[1,2,3]作爲輸出

這在Prolog中是不可能的。 Prolog謂詞不像許多其他語言中的程序可以對數據結構進行破壞性更改。在Prolog中,與許多功能語言一樣,「排序列表」意味着使用相同的元素以(可能!)不同的順序計算列表。

所以,如果你想要一個帶有列表並能「返回」同一列表的排序版本的謂詞,你需要一個帶有兩個參數的謂詞。通常的Prolog方式在這裏只是使用sort/2謂詞。即使「輸入」列表已經排序(但請注意,它刪除了重複的元素),它仍能正常工作。

如果你真的要編碼的邏輯「檢查的有序列表;如果它是有序的,原樣返回,否則返回一個排序的版本」,可以是這樣做的,使用現有的代碼:

list_sorted(List, SortedList) :- 
    ordered(List), 
    SortedList = List. 
list_sorted(List, SortedList) :- 
    \+ ordered(List), % the list is not already ordered 
    bubblesort(List, SortedList). 

(我沒有測試你的代碼。)

+0

非常感謝。你幫我 。再次感謝。 – Sara

+0

你可以簡單地用'list_sorted(List,List)替換第一個子句: - ordered(List).' – lurker