我正在写一个仿函数来实现标准ML中的集合。由于集合不允许重复,我不希望它被限制在平等类型,它的声明如下: signature SET = sig
type t
type 'a set
val add : t -> t set -> t set
...
end
functor ListSet (EQ : sig type t val equal : t
我实现套标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 -> bool end)
在ML语言 假设f(x,y,z)是一个函数。给出一个f的定义的例子,它会导致f的参数具有类型:a’ * a’ * int。 示例代码 fun f1 (x,y,z) = z<5 ;
val f1 = fn : 'a * 'b * int -> bool
我如何改变这种VAL到a’ * a’ * int -> bool?
ML族语言具有自动压缩功能 - 其中带有两个参数的函数调用被认为一次应用一个参数,f x y = (f x) y - 而其他语言族没有。 这仅仅是一次历史性的事故,还是有技术上的原因呢? 请注意,我是而不是问自动卷曲是净是好还是坏(这是一种主观判断)。我在问,它是否与ML家族语言的其他功能产生协同作用,从而使其更加自然地包含在这些语言中,如果是这样,这些功能是什么以及协同的性质是什么?或者相反,其
我想编写一个类似的集合如下。 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
我需要限制元件在“的一组类型是可比较:(存在与类型的函数:'a
我想编写一个样本函数,该函数接受任何类型的列表,并且仅当列表是一个实数列表时才返回头元素。 否则,函数应该给出错误信息 。 。 。 E r r o r:操作符和操作数不是。 。 。 datatype typeR = Real of real
fun head(xs) =
case xs of
[] => raise List.Empty |
Real (x::
那些返回类型的区别是什么? 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 arithmetic_exp
| Add of (ari
SML函数图采用函数和列表,并将函数应用于列表元素。 函数图具有以下类型,它既是多态函数又是高阶函数。 fun map f [] = [] | map f (x::xs) = (f x)::(map f xs)
val it = fn : (’a -> ’b) -> ’a list -> ’b list
收件另一功能MyMap中采用两个函数f和g和2-元件的元组的列表。 它在元组的第一个元素