【问题标题】:What does this syntax mean in Haskell: _|_ or (_|_)这个语法在 Haskell 中是什么意思:_|_ 或 (_|_)
【发布时间】:2013-11-05 17:06:47
【问题描述】:

我一直在许多受人尊敬的文件中看到这个相当尴尬的事情:_|_(_|_)

找不到它的定义(Google 不能很好地处理符号)。那到底是什么?

【问题讨论】:

  • 请记住,“底部”是一个广泛的概念 - 您发布的 ascii 是人们在讨论中使用的数学符号的表示,但它不是实际的 Haskell 代码。不要输入它并期望编译任何东西(使用undefinederror "Foo")。
  • @ThomasM.DuBuisson,我经常在我的代码周围抛出异常,所以如果这是底部的特定表示,那么我非常熟悉它。

标签: haskell


【解决方案1】:

来自here:-

底部

底部的数学符号是'⊥'。那是Unicode字符 22A5 十六进制 = 8869 十进制。也可以在 HTML 中作为 '⊥' 和 LaTeX 作为 '\bot'(在数学模式下)。在纯 ASCII 中,它经常被写成 作为极其丑陋的字符序列'_|_'

同样来自reserve keywords in Haskell

在维基上查看Bottom and Partial Functions

为了定义偏函数,我们引入一个特殊值⊥,命名为 底部,通常用打字机字体写成 |。我们说⊥是 完全“未定义”的值或函数。每个基本数据类型 like Integer or () 除了通常的元素外,还包含一个 ⊥。

更多描述在here:-

【讨论】:

  • 我对 Haskell 还是很陌生,这篇文章对我来说没有意义。这东西的实际应用是什么?
  • 上一篇文章看起来很喜庆,有颜色和星星,我一定会看的,谢谢
  • @AlekseyBykov 很好调试,bottom可以有任何类型,我经常用undefined让我“以后补坑”
  • @AlekseyBykov,从理论的角度来看,这主要是有用的。在类型系统中具有底部提供了很好的理论性质,例如归纳和共归纳类型的统一。但是,有时作为任何类型的一部分的值在实践中可能很有用。例如,当以“从上到下”的方式编程时,您可以使用 undefined(底部值的 Haskell 名称)编写函数存根。
  • @AlekseyBykov 在惰性语言中,您可能具有非常合理的值,例如 Cons _|_ (Cons 3 Nil),它提供了有关其值的部分信息。我们知道它是一个非空列表,我们知道第二个值是3,我们知道长度是 2。它只是显式检查第一个值导致我们“卡”在无限循环中。出于这个原因,_|_ 是推理程序的宝贵工具。
【解决方案2】:

需要明确的是,_|_ 不是 haskell 语法,“底部”是一个对语言设计者最有用的概念。正如上面的答案所引用的那样,我认为这样说是可疑的:

每一种基本数据类型,如 Integer 或 (),除了通常的元素外,还包含一个 ⊥。"

作为语言用户,我们 reason fast and loose 关于我们的代码,在我看来,⊥ 的概念属于不同的概念平面,我认为这就是您的困惑所在。

完全有可能在存在异常和无限循环的情况下学习 haskell 和推理代码,而不需要每种类型的特殊额外居民的概念。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 2011-11-13
    • 2014-03-31
    • 1970-01-01
    相关资源
    最近更新 更多