假设我有值列表,我想对每个值应用算术运算符。对于像加法这样的二元运算符,这意味着如下:
add_lists([],[],[]).
add_lists([A|TA],[B|TB],[R|TR]) :- R is A+B,
add_lists(TA,TB,TR).
现在我想写一些类似的东西:
?- arithop_lists(+,[1,2,3],[0.2,-2,100],R).
这有效:
arithop_lists(_Op,[],[],[]).
arithop_lists(Op,[A|TA],[B|TB],[R|TR]) :- E =.. [A,Op,B], R is E,
arithop_lists(Op,TA,TB,TR).
但我非常沮丧,因为我找不到更简单的方法来做到这一点。我想不出一个findall
不使用member
. =..
更重要的是,如果不调用每对操作数,我无法弄清楚如何做到这一点。
我最初的感觉是它可以用 来完成maplist
,而且我知道它可以完成,但我不知道是否使用maplist
andlambda
是一个 hack。