库(lambda)很强大,但它是有代价的。如果您认为“越简单越好”(关于调试,特别是......)请考虑
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 突出显示映射列表元谓词所需的参数交换