相关疑难解决方法(0)

Haskell中的undefined与Java中的null之间有什么区别?

两者都是类型是所有类型(无人居住)的交集的术语.两者都可以在代码中传递而不会失败,直到有人试图评估它们.我能看到的唯一区别是,在Java中,存在一个漏洞,它允许仅对null一个操作进行评估,这是一个引用相等比较(==) - 而在Haskell undefined中根本不能在不抛出异常的情况下进行评估.这是唯一的区别吗?

编辑

我真正想要解决的问题是,为什么null在Java 中包含这样一个显然很糟糕的决定,以及Haskell如何逃脱它?在我看来,真正的问题是,你可以做一些有用的null,即你可以检查它的NULL的含量.因为您可以这样做,所以在代码中传递空值并使它们表示"无结果"而不是"此程序中存在逻辑错误"已成为标准惯例.而在Haskell中,没有办法检查一个术语是否在没有评估它且程序爆炸的情况下评估到底部,因此它永远不会用这种方式来表示"没有结果".相反,一个人被迫使用类似的东西Maybe.

对不起,如果看起来我用"评价"这个词快速而宽松地玩......我试图在这里进行类比,并且难以准确地说出它.我想这表明这个比喻是不精确的.

java null haskell types maybe

50
推荐指数
2
解决办法
7485
查看次数

如果"List"是一个幺半群,它的"集合"是什么?

只需阅读类别理论书,并决定将其应用于haskell.

作者将Monoid定义为:

Monoid是一个L组,配有二进制运算*:LxL-> L和L中的区分单位元素u等...

将"List"结构作为monoid,很明显二进制运算是concat单位的[].

但是这里的M是什么?我试过L = {set of all lists}但是我认为这导致我遇到"L在L中?"的麻烦 问题,这似乎与集合有同样的问题.

还是我想错了什么?

编辑:正如@a​​pplicative所指出的,Haskell的列表是名为Free monoids的monoid !

haskell

19
推荐指数
1
解决办法
1846
查看次数

"底部"(⊥)在Haskell函数定义中的作用是什么?

我不理解bottom(?_|_)在Haskell函数定义中所起的作用.

zip例如,定义将其描述为"正确的懒惰",因为

zip [] _|_ = []
Run Code Online (Sandbox Code Playgroud)

但我不清楚这有何不同

zip [] _ = []
Run Code Online (Sandbox Code Playgroud)

_|_在上面的函数定义中扮演什么角色?特别是,它与使用_有何不同?


更新和注意:作为优秀答案的读者将自己发现,这些答案的一个关键部分,值得提拔,实际上,? 它不会(也不能)出现在Haskell函数定义中.继续阅读.

haskell

18
推荐指数
4
解决办法
2659
查看次数

"没有操作"已经开始了

如果我从学校正确记得,有一个函数或关键字用于"尚未实现",但代码编译.我试图搜索它,但找不到.谁知道我在找什么?

就是这样的

isDivisor :: Integer -> Integer -> Bool
isDivisor x y = None
--isDivisor x y = (rem x y) == 0
Run Code Online (Sandbox Code Playgroud)

debugging haskell no-op

7
推荐指数
1
解决办法
579
查看次数

Haskell 中是否有定点运算符?

我最近注意到我经常编写函数,这些函数只是迭代另一个函数,f直到它到达一个固定点(这样f x == x

我认为这是一个非常笼统的概念,所以我认为可能有一个内置的。

所以我想知道是否有一个内置的,或者更一般的东西?

所以我基本上是在寻找这个:

fixedpoint f x= head . dropWhile(\y->y /= f y) $ iterate f x
Run Code Online (Sandbox Code Playgroud)

我只是在谷歌搜索时遇到了麻烦,因为我只fix在我的搜索词包含fixed point或类似的东西时才找到对该函数的引用。

haskell fixed-point-iteration

5
推荐指数
2
解决办法
667
查看次数

标签 统计

haskell ×5

debugging ×1

fixed-point-iteration ×1

java ×1

maybe ×1

no-op ×1

null ×1

types ×1