如果你也在 怎样代写Haskell这个学科遇到相关的难题,请随时右上角联系我们的24/7代写客服。Haskell是一种通用的、静态类型的、纯函数式的编程语言,具有类型推理和懒惰评估的功能。Haskell的主要实现是Glasgow Haskell编译器(GHC)。它是以逻辑学家Haskell Curry的名字命名的。
Haskell的语义在历史上是以Miranda编程语言为基础的,Miranda编程语言是最初Haskell工作组的工作重点。该语言的最后一个正式规范是在2010年7月制定的,而GHC的发展通过语言扩展扩展了Haskell。下一个正式规范计划在2020年制定。2021年10月29日,GHC2021在GHC 9.2.1版本中发布。Haskell被用于学术界和工业界。截至2021年5月,Haskell是谷歌搜索教程的第28位最受欢迎的编程语言,在GitHub源代码库的活跃用户中占不到1%。
my-assignmentexpert™ Haskell作业代写,免费提交作业要求, 满意后付款,成绩80\%以下全额退款,安全省心无顾虑。专业硕 博写手团队,所有订单可靠准时,保证 100% 原创。my-assignmentexpert™, 最高质量的Haskell作业代写,服务覆盖北美、欧洲、澳洲等 国家。 在代写价格方面,考虑到同学们的经济条件,在保障代写质量的前提下,我们为客户提供最合理的价格。 由于统计Statistics作业种类很多,同时其中的大部分作业在字数上都没有具体要求,因此Haskell作业代写的价格不固定。通常在经济学专家查看完作业要求之后会给出报价。作业难度和截止日期对价格也有很大的影响。
想知道您作业确定的价格吗? 免费下单以相关学科的专家能了解具体的要求之后在1-3个小时就提出价格。专家的 报价比上列的价格能便宜好几倍。
my-assignmentexpert™ 为您的留学生涯保驾护航 在cs作业代写方面已经树立了自己的口碑, 保证靠谱, 高质且原创的Haskell代写服务。我们的专家在cs代写方面经验极为丰富,各种Haskell相关的作业也就用不着 说。
我们提供的Haskell及其相关学科的代写,服务范围广, 其中包括但不限于:
cs代写|Haskell作业代写Haskell代考|The parser type
In Haskell, a parser can naturally be viewed directly as a function that takes a string and produces a tree. Hence, given a suitable type Tree of trees, the notion of a parser can be represented as a function of type String $\rightarrow$ Tree, which we abbreviate as Parser using the following declaration:
type Parser $=$ String $\rightarrow$ Tree
In general, however, a parser might not always consume its entire argument string. For example, a parser for numbers might be applied to a string comprising a number followed by a word. For this reason, we generalise our type for parsers to also return any unconsumed part of the argument string:
$$
\text { type Parser }=\text { String } \rightarrow(\text { Tree, String })
$$
Similarly, a parser might not always succeed. For example, a parser for numbers might be applied to a string comprising a word. To handle this, we further generalise our type for parsers to return a list of results, with the convention that the empty list denotes failure, and a singleton list denotes success:
$$
\text { type } \text { Parser }=\text { String } \rightarrow[(\text { Tree, String })]
$$
Returning a list also opens up the possibility of returning more than one result if the argument string can be parsed in more than one way. For simplicity, however, we only consider parsers that return at most one result.
Finally, different parsers will likely return different kinds of trees, or more generally, any kind of value. For example, a parser for numbers might return an integer value. Hence, it is useful to abstract from the specific type Tree of result values, and make this into a parameter of the Parser type:
$$
\text { type Parser } a=\text { String } \rightarrow[(a, \text { String })]
$$
In summary, this declaration states that a parser of type $a$ is a function that takes an input string and produces a list of results, each of which is a pair comprising a result value of type $a$ and an output string. Alternatively, the parser type can also be read as a rhyme in the style of Dr Seuss!
cs代写|Haskell作业代写Haskell代考|Choice
Another natural way of combining two parsers is to apply the first parser to the input string, and if this fails then apply the second instead. Such a choice operator +H+ (read as “or else”) can be defined as follows:
$(++) \quad:: \quad$ Parser $a \rightarrow$ Parser $a \rightarrow$ Parser $a$
$p++q=\lambda$ inp $\rightarrow$ case parse $p$ inp of
[] $\rightarrow$ parse $q$ inp
$[(v$, out $)] \rightarrow[(v$, out $)]$
For example:
$$
\begin{aligned}
&>\text { parse (item }++\text { return ‘d’) “abc” } \
&{[(‘ \mathrm{a} \text { ‘, “bc”)] }}
\end{aligned}
$$
$$
\begin{aligned}
&>\text { parse (failure }++\text { return ‘d’) “abc” } \
&{[(\text { ‘d’, “abc”)] }} \
&>\text { parse (failure }+++\text { failure) “abc” }
\end{aligned}
$$
cs代写|Haskell作业代写Haskell代考|Derived primitives
Using the three basic parsers together with sequencing and choice, we can now define a number of other useful parsing primitives. First of all, we define a parser sat $p$ for single characters that satisfy the predicate $p$ :
$$
\begin{array}{ll}
\text { sat } \quad: & (\text { Char } \rightarrow \text { Bool }) \rightarrow \text { Parser Char } \
\text { sat } p= & \text { do } x \leftarrow \text { item } \
& \text { if } p x \text { then return } x \text { else failure }
\end{array}
$$
HASKELL作业代写
CS代写|HASKELL作业代写HASKELL代考|THE PARSER TYPE
在 Haskell 中,解析器自然可以直接被视为一个接受字符串并生成树的函数。因此,给定一个合适的 Tree of trees,解析器的概念可以表示为 String 类型的函数→树,我们使用以下声明将其缩写为 Parser:
type Parser=细绳→然而
,一般来说,解析器可能并不总是使用它的整个参数字符串。例如,数字解析器可能应用于包含数字后跟单词的字符串。出于这个原因,我们将我们的类型泛化为解析器也返回参数字符串的任何未使用部分:
类型解析器 = 细绳 →( 树,字符串 )
同样,解析器可能并不总是成功。例如,数字解析器可能应用于包含单词的字符串。为了处理这个问题,我们进一步推广我们的类型,让解析器返回一个结果列表,约定空列表表示失败,单例列表表示成功:
类型 解析器 = 细绳 →[( 树,字符串 )]
如果可以以多种方式解析参数字符串,则返回列表也打开了返回多个结果的可能性。然而,为了简单起见,我们只考虑最多返回一个结果的解析器。
最后,不同的解析器可能会返回不同种类的树,或者更一般地说,任何类型的值。例如,数字解析器可能会返回一个整数值。因此,从结果值的特定类型树中抽象出来,并将其作为 Parser 类型的参数是有用的:
类型解析器 一种= 细绳 →[(一种, 细绳 )]
总之,这个声明声明了一个类型的解析器一种是一个函数,它接受一个输入字符串并生成一个结果列表,每个结果都是一个包含类型结果值的对一种和一个输出字符串。或者,解析器类型也可以读作 Dr Seuss 风格的韵律!
CS代写|HASKELL作业代写HASKELL代考|CHOICE
组合两个解析器的另一种自然方法是将第一个解析器应用于输入字符串,如果失败,则应用第二个。这样的选择运算符 +H+r和一种d一种s“这r和ls和”可以定义如下:
$(++) \quad:: \quad$ Parser $a \rightarrow$ Parser $a \rightarrow$ Parser $a$
$p++q=\lambda$ inp $\rightarrow$ case parse $p$ inp of
[] $\rightarrow$ parse $q$ inp
$[(v$, out $)] \rightarrow[(v$, out $)]$
例如:
$$
\begin{aligned}
&>\text { parse (item }++\text { return ‘d’) “abc” } \
&{[(‘ \mathrm{a} \text { ‘, “bc”)] }}
\end{aligned}
$$
$$
\begin{aligned}
&>\text { parse (failure }++\text { return ‘d’) “abc” } \
&{[(\text { ‘d’, “abc”)] }} \
&>\text { parse (failure }+++\text { failure) “abc” }
\end{aligned}
$$
CS代写|HASKELL作业代写HASKELL代考|DERIVED PRIMITIVES
使用三个基本解析器以及排序和选择,我们现在可以定义许多其他有用的解析原语。首先,我们定义一个解析器 satp对于满足谓词的单个字符p :
$$
\begin{array}{ll}
\text { sat } \quad: & (\text { Char } \rightarrow \text { Bool }) \rightarrow \text { Parser Char } \
\text { sat } p= & \text { do } x \leftarrow \text { item } \
& \text { if } p x \text { then return } x \text { else failure }
\end{array}
$$
cs代写|Haskell作业代写Haskell代考 请认准UprivateTA™. UprivateTA™为您的留学生涯保驾护航。