public class Filter {
public static List<Number> apply(List<Number> lst, Double target){
return lst.stream()
.mapToDouble( Number::doubleValue )
.filter( elem -> elem > target )
.boxed()
.collect( Collectors.toCollection(ArrayList::new ));
}
public static void main(String[] args) {
// Integer[] nums = new Integer[] {1,2,3,4,5,6,7,8,9};
Double[] nums = new Double[] {2.1,3.2,4.3,5.4,6.5,7.6,8.7};
System.out.println(Filter.apply( Arrays.asList(nums), 5.0 )
);
}
}
uj5u.com熱心網友回復:
像這樣的事情會起作用:
%---------------------------
% find all Xs greater than Y
%---------------------------
items_greater_than( [] , _ , [] ) .
items_greater_than( [X|Xs] , Y , [X|Zs ) :- X @> Y, items_greater_than(Xs,Y,Zs).
items_greater_than( [X|Xs] , Y , Zs ) :- X @=< Y, items_greater_than(Xs,Y,Zs).
執行
items_greater_than( [2.1, 3.2, 4.3, 5.4, 6.5, 7.6, 8.7], 5.0, R ).
應該屈服
R = [ 5.4, 6.5, 7.6, 8.7 ]
uj5u.com熱心網友回復:
如果您使用 SWI-Prolog,您將使用 include/3,如下所示:
?- include(<(5.0), [2.1,3.2,4.3,5.4,6.5,7.6,8.7], R).
R = [5.4, 6.5, 7.6, 8.7].
這與 Java 代碼完全相同:它接受一個串列,將謂詞應用于每個元素,并僅收集謂詞成功的元素。
uj5u.com熱心網友回復:
與 Java 類似的filter是library( apply ) 中的include/3,而 library( yall ) 為我們提供了匿名謂詞,類似于:arrow functions
items_greater_than(Items,Value,ItemsGreater) :-
include({Value}/[I]>>(I>Value),Items,ItemsGreater).
如果您的 Prolog 缺少上述任何一個庫,這可以作業:
items_greater_than(Items,Value,ItemsGreater) :-
findall(I,(member(I,Items),I>Value),ItemsGreater).
請記住,在 Prolog 中,我們沒有函式,只有謂詞。
編輯
感謝@TA_intern 的明智評論,這是一個不需要庫(yall)的解決方案:
items_greater_than(Items,Value,ItemsGreater) :-
include(<(Value),Items,ItemsGreater).
由于 library(apply) 將串列項附加到謂詞引數的末尾,因此我們使用(<)/2謂詞而不是(>)/2。
uj5u.com熱心網友回復:
請記住 split/3 和 merge/3 是 ''help-predicates'' :
split([X], [], [X]).
split([H1, H2 | List], [H1 | ListA], [H2 | Result]) :-
split(List, ListA, Result).
merge([], L, L).
merge(L, [], L).
merge([H1 | List], [H2 | ListA], [H1 | Result]) :-
H1 < H2,
!,
merge(List, [H2 | ListA], Result).
merge(List, [H2 | ListA], [H2 | Result]) :-
merge(List, ListA, Result).
merge_sort([], []).
merge_sort([A], [A]).
merge_sort(List, SList):-
split(List, List1, List2),
merge_sort(List1, SList1),
merge_sort(List2, SList2),
merge(SList1, SList2, SList).
如果你查詢,你應該得到這個:
?- split([2, 5, 7, 4, 3, 1, 9, 8, 6], ListA, ListB).
ListA = [2, 7, 3, 9],
ListB = [5, 4, 1, 8, 6] .
?- merge([1, 3, 5, 7, 9], [2, 4, 6, 8], MergedList).
MergedList = [1, 2, 3, 4, 5, 6, 7, 8, 9] .
?- merge_sort([2, 5, 7, 4, 3, 1, 9, 8, 6], Result).
Result= [1, 2, 3, 4, 5, 6, 7, 8, 9].
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/351256.html
上一篇:2與列進行比較的檔案
