У меня есть эта функция:SMLNJ - Функция работает сам по себе, но не внутри другой функции
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 ints, но вы передаете ему три функции типа Random.rand -> int'. Таким образом, 'genRandomNumber 100' - это не то, что вы думаете. Это поможет, если вы покажете код для genRandomNumber. –
Да, думал, что он явно возвратил int. Код: 'Random.randRange (1, numToGen)'. Я попытался объявить его переменной, но это все еще не работает. – EpicBlargh