F# Tipo de incompatibilidade Problema na demonstração DirectX
Pergunta
Eu estava querendo experimentar o Demo fdx No entanto, isso me deu uma série de erros e avisos devido a problemas de compatibilidade, por isso tenho tentado funcionar corretamente. O código completo está em um Pastebin.
Estou tendo problemas com o código aqui:
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
O que me dá o seguinte erro em f# interativo.
Motion-Sample.fs (438,53): Erro FS0001: Digite Incompatch. Esperando a
((('A *' B) LISTA -> 'C) * ((' A * 'B) LISTA ->' D)) REF
mas dado a
(Float [,] * Float [,]) Ref.
A lista tipo '(' a * 'b) ->' c 'não corresponde ao tipo' float [,] ''
Obrigado por qualquer ajuda!
Solução
Não tive tempo de dar uma boa olhada, mas tente mudar a definição de malha para
let meshGet (mesh:_[,]*_[,]) (i,j) = let X,Y = mesh in X.[i,j], Y.[i,j]
EDITAR
Na verdade, ainda melhor, parece que há uma cópia mais fresca em
http://code.msdn.microsoft.com/fsharpsamples/release/projectreleases.aspx?releaseId=2705
Você deve usar isso em vez do de anos postado no Hubfs.