2012-03-14 117 views
3

我试图找出是否有任何方法可以在多维列表中找到特定元素索引,例如[[1,2,3],[4,5,6],[7,8,9]]使用Prolog的多维列表中特定元素的索引

如何查找'5' - [2] [2]或获得值[3] [3]的索引?当列表的大小未知时,这可能没有?或者是否有内置的谓词?

回答

1

您可以使用NTH1/3实现它:

index(Matrix, Row, Col, Value):- 
    nth1(Row, Matrix, MatrixRow), 
    nth1(Col, MatrixRow, Value). 

测试用例:

?- index([[1,2,3],[4,5,6],[7,8,9]], 2, 2, X). 
X = 5. 

?- index([[1,2,3],[4,5,6],[7,8,9]], Row, Col, 5). 
Row = Col, Col = 2 ; 
+0

好的,谢谢。无论如何,我会尝试重新定义它有多难? – whd 2012-03-14 14:33:07

+0

你的意思是你想重写nth1/3吗?它不应该很复杂,你可能想看看实现'listing(nth1/3)'等。 – gusbro 2012-03-14 14:41:54

+0

只是谓词索引 – whd 2012-03-14 15:31:59