2010-10-31 72 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