2016-11-04 72 views
-1

我有一個這個練習的問題!從列表[a1,...,ai,ai + 1,....,an]到列表[ai + 1,...,an,a1,... ai]的OCaml

我的想法是創建兩個功能:

  1. 第一個函數創建列表[ai + 1, ..., an]
  2. 第二個功能,作爲輸入的第一個函數的結果並返回結果:[ai + 1, ..., an, a1, ..., ai]

問題是我剛開始使用Ocaml進行編程,我不太清楚如何使用它。所以我有一些我不知道如何解決的錯誤。 我的代碼是這樣的:

let rec produceprima l i = 
let rec produceprima_aux l i acc= 
    let rec aux l i acc l1 = 
    match l with 
    []-> [] 
    |x::y -> if(acc>i) then aux y i acc+1 [email protected][x] 
      else aux y i acc+1 l1 
    in aux l i acc l1 
in produceprima_aux l i acc;; 

let rec produceseconda l i = 
let rec produceseconda_aux l i acc= 
    let rec aux l i acc l1 = 
    match l with 
    []-> [] 
    |x::y -> if(acc<=i) then aux y i acc+1 [email protected][x] 
    in aux l i acc l1 
in produceseconda_aux l i acc;; 

第一功能的錯誤是:

Error: This expression has type 'a -> 'b list 
     but an expression was expected of type int 

第二個功能,我必須嘗試,但肯定是有錯誤!

回答

0

表達式f x+1被編譯器解析爲(f x) + 1。事實上,你省略了運算符名稱周圍的空白,並沒有給它任何優先權。所以,你應該寫aux y i (acc+1) l1,而不是aux y i acc+1 l1

這是一個非常常見的錯誤。我建議你嘗試OCamlPro教程。尤其是第5課,重點放在語法陷阱上。

+0

非常感謝:D我試試!當然,我會看到教程! –