-2
A
回答
3
snd(x+1,(5,x-2))
等於(5,x-2)
,然後fst(5,x-2)
等於5
。所有這些都不需要任何包含x
(Haskell是懶惰的,表示它僅在需要時評估事物)的表達式的評估。
7
現在讓我們忽略let x = x + 3 in
一部分,並專注於in
後會發生什麼:
fst (snd (x + 1, (5, x - 2)))
隨着fst
的定義和snd
是
fst (a, b) = a
snd (a, b) = b
因此減少什麼是在第一
括號snd (x + 1, (5, x - 2)) ==> (5, x - 2)
現在這個被傳遞給fst
:
fst (5, x - 2) ==> 5
所以最終的x
值實際上並不重要。
這可能發生在Haskell中,因爲有些東西叫懶惰評估。基本上,編譯器在需要之前不會解析值。隨着高清
x = x + 3
如果你試圖打印x
當你耗盡內存試圖評估這個,你會得到一個無限循環,並可能是一個錯誤在一些點。由於x
的值從未實際打印出來,編譯器可以自由解決其值。當您在REPL中評估該表達式時,打印到控制檯的值是5,它與x
的值無關,因此可以安全地忽略x
。
,其中惰性編程也發揮了作用又如表達
> let ones = 1:ones in take 5 ones
[1,1,1,1,1]
定義let ones = 1:ones
定義了1秒的無限名單,但由於我們只有抓住他們的5 take 5 ones
,這種表達是能解決。
相關問題
- 1. 爲什麼 - 〜x等於x + 1?
- 2. 爲什麼x ** 3比x * x * x慢?
- 3. 爲什麼irfftn(rfftn(x))不等於x?
- 4. Hibernate 3.x到5.x遷移問題
- 5. C++:int * x [5]和int(* x)[5]之間有什麼區別?
- 6. 更短的寫法if(x == 1 || x == 5 || x == 7 || x == 22)
- 7. 以編程方式將X w/5(Y || Z)擴展爲「X Y」〜5 || 「X Z」〜5
- 8. NEST 5.x依賴於NEST 2.x?
- 9. MvvmCross 4.x vs MvvmCross 5.x
- 10. Node.js 5.x v/s 0.10.x或0.12.x
- 11. 爲什麼x^0 = x?
- 12. Floor(X)模X等於X?
- 13. 在vim中用[x + 5]替換[x]的命令是什麼
- 14. 什麼是list.count(x => x * x> 1)在做什麼?
- 15. 我討厭python中的5 x 5 x 5五邊形
- 16. 要打印該系列答案 - > x^3 - x^5 + x^7 - x^9 +
- 17. 對於1-D`X`,`X [n]`和`X [...,n]`有什麼區別?
- 18. 爲什麼在C++中x [y] == y [x]?
- 19. x = pow(y,5)是什麼反函數
- 20. Dspace 4.2至5.x選擇什麼?
- 21. 在Python中,有什麼其他方法可以編寫if x == 1或x == 5或x == 10 ...?
- 22. TeamCity 5.x與xcodebuild?
- 23. JBoss AS 5.x EOL?
- 24. 升級到5.x
- 25. JBoss 5.x和Axis2
- 26. 爲什麼kibana 3.x不適用於彈性搜索2.x?
- 27. 從php 4.x升級到5.x?
- 28. 將MySQL 6.x降級至5.x
- 29. Eclipse CDT 5.x和cmake 2.6.x
- 30. Oracle 10.x到MySQL 5.x轉換
你認爲它應該等於什麼,爲什麼? –
你可以逐步計算,首先用'b'替換'snd(a,b)'... – chi
你問它爲什麼不等於別的東西或者它爲什麼不會產生錯誤? – sepp2k