我想知道是否有一种快速检查2种数据类型是否相同的方法。
示例 - 假设我有一个这样的列表:
[odd(1),odd(3),even(2),odd(5),even(4)]
现在,如果我从列表中拉出2个元素(索引0和索引1),我想知道它们是相同的数据类型还是不同(即奇数())。
答案 0 :(得分:0)
如果从列表中提取X
和Y
,您可以按字面意思进行检查,
X = odd(_), Y = odd(_) ; X = even(_), Y = even(_).
或者更一般地说,你可以检查......
functor(X, Functor, ArgCount),
functor(Y, Functor, ArgCount).
如果X
和Y
具有相同的仿函数(例如even
或odd
)以及它们是否具有相同数量的参数,则上述操作会成功。 functor/3
是ISO Prolog谓词,因此它适用于任何符合ISO标准的Prolog。
您可以在Prolog提示中进行一些测试。请注意,只有成功的结果是所选列表成员的“数据类型”匹配时。
| ?- List = [odd(1), odd(3), even(2), odd(5), even(4)], member(X, List), member(Y, List), functor(X, F, A), functor(Y, F, A).
A = 1
F = odd
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = odd(1)
Y = odd(1) ? ;
A = 1
F = odd
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = odd(1)
Y = odd(3) ? ;
A = 1
F = odd
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = odd(1)
Y = odd(5) ? ;
A = 1
F = odd
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = odd(3)
Y = odd(1) ? ;
A = 1
F = odd
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = odd(3)
Y = odd(3) ? a
A = 1
F = odd
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = odd(3)
Y = odd(5)
A = 1
F = even
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = even(2)
Y = even(2)
A = 1
F = even
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = even(2)
Y = even(4)
A = 1
F = odd
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = odd(5)
Y = odd(1)
A = 1
F = odd
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = odd(5)
Y = odd(3)
A = 1
F = odd
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = odd(5)
Y = odd(5)
A = 1
F = even
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = even(4)
Y = even(2)
A = 1
F = even
List = [odd(1),odd(3),even(2),odd(5),even(4)]
X = even(4)
Y = even(4)
yes
| ?-