Я хочу создать функцию для нового типа данных в Standard ML, тип данных называется intnest, определяемый следующим образом:
datatype intnest =
INT of int
| LIST of intnest list;
, и я хочу создать функцию, которая добавляет все целые числа вВ интлисте я попробовал следующий код:
fun addup (INT n) = n
| addup (LIST x::xs) = x + addup(xs);
Что я делаю не так?
РЕДАКТИРОВАТЬ:
Я также попробовал следующее:
fun addup (INT n) = n
| addup (LIST x::xs) = addup(x) + addup(xs);
, так что x имеет тип INT, поэтому первый параметр возвращает его значение int, а addup (xs) - это рекурсивный вызов для возврата того же второго параметра.
Также пробовал следующее:
fun addup (INT n) = n
| addup (LIST []) = 0
| addup (LIST x::xs) = addup(x) + addup(LIST xs);
но я получаю следующую ошибку:
stdIn:146.4-151.50 Error: parameter or result constraints of clauses don't agree [tycon mismatch]
this clause: intnest list -> 'Z
previous clauses: intnest -> 'Z
in declaration:
addup =
(fn INT n => n
| LIST nil => 0
| :: (<pat>,<pat>) => addup <exp> + addup <exp>)
stdIn:151.25-151.50 Error: operator and operand don't agree [tycon mismatch]
operator domain: intnest
operand: intnest list
in expression:
addup x