述語map(List, PredName, Result)
をList
の要素に適用し、結果をリストResult
に返すPrologプロシージャPredName(Arg, Res)
をどのように記述しますか?
例えば:
test(N,R) :- R is N*N.
?- map([3,5,-2], test, L).
L = [9,25,4] ;
no
これは通常_maplist/3
_と呼ばれ、 Prologプロローグ の一部です。引数の順序が異なることに注意してください!
_:- meta_predicate maplist(2, ?, ?).
maplist(_C_2, [], []).
maplist( C_2, [X|Xs], [Y|Ys]) :-
call(C_2, X, Y),
maplist( C_2, Xs, Ys).
_
引数の順序が異なるため、いくつかのmaplist
- goalsを簡単にネストできます。
_?- maplist(maplist(test),[[1,2],[3,4]],Rss).
Rss = [[1,4],[9,16]].
_
maplist
にはさまざまなアリティがあり、 関数型言語では次の構文 に対応していますが、すべてのリストが同じ長さである必要があります。 PrologにはZip
/zipWith
とunzip
の非対称性がないことに注意してください。目標maplist(C_3, Xs, Ys, Zs)
は両方を包括し、さらに一般的な用途も提供します。
maplist/2
_はall
に対応しますmaplist/3
_はmap
に対応しますmaplist/4
_はzipWith
に対応しますが、unzip
にも対応しますmaplist/5
_は_zipWith3
_および_unzip3
_に対応します