SML関数マップは関数とリストを取り、その関数をリストの要素に適用します。 関数マップは、次の型を持ちますが、多形性関数と高次関数の両方です。 fun map f [] = [] | map f (x::xs) = (f x)::(map f xs)
val it = fn : (’a -> ’b) -> ’a list -> ’b list
2つの関数fとgと2要素タプルのリストを取る別の
標準MLにセットを実装しています。現在、それは次のようになります。 signature SET = sig
type t
type 'a set
...
val map : ('a -> t) -> 'a set -> t set
end
functor ListSetFn (EQ : sig type t val equal : t * t -> b
ML言語で と仮定f(x,y,z)機能です。 fの引数の型がa’ * a’ * intであるfの定義の例を挙げてください。 サンプルコード私はa’ * a’ * int -> boolにこのヴァルをどのように変化するか fun f1 (x,y,z) = z<5 ;
val f1 = fn : 'a * 'b * int -> bool
?
以下の比較セットを書いてみたいと思います。 signature COMPARABLE_SET=
sig
type 'a set
val empty: 'a set
val insert: 'a * 'a set -> 'a set
val member: 'a * 'a set -> bool
end
Iは匹敵するセットタイプ」の要素を限定する必要が
任意のタイプのリストを取り、リストが実数のリストである場合にのみhead要素を返すサンプル関数を書きたいと思います。 これ以外の場合は、エラーメッセージ が表示されます。 。 。オペレーターとオペランドはありません。 。 。 datatype typeR = Real of real
fun head(xs) =
case xs of
[] => raise List.Em
これらの戻り値の型違いは何ですか? val fn1 : int −> (int −> (int −> int))
val fn2: (int −> int) −> (int −> int)
これはタイプ int -> int -> int meaning int -> (int -> int)
の関数を作成し、その右にありますか?彼らはブラケットなしで同じ意味を持っています!
これは、MLファミリのような関数型言語の静的型システムについてのより柔らかい質問です。私は、リストやツリーのようなデータ構造を記述するためにデータ型が必要な理由を理解していますが、データ型内の命題論理のような "式"を定義するのはちょっとした便利さをもたらします。例えば datatype arithmetic_exp = Constant of int
| Neg of ari