F# 出了点问题

F# 出了点问题,f#,types,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 x

有人能帮我处理这个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

到底是什么不起作用?你的代码应该做什么?关于编译器给您的错误,您不了解什么

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

  • 第一个函数中的
    y
    是什么?你从不申报
  • F#中没有长的
    long
    ,而是
    int64
    。在第二个函数中,在
    l:int64
    周围需要括号(
    ()
  • rem
    函数期望
    xs
    是一个列表,但您传递的
    l
    不是第二个函数中的列表
  • 可能更多

你想达到什么目的?

而且你在用低级习惯用法写作,而高级编程会做得更好。比如说

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

让rem l=List.filter(fun x->x)到底是什么问题?你希望发生什么?我希望它能正常工作。确切的问题通常是键入变量。例如,在代码中,如果l1=l,那么(l+1)向编译器显示此错误:类型“int”与类型“a List”不匹配