常规的haskell代数数据类型等同于上下文无关语法? GADTS怎么样?

栏目: 编程语言 · 发布时间: 8年前

内容简介:代数数据类型的语法非常类似于http://stackoverflow.com/questions/26963911/are-regular-haskell-algebraic-data-types-equivalent-to-context-free-grammars-wh

代数数据类型的语法非常类似于 Backus–Naur Form 的语法,用于描述上下文无关的语法.这让我想到,如果我们将Haskell类型检查器视为语言的解析器,表示为代数数据类型(例如表示终端符号的nularry类型构造函数),则所接受的所有语言的集合与一套上下文免费语言?另外,有了这个解释,GADT接受什么样的正式语言呢?

首先,数据类型并不总是描述一组字符串(即语言).也就是说,虽然列表类型是,树类型不.有人可能反驳说,我们可以把树木变成列表,把它们当作他们的语言.然而,数据类型如何

data F = F Int (Int -> Int)

或者更糟

data R = R (R -> Int)

?

多项式类型(没有 – >内部的类型)粗略地描述了可以被平坦化(按顺序访问)的树,因此我们以这些为例.

正如你所观察到的那样,写一个CFG(多项式)类型很容易,因为你可以利用递归

data A = A1 Int A | A2 Int B
data B = B1 Int B Char | B2

以上A表示{Int ^ m Char ^ n | m> n}.

GADT远远超出了无上下文的语言.

data Z
data S n 

data ListN a n where
  L1 :: ListN a Z
  L2 :: a -> ListN a n -> ListN a (S n)

data A
data B
data C

data ABC where
   ABC :: ListN A n -> ListN B n -> ListN C n -> ABC

ABC上面表示(不变)语言A ^ n B ^ n C ^ n,这不是上下文的.

您几乎不受GADTs限制,因为它们可以很容易地编码算术.

那就是你可以建立一个类型加一个b c,它是非空的,如果c = a与Peano

土黄.你也可以建立一个类型Halt n m,如果是图灵机m,它是非空的

停止输入m.所以,你可以建立一种语言

{ A^n B^m proof | n halts on m , and proof proves it }

这是递归的(而不是在任何更简单的类,大致).

目前,我不知道您是否可以在GADT中描述递归枚举(可计算枚举)的语言.即使在停止问题的例子中,我必须包括“证明”一词

在GADT内部使其工作.

直观地说,如果你有一个长度为n的字符串,并且你想要检查一个对GADT,你可以

构建所有GADT术语的深度n,展平它们,然后与字符串进行比较.这应该

证明这种语言总是递归的.然而,存在类型使这个树构建

方法很棘手,所以我现在没有确定的答案.

http://stackoverflow.com/questions/26963911/are-regular-haskell-algebraic-data-types-equivalent-to-context-free-grammars-wh


以上所述就是小编给大家介绍的《常规的haskell代数数据类型等同于上下文无关语法? GADTS怎么样?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。

数学拾遗

数学拾遗

加黑蒂 / 清华大学出版社 / 2004-8 / 49.00元

Beginning graduate students in mathematics and other quantitative subjects are expected to have a daunting breadth of mathematical knowledge ,but few have such a backgroud .This book will help stedent......一起来看看 《数学拾遗》 这本书的介绍吧!

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具