将谓词应用于列表元素的 Prolog 映射过程
如何编写将谓词 PredName(Arg, Res)
应用于 List
map(List, PredName, Result) >,并返回列表 Result
? 中的结果?
例如:
test(N,R) :- R is N*N.
?- map([3,5,-2], test, L).
L = [9,25,4] ;
no
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这通常称为
maplist/3
并且是 Prolog 序言。注意不同的参数顺序!不同的参数顺序允许您轻松嵌套多个
maplist
目标。maplist
有不同的参数,对应于以下结构在函数式语言中,但要求所有列表的长度相同。请注意,Prolog 不存在zip
/zipWith
和unzip
之间的不对称性。目标maplist(C_3, Xs, Ys, Zs)
包含两者,甚至提供更通用的用途。maplist/2
对应全部
maplist/3
对应map
maplist/4
对应于zipWith
但也unzip
maplist/5
对应于zipWith3
和unzip3
This is usually called
maplist/3
and is part of the Prolog prologue. Note the different argument order!The different argument order permits you to easily nest several
maplist
-goals.maplist
comes in different arities and corresponds to the following constructs in functional languages, but requires that all lists are of same length. Note that Prolog does not have the asymmetry betweenzip
/zipWith
andunzip
. A goalmaplist(C_3, Xs, Ys, Zs)
subsumes both and even offers more general uses.maplist/2
corresponds toall
maplist/3
corresponds tomap
maplist/4
corresponds tozipWith
but alsounzip
maplist/5
corresponds tozipWith3
andunzip3