Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在prolog中乘法谓词的结果?_Prolog_Predicate - Fatal编程技术网

如何在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被实例化为结果。感谢

如何在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谓词的结果时,这不起作用。例如,当我创建谓词
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]
比list
A
多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”表示未使用的值。