庫(拉姆達)是強大的,但它有一個成本。如果你覺得「越簡單越好」(WRT調試,特別是...)考慮
call_unary_list([], _).
call_unary_list([P|Ps], X) :-
call(P, X),
call_unary_list(Ps, X).
讓我們比較性能:
compare_call_list :-
findall(flies, between(1,100000,_), L),
time(call_unary_list(L, _)),
time(maplist(call_unary(_), L)),
time(maplist(X+\Pred^call(Pred,X), L)).
call_unary(X, P) :- call(P, X).
?- compare_call_list.
% 200,000 inferences, 0.123 CPU in 0.123 seconds (100% CPU, 1629657 Lips)
% 300,000 inferences, 0.145 CPU in 0.149 seconds (98% CPU, 2064184 Lips)
% 1,000,001 inferences, 1.286 CPU in 1.297 seconds (99% CPU, 777362 Lips)
true .
的call_unary/2亮點的需要的由MAPLIST參數交換meta predicate
@repeat:我喜歡lambda,實際上我用過很多次。當使用它時,我發現「困難的方式」有些問題。所以,特別是對於初學者,我只是喜歡解釋更多的基本技巧...... – CapelliC