f#directxデモのタイプミスマッチ問題
質問
私は試してみたいと思っていました FDXデモ しかし、それは互換性の問題のために一連のエラーと警告を与えてくれたので、私はそれを正しく機能させようとしてきました。完全なコードはaにあります パステビン.
ここでコードに問題があります:
let drawSurf f (device:Device) =
let m,n = meshDims !mesh in
let data = Array.init (n*m) (fun k ->
let i,j = k2ij !mesh k in
let x,y = meshGet !mesh (i,j) in
let z = f (x,y) in // single precision f
(x,y,z))
in
let strips = triangleRows n m |> map (map (blendPlace !mesh data)) in
List.iter (fun strip -> drawTriangeStrip strip device) strips;
let m,n = meshDims !mesh in
let lines = gridLines n m in
let lines = lines |> map (colorPlace !mesh data Color.Black) in
drawLineList lines device
これにより、F#Interactiveで次のエラーが得られます。
Motion-Sample.FS(438,53):エラーFS0001:タイプの不一致。期待する
((( 'a *' b)list-> 'c) *((' a * 'b)list->' d)ref
しかし、
(float [、] * float [、])ref。
タイプ '(' a * 'b)list->' c 'はタイプ' float [、] 'と一致しません
助けてくれてありがとう!
解決
見栄えを良くする時間がありませんでしたが、Meshgetの定義を変更してみてください
let meshGet (mesh:_[,]*_[,]) (i,j) = let X,Y = mesh in X.[i,j], Y.[i,j]
編集
実際、さらに良いことに、新鮮なコピーがあるように見えます
http://code.msdn.microsoft.com/fsharpsamples/release/projectreleases.aspx?releaseid=2705
Hubfsに投稿された長年のものではなく、それを使用する必要があります。
所属していません StackOverflow