2010-10-31 70 views
-2

任何人都可以用这个F#代码来帮我吗?我是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 
+5

究竟是什么问题?你期望发生什么? – codekaizen 2010-10-31 21:01:41

+0

我期望它能正常工作。确切的问题通常是输入变量。具体例如在代码中如果l1 = l那么(l + 1)显示编译器这个错误:类型'int'与类型''不匹配''列表' – 877 2010-10-31 21:11:03

回答

1

而你在编写低层次的习语时,高层次的编程会做得更好。例如

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

你的算法(minfree1)也正在对您的数据多遍(一次用于计算长度,另一个用于过滤,重复)。如果你真的在列表和它的长度上工作,这将会更快。无论如何,这看起来像是一个需要一些实际数据结构的任务[列表是功能程序的汇编级别...]

2

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

你应该想想一些明显的事情是:

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

你试图完成什么?

+0

我很抱歉我很笨,我没有问题更多与它。 – 877 2010-10-31 21:18:39