matrix - Prolog - 从列表列表中获取元素

标签 matrix prolog row backtracking

我无法弄清楚如何在不使用递归的情况下访问字符串列表中的单个字符,而是使用回溯。

例如,我有这个字符串列表,我希望能够从这些字符串('.' 'o'、'*')之一返回单个字符。我正在处理的程序将其视为行和列。我的数据库中的事实如下所示:

matrix(["...o....",
        ".******.",
        "...o....",
        ".*...*..",
        "..o..*..",
        ".....*..",
        ".o...*..",
        "....o..o"].

我有谓词:

get(Row,Col,TheChar) :- 

获取行号和列号(索引从 1 开始)并返回该特定行和列的条目 (TheEntry)。

我感觉我的谓词头可能构建不正确,但我真的更关注如何在不递归的情况下逐个字符地遍历列表中的每个字符串并返回它。

我是 prolog 的新手,在这方面遇到了很大的困难。

如有任何帮助,我们将不胜感激!

谢谢!

最佳答案

get/3 的实现可能如下所示:

get(Row,Col,TheChar) :-    
   matrix(M),
   nth(Row,M,RowList),
   nth(Col,RowList,TheChar).

请注意,TheChar 统一为一个字符代码,例如

| ?- get(1,4,X).
X = 111

如果您想查看字符,例如可以使用原子代码,例如

| ?- get(4,2,X), atom_codes(CharAtom,[X]).
X = 42
CharAtom = *

希望这对您有所帮助。

关于matrix - Prolog - 从列表列表中获取元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7912783/

相关文章:

python - 玛雅Python : Apply Transformation Matrix

python - 计算大型相关矩阵的内存有效方法?

c# - 在xy平面动态建立矩阵

list - 如何将 Prolog 中的列表拆分为包含 3 个项目的多个列表?

prolog - 检查一个 child 在 Prolog 中是否至少有 3 个 parent

php - 我如何从mysql中获取第n行的值?

python - NumPy / python : Efficient matrix as multiplication of cartesian product of input matrix

prolog - 在 Prolog 中将 CYK 表的一个子列表等同于另一个子列表

mysql - 如何使用mysqli获取总行数

mysql - 合并 SQL 中同一列的行