我是Haskell中的新成員,但我在Prolog中編寫了此解決方案。在列表中找到最大值並在列表中找到對
第一個:我必須創建函數或幾個函數,它們會在列表中找到最大值。我想爲該解決方案重寫我的Prolog函數,或者如果您知道該任務更簡單的解決方案,請在下面寫下。
輸入:someFunc [1,2,3,3,3,4,4,4,5,5]輸出:[3,4]
輸入:someFunc [1,2,2,3- ,4,5]輸出:[2]
的Prolog代碼:
listMax(L, M) :- listMax(L, [], [], M).
listMax([], Seen, MMax, Max) :-
(MMax == [] ->
Max = Seen
; listMax(MMax, [], [], Max)).
listMax([H|T], Seen, MMax, Max) :-
(member(H, Seen) ->
listMax(T, Seen, [H|MMax], Max)
; listMax(T, [H|Seen], MMax, Max)).
二之一:我要創建機能的研究或幾個功能,將發現,被重複多次,所述一對在列表中的元素。
輸入:someFunc [2,2,2,2,3,3,3,4,4,5]輸出:[2,4]
輸入:someFunc [1,1,2,2- ,2,3,3]輸出:[1,3]
的Prolog代碼:
count([], _, 0).
count([H|T], H, R) :- count(T, H, RT), R is RT + 1.
count([H|T], X, R) :- H \= X, count(T, X, R).
add_if_count_is_one(H, T, H) :- count(T, H, C), 0 is (C+1) mod 2.
add_if_count_is_one(H, T, []) :- count(T, H, C), 0 is C mod 2.
add_if_count_is_one(H, T, []) :- count(T, H, 0).
num_pairs([], []).
num_pairs([H|T], [H1|T1]) :-
delete(T, H, TT),
num_pairs(TT, T1),
add_if_count_is_one(H, T, H1).
listPair(M, RR):-
num_pairs(M, R),
delete(R,[],RR).
你問人翻譯來自前導碼哈斯克爾?如果你想學習這門語言,那麼你自己做這個更好。你到目前爲止嘗試了什麼?我知道'Data.List'中的幾個函數對於這個任務會很有用。 – bheklilr
@bheklilr我知道如何用Java編寫這個簡單的任務。而且我知道這對我會更好,但我現在沒有空餘的時間來研究Haskell。我必須明天寫出來。 – Pogorelov
是否輸出:[1,3]是一個錯字? –