に要素を追加しますintlist内のすべての整数を追加すると、次のコードを試しました:標準ミリリットル、私は次のように定義、データ型がINTNESTと呼ばれ、標準的なMLの新しいデータ型のための機能を作りたいカスタムデータ型
fun addup (INT n) = n
| addup (LIST x::xs) = x + addup(xs);
私は間違っていますか?
EDIT:
Iは、以下を試してみました:最初のオプションは、そのint値を返し、addup(XS)はリターンへ再帰呼び出しであるよう
fun addup (INT n) = n
| addup (LIST x::xs) = addup(x) + addup(xs);
ように、xが型INTであります同じ第2の選択肢。
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
私はあなたを理解しませんでした、isn xs intnestのリストですか? –
@ aizen92はい、まさにその通りです。しかし、あなたが必要とするタイプは、「intnest」です。あなたの 'LIST'の場合は、' intnest list'を使って実装されますが、 'intnest list'ではありません。 'xs'と' LIST xs'の型を比較するのに役立ちます。 –
問題は、x :: xsの間の括弧で問題になっていましたが、それはなぜ、isnt x :: xsがリストであるとみなされているのかをよく理解していませんか? –