如何在prolog中乘法谓词的结果?
如何在prolog中对谓词返回的结果进行乘法或除法 例如,我有一个谓词,它计算某个元素在列表中出现的次数。看起来是这样的:如何在prolog中乘法谓词的结果?,prolog,predicate,Prolog,Predicate,如何在prolog中对谓词返回的结果进行乘法或除法 例如,我有一个谓词,它计算某个元素在列表中出现的次数。看起来是这样的: elemCount(X, [X|T], N) 其中X是元素,[X | T]是列表,N是计数。 当我的输入是(3,[1,2,3],X)时,我得到的结果是X=1。但是否可以将结果乘以2,而不是X=1getX=2. 我试过这样的东西 elemCount(X,[X|T],2*N) 但是没有成功。elemCount(X[X | T],N),N1是N*2。和N1被实例化为结果。感谢
elemCount(X, [X|T], N)
其中X是元素,[X | T]是列表,N是计数。
当我的输入是(3,[1,2,3],X)时,我得到的结果是X=1。但是否可以将结果乘以2,而不是X=1getX=2.
我试过这样的东西
elemCount(X,[X|T],2*N)
但是没有成功。
elemCount(X[X | T],N),N1是N*2。
和N1
被实例化为结果。感谢您的回答,但不幸的是,当我需要比较elemCount谓词的结果时,这不起作用。例如,当我创建谓词compare([H | T],A):-elemCount(H,[H | T],X),elemCount(H,A,X)
时,如果list[[H | T],A]的每个元素的计数与列表A中的相同,则返回真的if list[[H | T],A],但我需要检查列表[H | T]的每个元素是否比列表A多三倍。因此在这种情况下compare([H | T],A):-elemCount(H,[H,[H | T],X),N是X*3,elemCount(H,A,X)
给我一个错误单态变量:[N]
你得到警告不是因为我给你看的是错误的,而是因为你的代码逻辑是错误的。我展示的是获得N*2
的正确方法,如果你有elemCount(X[X | T],N)
。你的逻辑应该是,elemCount(H,[H | T],X),N是X//3,elemCount(H,A,N)。
注意你说过,[H | T]
比listA
多3倍,所以你需要N是X//3
而不是N是X*3
。这里我们假设X
可以被3
整除。如果你真的是说,A
比list[H | T]
多3倍,那么逻辑是,elemCount(H,[H | T],X),N是X*3,elemCount(H,A,N)。
“Singleton”表示未使用的值。