の要素にmap(List, PredName, Result)
述語を適用し、結果をリストに返すPrologプロシージャをどのように記述しますか?PredName(Arg, Res)
List
Result
例えば:
test(N,R) :- R is N*N.
?- map([3,5,-2], test, L).
L = [9,25,4] ;
no
の要素にmap(List, PredName, Result)
述語を適用し、結果をリストに返すPrologプロシージャをどのように記述しますか?PredName(Arg, Res)
List
Result
例えば:
test(N,R) :- R is N*N.
?- map([3,5,-2], test, L).
L = [9,25,4] ;
no
これは通常呼び出され、 Prolog prologuemaplist/3
の一部です。引数の順序が異なることに注意してください。
:- 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
-goal を簡単にネストできます。
?- maplist(maplist(test),[[1,2],[3,4]],Rss).
Rss = [[1,4],[9,16]].
maplist
さまざまなアリティがあり、関数型言語の次の構造に対応しますが、すべてのリストが同じ長さである必要があります。zip
Prolog には/zipWith
との間に非対称性がないことに注意してくださいunzip
。目標maplist(C_3, Xs, Ys, Zs)
は両方を包含し、より一般的な用途を提供します。
maplist/2
に対応all
maplist/3
に対応map
maplist/4
に対応するzipWith
だけでなくunzip
maplist/5
に対応しzipWith3
、unzip3