質問

私はMLを初めて使用しており、単純な機能を試していますが、実際の数で機能する機能を獲得しようとするのに苦労しています。たとえば、この逆機能....

    fun reverse (nil) = nil
      | reverse (x::xs) = if xs = nil then [x]
                         else (reverse xs) @ [x];

整数と文字列のプロッパー出力を取得します。

    - reverse [1,2,3,4];
    val it = [4,3,2,1] : int list
    - reverse ["a" , "b" , "c" , "d" ];
    val it = ["d","c","b","a"] : string list

この機能が実際の数で機能しない理由を誰かが私に説明できますか?

これが私が本物を試してみるときの出力です...

    - reverse [1.0, 2.0];
    stdIn:1.2-53.9 Error: operator and operand don't agree [equality type required]
      operator domain: ''Z list
      operand:         real list
      in expression:
        reverse (1.0 :: 2.0 :: nil)
役に立ちましたか?

解決

real MLの平等タイプではないため、から構築された多型タイプもありません realS-特に、 real listSは平等タイプではないため、オペレーターを使用できません = 2つを比較します real listS、これらのリストが空であっても。代わりに、一致する必要があります。例えば、

fun reverse [] = []
  | reverse (x::xs) = (reverse xs) @ [x]

また

fun reverse [] = []
  | reverse (x::xs) = case xs of
                           [] => [x]
                         | _ => (reverse xs) @ [x]

品質のないタイプでも機能します。

(または、組み込まれた関数を使用します List.rev.)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top