2014-09-28 30 views
1

我是OCaml的新手,剛剛發現了一個在線OCaml指南,http://try.ocamlpro.com/。 當談到第5課時,我被困在一些練習中。所以,現在的問題是: 修復,以便在年底得到預期的結果這一切讓表達式:如何解決OCaml中的代碼錯誤?

1.

let xy = 
    let x = 'x' and let y = 'y' in x ::[y] 

2.

let ab = 
    let a = 'a' 
    let b = 'B' in Char.lowercase b 
    in a ::[b] 

3.

let up = Char.uppercase in 
    big_xy = List.map up xy ; 
    big_ab = List.map up ab ; 
    big_ab @ big_xy 

PS:我知道如何解決問題1,並在此處發佈它以解決問題3的需求。對於P問題2和3,我可以看到問題出在哪裏,但我很難弄清楚如何解決這個問題。我對於「let ... in」這個聲明有點困惑,而且我可以參考的資源很少來解決這個問題。

+1

你有什麼試過?你得到什麼信息?這些都是學習練習,我們爲你做什麼是重要的,當你陷入第6課而沒有通過第5課的練習學到你應該學習什麼時,你會做什麼? – 2014-09-28 14:38:15

+0

也許我沒有清楚地描述它,我知道如何解決問題1,並且我知道問題2和問題3中的錯誤,但我想不出解決它們的好方法。並且我在此處發佈問題1是對問題3的需要。 – user3162587 2014-09-28 14:46:37

回答

1

這是一個完全錯誤的OCaml,它確實不是一個OCaml的全部))

我只是試圖猜測是你的意圖,所以第二個代碼示例中您曾經試圖綁定變量到一些字符值,然後小寫其中的一個,並創建這兩個值的列表。

在你明白你的代碼出了什麼問題之前,你需要知道OCaml的語法。

  1. 有很多種OCaml中結合語句,第一個是一個表達式,並具有以下圖案:

    讓«變量名»=«EXPR-1»在«expr- 2»

這意味着綁定評估«EXPR-1»到«可變名稱»的結果,這樣就可以在expr-2«(並且僅在«expr-使用它裏面» 2»,這是它的範圍)。 「expr-2」可以是另一個綁定表達式。讓我們一些例子:

let a = 'a' in [a] 

let a = 'a' in 
let b = 'b' in 
[a; b] 
  • 第二種綁定是所謂的頂級結合,用來當你」重新添加一些定義到模塊級別(或者交互式頂級,這是相同的)。他們看起來有點簡單,但他們不是表達。當我說某件事不是表達式時,我的意思大多是,它不能被評估爲一種價值。因此,它們具有以下模式:

    讓«變量名»=«EXPR»

  • 正如你所看到的,有沒有部分,只生約束力。您可以使用此語句創建一個全局常量,例如,

    let pi = 4. *. atan 1. 
    

    或者,你可以用它的功能結合到一個名稱(即寫一個函數的定義):

    let circle_area radius = pi * radius ** 2. 
    

    當然,在函數內部,你可以使用任何表達式,包括綁定表達式:

    let area_of_circles radii = 
        let areas = List.map circle_area radii in 
        List.fold_left (+.) 0. areas 
    

    我想指出,有做很多很好的教程和教材,可以幫助你學習ocaml的速度非常快。你可以在OCaml標籤頁找到它們。我個人建議你從一開始就看「OCaml」書。

    相關問題