【发布时间】:2021-11-24 01:59:33
【问题描述】:
对于这样的 2 种数据类型。
datatype flight = F of int * int;
datatype flights = Fs of flight list;
我想做一个函数来检查 (a,b) 是否在飞行中。
例子:
val reachable = fn : flights * (int * int) -> bool
reachable (Fs [F(0,1), F(1,0)], (0, 1));
val it = true : bool
我不知道如何将 (int*int) 与航班进行比较。
我用
fun get_f_x (F(x,y)) = x;
获取飞行中的第一个整数。
但是当我尝试对航班做同样的事情时。
我这样做如下:
fun test_hd(Fs[i,_]) = i;
为了让第一个航班起飞。 但它只能乘坐只有2个航班的航班(Fs [F(0,1),F(1,0)]) 如果航班有超过 2 个元素,则会显示错误。
同样
fun test_tl(Fs[_,i]) = i;
有同样的问题。
如何为航班制作高清和 tl?或者思考这个问题的正确方法是什么?
【问题讨论】:
-
在模式中使用
[和]指定的列表是为了精确匹配。例如,F[x]之类的模式将匹配恰好包含 1 个元素的列表,F[x, y]将匹配恰好包含 2 个元素的列表,依此类推。但是,我们可以使用F(x::ys)构造指定一个模式来匹配任何列表,Empty列表除外。
标签: smlnj