如何在prolog中制作数组?

Beg*_*mer 11 arrays prolog

我想在Prolog中创建一个数组.怎么办?如何访问元素?

Wil*_*ess 8

具有arg/3谓词的stadard Prolog方式(可能是有限的,不可变的)数组是谓词:

11 ?- length(X,4), A =.. [g|X], arg(1,A,a).

X = [a, _G590, _G593, _G596]
A = g(a, _G590, _G593, _G596) 

Yes

12 ?- length(X,4), A =.. [g|X], arg(1,A,a), arg(3,A,c), arg(2,A,b), arg(1,A,d).

No
13 ?- length(X,4), A =.. [g|X], arg(1,A,a), arg(3,A,c), arg(2,A,b), arg(4,A,d).

X = [a, b, c, d]
A = g(a, b, c, d) 

Yes
Run Code Online (Sandbox Code Playgroud)

Bratko("Prolog编程用于人工智能")具有使用此功能解决经典8皇后问题的代码.

在Prolog中模拟数组的另一种方法是将列表编码为二叉树,以便O(log(n))访问时间.


Cap*_*liC 6

如果你正在使用一个在术语上具有无限arity的Prolog,比如SWI-Prolog,你可以使用setarg/3来模拟一个向量.

请阅读项目负责人在论证中写下的注释.

我从来没有在Prolog中使用过数组,但是回答这个问题,我测试了功能的效率.实际上工作得相当好.

  • 我认为这比Prolog中的数组更接近于链接列表的接受答案. (2认同)

060*_*002 5

序言中没有“数组”。我的意思是,你无法获得索引列表。您所要做的就是像链接列表一样访问该列表。您必须以递归方式完成此操作。