数据类型问题中的标准ml函数

时间:2010-02-05 12:32:37

标签: sml 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

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

1 个答案:

答案 0 :(得分:1)

此代码中存在许多问题。编译器抱怨的是你有一个函数定义

fn (f,x) => x

位于case手臂的左侧,只允许花样

其他一些问题:

  1. 冗余括号使代码难以阅读(advice is available删除它们。)
  2. 您的case表达式是多余的;在函数定义

     fun suc (P p) = ...
    

    应该可以在没有任何案例分析的情况下使用p进行计算。

  3. 由于P带有一个功能,如果你写的话,你可能会有更轻松的时间

     fun suc (P f) = ...
    

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