我的序言老師問我們,沒有人能給出一個答案紮實,我不能在網上找到答案。讓利之間創建一個函數x = 10和X <時有什麼區別 - 在Haskell
回答
讓我們給雙方一些minimial方面:
foo, foo' :: IO()
foo = do
let x = 10
print x
foo' = do
x <- return 10
print x
兩者都只是語法糖:
foo ≡ (\x -> print x) 10
foo' ≡ return 10 >>= \x -> print x
,或者,如果我們稱之爲共同拉姆達p
,
foo ≡ p 10
foo' ≡ return 10 >>= p
顯然, foo
是更基本,更喜歡(特別是因爲它的工作原理與任何返回類型p
,不只是單子)。然而,由monad laws,兩者其實需要是等效的,對任何單子!
你不是說'foo'更基本嗎? – Sarah 2014-09-10 22:27:31
'我當然糾正了。 – leftaroundabout 2014-09-10 22:47:41
但讓綁定是多態的(模仿可怕的單態限制)和單子綁定不是。所以他們不相同。 – augustss 2014-09-11 00:31:57
閱讀your dropbox link,似乎缺少的情況下你的問題是這樣的:你的教授是假設你在裏面GHCI,Haskell的解釋,它的工作原理有點從編譯器不同的運行。
的問題,翻譯成英文,是這樣的:
在Haskell功能與保留字
let
let x = 10
另一種方式定義的功能定義來定義一個函數,如下所示:
x <- return 10
有什麼區別,什麼是每種方法的優缺點?
是交代不清的其他人對這些問題的評論是,這些都不是在一個Haskell源文件的有效表達的第一件事情,但兩者都在do
塊有效聲明(見leftaroundabout的答案)也正因爲如此他們也在GHCI提示有效輸入:
GHCi, version 7.6.3: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> x <- return 10
Prelude> x
10
Prelude> let y = 10
Prelude> y
10
即交代不清的是,無論這些例子是定義一個函數的第二件事情;他們將一個值綁定到一個變量。 let
可以用來定義函數,但據我所知<-
不能。這聽起來像你的老師混淆了術語「功能」和「可變」。
在任何情況下:
- 的
let x = 10
語法結合x
到純值; x <- return 10
將x
綁定到結果。
因此,您可以使用執行以下操作,但不能使用let variable = expression
執行以下操作。 (請注意,第二行是輸入我在打字。)
Prelude> str <- getLine
La pregunta de tu profesor me parece algo disparatada.
Prelude> str
"La pregunta de tu profesor me parece algo disparatada."
- 1. $('x> y'),$('y','x')和$('x y')之間有什麼區別?
- 2. 在python 2.7「x!= y」和「not x == y」之間有什麼區別?
- 3. 成本函數,sum(x)和ones(1,length(x))* x之間的區別是什麼?
- 4. IsNull(x)和x =「」之間有區別嗎?
- 5. 演員之間有什麼區別:(A)x和x爲A?
- 6. 過濾器(| x |)和過濾器(|&x |)之間有什麼區別?
- 7. C++:int * x [5]和int(* x)[5]之間有什麼區別?
- 8. 在瀏覽器控制檯中輸入時,var x = 10和x = 10之間有什麼區別?
- 9. colnames(x [1])< - 「name」和colnames(x)[1] < - 「name」之間的區別是什麼?
- 10. python3有什麼區別? <x>和python3。 <x> m
- 11. Haskell:(+1)和(\ x-> x + 1)有什麼區別?
- 12. int [] x;有什麼區別?和int x [];?
- 13. 「x!」有什麼區別和「x」?
- 14. (void **)&x和(void *)x有什麼區別?
- 15. 'x'和'x'有什麼區別?
- 16. x |之間的區別y和y <(x)在bash中?
- 17. Rails 1.X和2.X之間的主要區別是什麼
- 18. C中「* x = 1」和「x = 1」之間的區別是什麼?
- 19. * x = i和x =&i之間的區別是什麼
- 20. Angular 1.X和2.X之間的區別是什麼
- 21. Func <x,y>和Method(x,y)有什麼區別?
- 22. null == x和x == null之間的區別?
- 23. int * x []和int(* x)[]之間的區別?
- 24. 在JavaScript中,typeof x =='y'和typeof x ==='y'之間有什麼區別嗎?
- 25. 當我<x和範圍(x)中的i之間的區別?
- 26. ++和:haskell之間的區別是什麼?
- 27. SproutCore 1.x和2.0之間有什麼區別?
- 28. Java:格式說明符%x和%h之間有什麼區別?
- 29. .setGravity(...)方法和getLayoutParams()之間有什麼區別gravity = x?
- 30. 什麼是Haskell,python和c函數之間的主要區別?
既不是一個表達式或對自己的語法,有效的,所以你應該告訴教授這個問題上錯誤陳述 – jberryman 2014-09-10 22:23:41
@jberryman:其實我懷疑教授陳述的問題比OP在這裏發佈的內容更健康... – leftaroundabout 2014-09-10 22:26:18
他實際上把這個問題放在一個測試中,它用西班牙語,但這裏是它的問題3https://www.dropbox.com/s/ j9cqo8b2s2ioyfa/Tarea%25201.pdf?dl = 0 – 2014-09-10 22:31:19