数据类型问题中的标准 ml 函数
我必须创建一个有关 peano 数的函数,定义为以下数据类型:
datatype 'a peano = P of ('a -> 'a) * 'a -> 'a
val zero = P(fn (f, x) => x)
我必须实现的函数查找 peano 参数 P(p)
的连续 peano 数。这就是我所写的:
fun suc (P(p)) = case P(p) of P(fn(f,x)=>x) => P(fn(f,x)=>f(x));
问题是我收到这些错误:
stdIn:4.33-4.36 Error: syntax error: deleting FN LPAREN
stdIn:4.43 Error: syntax error found at RPAREN
我不知道我做错了什么。请帮忙!
I have to create a function about peano numbers defined as the following datatype:
datatype 'a peano = P of ('a -> 'a) * 'a -> 'a
val zero = P(fn (f, x) => x)
The function that I have to implement finds the succesive peano number of the peano parameter P(p)
. This is what I have written:
fun suc (P(p)) = case P(p) of P(fn(f,x)=>x) => P(fn(f,x)=>f(x));
The problem is that i get these errors:
stdIn:4.33-4.36 Error: syntax error: deleting FN LPAREN
stdIn:4.43 Error: syntax error found at RPAREN
I don't know what Im doing wrong. Please help!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这段代码有很多问题。编译器抱怨的问题是,您
在
case
臂的左侧有一个函数定义,其中只允许使用模式。其他一些问题:
您的
case
表达式是多余的;在函数定义中应该可以仅使用
p
进行计算,而无需进行任何案例分析。由于
P
带有一个函数,如果你这样写,可能会更容易并确保在结果中,
f
应用于一对(根据数据类型声明的要求)。There are a number of problems in this code. The one the compiler is whining about is that you have a function definition
on the left-hand side of a
case
arm, where only patterns are permitted.Some other problems:
Your
case
expression is redundant; in the function definitionit should be possible just to compute with
p
without any more case analysis.Since
P
carries a function, you will probably have an easier time if you writeand make sure that in the result,
f
is applied to a pair (as required by the datatype declarations).