【发布时间】:2017-02-17 10:59:51
【问题描述】:
我有这个功能:
addBinaryTreeNode((genRandomNumber(100), genRandomNumber(100), genRandomNumber(100)), tree, 1, [])
返回数据类型“binaryTree”。它本身会编译,但是当我在函数中使用它时:
generate3DNodeTree(addBinaryTreeNode((genRandomNumber(100), genRandomNumber(100), genRandomNumber(100)), tree, 1, []), numToGen - 1)
...它不会编译,给我这些错误:
stdIn:215.21-215.135 Error: operator and operand don't agree [tycon mismatch]
operator domain: (int * int * int) * binaryTree * int * int list
operand: ((Random.rand -> int) * (Random.rand -> int) * (Random.rand -> int)) * binaryTree * [int ty] * 'Z list
in expression:addBinaryTreeNode((genRandomNumber 100,genRandomNumber 100,genRandomNumber 100),tree,1,nil)
函数“generate3DNodeTree”有参数:
(tree : binaryTree, numToGen : int)
...这正是我传递给它的内容。为什么这不起作用?
generate3DNodeTree 如果我这样传递它就可以工作:
generate3DNodeTree(tree, numToGen - 1)
SMLNJ 知道 addBinaryTreeNode 的返回类型是 binaryTree,所以我不知道可能是什么问题。
【问题讨论】:
-
错误消息似乎很明确:
addBinaryTreeNode期望 3 个整数,但您传递给它的三个函数类型为Random.rand -> int。因此genRandomNumber 100不是你想象的那样。如果您显示genRandomNumber的代码会有所帮助。 -
呵呵,以为它显式地返回了一个 int。代码为:
Random.randRange(1, numToGen)。我尝试将其声明为变量,但这似乎仍然不起作用。