2013-03-15 42 views
0

我有一個函數numofday,我想應用於另一個函數中的兩個變量,它將返回兩個給定日期之間的天數,函數本身不會真的很重要,我想這更多的是一個語法問題,但谷歌沒有產生太多。在OCaml中定義一個函數內的變量

我想要做的是一樣的東西(這就是我想,顯然沒有工作)

let daysbetween day1 day2 = 
let x = numofday day1; 
let y = numofday day2; 
x-y;; 

我試圖讓去除,去除分號,並使用:=代替=和我似乎無法得到它的工作。必須有一種方法來定義函數中的變量。提前致謝。

回答

3

爲ocaml的的正確的語法讓綁定let name=bindng in expr 這裏是固定的代碼爲你

let daysbetween day1 day2 = 
    let x = numofday day1 in 
    let y = numofday day2 in 
    x-y;; 

你具體的例子甚至可以通過綁定一個元組分配一次兩個值:

let daysbetween day1 day2 = 
    let (x,y) = (numofday day1, numofday day2) in 
    x - y 
+0

啊我看,我在想這件事,我一直在試圖研究它,因爲我在等待答覆。再次感謝你。 – Bizzle 2013-03-15 02:11:30

+0

我不太喜歡這種情況下的元組賦值。這比任何事情都更令人困惑。另一種方法是使用「和」關鍵字:let days between between day1 day2 = let x = numofday day1 and y = numofday day2 in x-y ;;它不具有與兩個第一種解決方案相同的語義,但在這種情況下起作用,並指示y不依賴於x。 – 2013-03-18 14:48:16

2

在rgrinberg的答案上構建:
OCaml中的單分號與Java或C中的單分號差別很大。

就你而言,似乎你將分號的功能解釋爲語句的結束標記。
但是,分號用作表達式的分隔符。並且OCaml期望分號之前的值是單位類型的(),它通常返回哪些副作用函數。

表達:

();();();.....();x;; 

有x的值。

如何使用它呢?

let x = 1;; 
let y = 
    print_string("assigning x to y\n"); 
    x;; 
+0

我不同意這篇文章。分號和「in」關鍵字的語義非常接近。他的問題在於他在語法上是錯誤的:在讓它成爲「in」之後,而不是分號。在這裏放一個分號是完全合理的,並且嘗試一下是個好主意。我可能會說「let x = v」是一個表達式,它將v放入x中,並返回單位,與Ocaml中的「x:= v」一樣多。 – 2013-03-18 14:43:30

+0

@double_squeeze:讓它成爲「in」後,而不是分號 - >分號和「in」關鍵字的語義非常接近。邏輯是什麼?我應該說OCaml x = v和x == v有非常相似的語法嗎? – octref 2013-03-18 15:23:29

+0

是的,但那不是我的觀點。我的觀點是,在「let」之後嘗試分號是一個好主意,但不幸的是,ocaml有一個特殊的語法來結束「let」表達式,它是關鍵字「in」。分號在ocaml中是非常重要的,與C或java中的不同,除了在ocaml中它們被稱爲表達式。 – 2013-03-18 15:37:24

相關問題