-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