1

次のデータ型として定義されたペアノ番号に関する関数を作成する必要があります。

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 に答える