总结两个部分我有一个定义的数据类型 datatype expression = Constant of int
| Variable of string
| Operator of string * expression
| Pair of expression list
| List of expression list
比方说,我有以下的树数据类型: datatype 'a tree = Empty | Node of 'a * 'a tree * 'a tree;
val x = Node(10, Node(20, Empty, Empty), Node(30, Empty, Empty));
这里,x是int类型树的变量。我想知道的是如何解析和评估树的不同部分只有变量x? 例如,在此功能: fun ad
我感到有点糊涂了“匹配冗余”的错误运行下面的代码时,我得到: datatype expression = Constant of int |
Variable of string |
Operator of string * expression |
Pair of expression list |
List of expression l
我知道我可以这样写SML中的y-combinator,如下所示: 首先声明一个新的数据类型来绕过由于圆形造成的类型不匹配。 datatype 'a mu = Roll of ('a mu -> 'a)
val unroll = fn Roll x => x
现在您可以轻松定义的Y组合子: val Y = fn f => (fn x => fn a => f (unroll x x) a)
没有使用大小写表达式(在类的下一节出现),我看不出为什么以下不做快速排序。它在某个地方进入循环,永远不会结束。 splitAt和append已经过测试,但这里是他们的代码。 fun append(xs, ys) =
if null xs
then ys
else (hd xs) :: append(tl xs, ys)
fun splitAt(xs : int list, x : int
我有2个列表。它们的长度总是相同,可能看起来就像这个玩具的例子。实际的内容是不可预测的。 val original = [1, 2, 0, 1, 1, 2]
val elements = ["a","b","c","d","e","f"]
我想创建以下列表: val mappedList = [["c"],["a","d","e"],["b","f"]]
0 1 2