値のリストがあり、各値に算術演算子を適用したいとしましょう。加算のような二項演算子の場合、これは次のような意味になります。
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
lambda