F#出了问题

时间:2010-10-31 20:58:37

标签: f# types

任何人都可以帮我解决这个F#代码吗?我是F#初学者,我遇到了问题。 非常感谢

let rec rem l xs = match xs with
| [] -> []
| x::xs -> if x>l then rem l y
                 else x::(rem l y)   

let rec minfree1 l:long xs = match xs with
    | [] -> 1
    | _ -> let nxs = rem xs l
           let l1 = List.length(nxs)
           in  if l1=l then (l+1)
                       else minfree1 l1 nxs

let minfree xs = minfree1 (List.length(xs)) xs

2 个答案:

答案 0 :(得分:2)

究竟什么不起作用?你的代码应该做什么?你不了解编译器给你的错误了什么?

你应该考虑的一些显而易见的事情是:

  • 你的第一个职能是y是什么?你永远不会宣布它。
  • F#中没有long,有int64。您需要在第二个函数中围绕( )括号(l:int64)。
  • rem函数希望xs成为一个列表,但是您将其传递给l,而不是第二个函数中的列表。
  • 可能更多。

你想要完成的是什么?

答案 1 :(得分:1)

当你使用低级习语时,你会用更高级别的编程做得更好。例如

let rem l = List.filter (fun x -> x <= l)

您的算法(minfree1)也会对您的数据进行多次传递(一次用于计算长度,另一次用于过滤,重复)。如果你实际上处理了这对列表及其长度,这将更快。在任何情况下,这看起来像一个需要一些实际数据结构的任务[列表是功能程序的汇编级别...]