Проблема несоответствия типов F# в демонстрации DirectX

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

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

  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 ответ

Решение

У меня не было времени хорошенько взглянуть, но попробуйте изменить определение 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.

Другие вопросы по тегам