內我有這樣的功能:SMLNJ - 功能的工作原理本身,而不是其他功能
addBinaryTreeNode((genRandomNumber(100), genRandomNumber(100), genRandomNumber(100)), tree, 1, [])
返回一個數據類型「二叉樹」。它將編譯時是自己,但是當我把它在一個函數:
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的返回類型是二叉樹,所以我不知道這個問題可能是什麼。
錯誤消息看起來很明顯:'addBinaryTreeNode'需要3個整數,但是你傳遞了三個類型爲'Random.rand - > int'的函數。因此'genRandomNumber 100'不是你想象的那樣。如果你顯示'genRandomNumber'的代碼會有幫助。 –
呵呵,以爲它明確地返回了一個int。代碼是:'Random.randRange(1,numToGen)'。我試圖將它聲明爲一個變量,但似乎仍然沒有工作。 – EpicBlargh