1

我必须创建一个关于定义为以下数据类型的 peano 数字的函数:

datatype 'a peano = P of ('a -> 'a) * 'a -> 'a
val zero = P(fn (f, x) => x)

我必须实现的函数查找 peano 参数的连续 peano 编号P(p)。这是我写的:

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

我不知道我做错了什么。请帮忙!

4

1 回答 1

1

这段代码有很多问题。编译器抱怨的是你有一个函数定义

fn (f,x) => x

在手臂的左侧case,只允许使用图案

其他一些问题:

  1. 多余的括号使代码难以阅读(可提供删除它们的建议)。
  2. 你的case表达是多余的;在函数定义中

     fun suc (P p) = ...
    

    应该可以在p没有更多案例分析的情况下进行计算。

  3. 由于P带有一个功能,如果您编写,您可能会更轻松

     fun suc (P f) = ...
    

    并确保在结果中,f应用于一对(根据数据类型声明的要求)。

于 2010-02-05T23:16:39.110 回答