我寫的是給我一個語法錯誤,不知道是什麼原因的功能。你可以跳到這裏的底部,閱讀代碼和錯誤,這裏的其他內容只是更多可能不需要的信息。語法錯誤在OCaml中乘函數
我必須做出一個乘號函數,數相乘的兩個列表,並返回結果列表。
let bigMul l1 l2 =
let f a x = failwith "to be implemented" in
let base = failwith "to be implemented" in
let args = failwith "to be implemented" in
let (_, res) = List.fold_left f base args in
res
它乘以假裝表示大整數作爲列表,以便1234x24爲[1; 2; 3; 4]×[2; 4]它使用,我已經創作並測試了幾種功能。一個是mulByDigit,它將列表中的每個int乘以一個int並返回一個列表,如[2; 3; 4; 5] 1將返回[2; 3; 4; 5]。它還使用了padZero,它接受2個ints列表,並通過將0添加到較短的列表並返回一個具有列表ex [1; 2; 3]和[1]的元組,返回一個帶有[[1 ; 2; 3],[0; 0; 1])。最後一個函數bigAdd需要2個列表並添加它們,並返回[1; 2; 3] [1; 2; 3]的結果,它會給出[2; 4; 6]。所有這些功能已經過測試並正常工作,所以我不會爲他們提供代碼。
我寫了如下的考慮名單L1,通過尾隨取決於數字零,維護和L2的每個數字乘以它的邏輯功能。例如,如果列表1是[1; 2; 3; 4],並且l2是[2; 4]我拿第二個列表並倒轉它首先得到[4; 2],然後我乘以1234乘4結果。我將這個結果添加到累加器中的當前值,它不是一開始就增加我讓我知道下一個尾隨零。然後我把餘下的2乘以1234,並有一個尾隨零,如24680.我將它加到我的舊累加器中以獲得最終值並在l2中沒有更多數字時返回值。所以1234 + 24680 = 25914。這是我寫的功能。一個是它的蓄電池,我是保持的我有多少個零需要
let bigMul l1 l2 =
let f (i,a) x =
let sum = padZero ((mulByDigit x l1)@(clone 0 i)) a in
in let (first,second) = match sum with
| (y,z)->(y,z) in
(i+1, (bigAdd first second)) in
let base = (0,[]) in
let args = List.rev (l2) in
let (_, res) = List.fold_left f base args in
res
即時得到一個語法錯誤,當我運行它,說綁定值L2軌道。不知道爲什麼這麼想。
什麼是padZero,mulByDigit,克隆? –
我已經寫過的函數我不想在這裏發佈它們,因爲這將在這裏發佈幾乎整個作業任務。我儘管給他們的原型。 –
#clone 3 5 ;;; - :int list = [3; 3; 3; 3; 3] –