Проблема несоответствия типов F # в демонстрации DirectX - PullRequest
0 голосов
/ 19 июля 2009

Я давно хотел попробовать FDX demo , однако он дал мне серию ошибок и предупреждений из-за проблем совместимости, поэтому я пытался заставить его работать правильно. Полный код находится на pastebin .

У меня проблемы с кодом здесь:

  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 # интерактив.

motion-sample.fs (438,53): ошибка FS0001: несоответствие типов. Ожидая
((('a *' b) список -> 'c) * ((' a * 'b) список ->' d)) ref
но учитывая
(float [,] * float [,]) ref.
Список типов '(' a * 'b) ->' c 'не соответствует типу' float [,] '

Спасибо за любую помощь!

1 Ответ

1 голос
/ 20 июля 2009

У меня не было времени хорошенько взглянуть, но попробуйте изменить определение meshGet на

let meshGet (mesh:_[,]*_[,]) (i,j) = let X,Y = mesh in X.[i,j], Y.[i,j]

EDIT

На самом деле, даже лучше, похоже, что есть более свежая копия на

http://code.msdn.microsoft.com/fsharpsamples/Release/ProjectReleases.aspx?ReleaseId=2705

Вы должны использовать это, а не летнюю, опубликованную на hubfs.

...