1

我需要随机访问序言(swipl)中的矩阵位置。建议我一个库,它提供了一种在矩阵中创建和访问随机位置的方法,而无需经历处理列表的过程。

4

1 回答 1

3

SWI-Prolog 有无限数量的术语,那么你真的不需要任何外部库。有几个用于访问术语参数的内置函数,我发现arg很方便。例如:

?- A = array(1,2,3,4,5,6,7), arg(3, A, X).
X = 3.

根据您需要处理的数据以及访问这些矩阵的频率,您可以应用数据隐藏,为自己提供首选界面。

例如,您可能需要索引验证:

?- A = array(1,2,3,4,5,6,7), arg(8, A, X).
false.

请注意,不会引发异常...

arg/3 也可以搜索匹配的参数:

?- A = array(1,2,3,4,5,6,7), arg(P, A, 4).
A = array(1, 2, 3, 4, 5, 6, 7),
P = 4 .

编辑

在 Prolog 中,分配必须始终小心处理,因为编程模型并不真正适合这种情况。但是有一些内置函数,比如nb_setarg,可以完成这项工作。请参阅相关文档部分

于 2012-09-23T14:25:13.303 回答