将谓词应用于列表元素的 Prolog 映射过程

发布于 2024-11-19 21:49:39 字数 240 浏览 4 评论 0 原文

如何编写将谓词 PredName(Arg, Res) 应用于 Listmap(List, PredName, Result) >,并返回列表 Result? 中的结果?

例如:

test(N,R) :- R is N*N.

?- map([3,5,-2], test, L).
L = [9,25,4] ;
no

How do you write a Prolog procedure map(List, PredName, Result) that applies the predicate PredName(Arg, Res) to the elements of List, and returns the result in the list Result?

For example:

test(N,R) :- R is N*N.

?- map([3,5,-2], test, L).
L = [9,25,4] ;
no

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

森罗 2024-11-26 21:49:39

这通常称为 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目标。

?- maplist(maplist(test),[[1,2],[3,4]],Rss).
   Rss = [[1,4],[9,16]].

maplist 有不同的参数,对应于以下结构在函数式语言中,但要求所有列表的长度相同。请注意,Prolog 不存在 zip/zipWithunzip 之间的不对称性。目标 maplist(C_3, Xs, Ys, Zs) 包含两者,甚至提供更通用的用途。

  • maplist/2对应全部
  • maplist/3对应map
  • maplist/4对应于 zipWith 但也 unzip
  • maplist/5 对应于 zipWith3unzip3
  • 。 ..

This is usually called maplist/3 and is part of the Prolog prologue. Note the different argument order!

:- meta_predicate(maplist(2, ?, ?)).

maplist(_C_2, [], []).
maplist( C_2, [X|Xs], [Y|Ys]) :-
   call(C_2, X, Y),
   maplist( C_2, Xs, Ys).

The different argument order permits you to easily nest several maplist-goals.

?- maplist(maplist(test),[[1,2],[3,4]],Rss).
   Rss = [[1,4],[9,16]].

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 between zip/zipWith and unzip. A goal maplist(C_3, Xs, Ys, Zs) subsumes both and even offers more general uses.

  • maplist/2 corresponds to all
  • maplist/3 corresponds to map
  • maplist/4 corresponds to zipWith but also unzip
  • maplist/5 corresponds to zipWith3 and unzip3
  • ...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文