Стандартная функция мл в задаче типа данных - PullRequest
1 голос
/ 05 февраля 2010

Мне нужно создать функцию о числах Пеано, определенную как следующий тип данных:

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

Я не знаю, что я делаю неправильно. Пожалуйста, помогите!

1 Ответ

1 голос
/ 06 февраля 2010

В этом коде есть ряд проблем. Компилятор жалуется на то, что у вас есть определение функции

fn (f,x) => x

на левой стороне case плеча, где разрешены только рисунки .

Некоторые другие проблемы:

  1. Избыточные скобки затрудняют чтение кода ( имеется совет по их удалению).
  2. Ваше case выражение избыточно; в определении функции

     fun suc (P p) = ...
    

    должно быть возможно просто вычислить с p без дополнительного анализа случая.

  3. Поскольку P несет функцию, вам, вероятно, будет легче, если вы напишите

     fun suc (P f) = ...
    

    и убедитесь, что в результате к паре применяется f (как того требуют объявления типов данных).

...