我正在寫一個仿函數來實現標準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-元件的元組的列表。 它在元組的第一個元素