任何人都可以帮我解决这个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
答案 0 :(得分:2)
究竟什么不起作用?你的代码应该做什么?你不了解编译器给你的错误了什么?
你应该考虑的一些显而易见的事情是:
y
是什么?你永远不会宣布它。 long
,有int64
。您需要在第二个函数中围绕( )
括号(l:int64
)。rem
函数希望xs
成为一个列表,但是您将其传递给l
,而不是第二个函数中的列表。你想要完成的是什么?
答案 1 :(得分:1)
当你使用低级习语时,你会用更高级别的编程做得更好。例如
let rem l = List.filter (fun x -> x <= l)
您的算法(minfree1)也会对您的数据进行多次传递(一次用于计算长度,另一次用于过滤,重复)。如果你实际上处理了这对列表及其长度,这将更快。在任何情况下,这看起来像一个需要一些实际数据结构的任务[列表是功能程序的汇编级别...]