以内に私はこの機能を持っている: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つの整数を期待していますが、' Random.rand - > int'型の3つの関数を渡しています。したがって、 'genRandomNumber 100'はそれがあなたが思うものではありません。 'genRandomNumber'のコードを表示すると助けになります。 –
ああ、明示的にintを返したと思った。コードは 'Random.randRange(1、numToGen)'です。変数に宣言しようとしましたが、まだ動作していないようです。 – EpicBlargh