F# Typenpaarungsproblem in DirectX -Demo Typ Typ
Frage
Ich wollte das ausprobieren FDX -Demo Es gab mir jedoch eine Reihe von Fehlern und Warnungen aufgrund von Kompatibilitätsproblemen, also habe ich versucht, es richtig zum Laufen zu bringen. Der vollständige Code ist auf a Pastebin.
Ich habe hier Probleme mit dem Code:
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
Das gibt mir den folgenden Fehler in F# interaktiv.
Motion-Sample.FS (438,53): Fehler FS0001: Typ Fehlanpassung. Erwarten a
((('a *' b) Liste -> 'c) * ((' a * 'b) Liste ->' d)) Ref
aber gegeben a
(float [,] * float [,]) Ref.
Der Typ '(' a * 'b) Liste ->' C 'stimmt nicht mit dem Typ' Float [,] 'überein.
Danke für jede Hilfe!
Lösung
Ich hatte keine Zeit, einen guten Blick darauf zu werfen, aber versuchen Sie, die Meshget -Definition zu ändern.
let meshGet (mesh:_[,]*_[,]) (i,j) = let X,Y = mesh in X.[i,j], Y.[i,j]
BEARBEITEN
Eigentlich noch besser sieht es so aus, als gäbe es eine frischere Kopie bei
http://code.msdn.microsoft.com/fsharpsamples/release/projectrelease.aspx?releaseId=2705
Sie sollten das anstelle des jahrelangen auf Hubfs veröffentlichten Hubfs verwenden.