2013-04-20 76 views
0

給出一個包含子列表[[1]。[2],[3]]的列表,我將如何檢查列表中第一個子列表的HEAD是否小於其他列表其他子列表的HEADS?檢查頭部內容是否小於尾部

+0

想想你可以用'map head'做什麼。 – 2013-04-20 01:23:10

+0

@ChetterHummin我沒有嘗試太多。我不太清楚如何去做這件事。 – Drew 2013-04-20 01:37:24

+0

幾乎所有你需要的功能都列在這個頁面上:http://hackage.haskell.org/packages/archive/base/latest/doc/html/Data-List.html想想你如何混合搭配他們。 – 2013-04-20 01:43:16

回答

2

Comparison of Standard Order of Terms在ISO-Prolog中可遞歸地應用於任意複雜結構。

然後你的問題可以用一些可以解決像

first_head_is_less([H|R]) :- maplist(@<(H), R). 

測試:

?- first_head_is_less([[1],[2],[3]]). 
true. 

?- first_head_is_less([[10],[2],[3]]). 
false. 

編輯上面的代碼一定要精,因爲它失敗(例如)在此:

?- first_head_is_less([[1,2],[1,3],[3]]). 
true. 

這是不正確的。這裏有一個更嚴格的測試:

first_head_is_less([H|R]) :- 
    maplist(head_is_less(H), R). 
head_is_less([F|_], [E|_]) :- F @< E.