datatype 'a Multilist =
Node of 'a list
| List of 'a Multilist list;
fun isGreaterThen x y = y > x;
fun multiFilter f (List([])) = []
| multiFilter f (List(m::multil)) =
let fun flattenAuxiliray(Node(value)) =
if (f value = true) then (value) else nil
| flattenAuxiliray((List(nil))) = nil
| flattenAuxiliray(List(m::mlist1)) = (flattenAuxiliray(m)) @
(flattenAuxiliray((List(mlist1))))
in (flattenAuxiliray(m)) @ (multiFilter f (List(multil)))
end;
我得到错误此输入:我怎么能在ML
val l = List [Node [3,5,18], Node [7]];
multiFilter (isGreaterThen 6) l;
stdIn:7.1-8.46 Error: operator and operand don't agree [tycon mismatch]
operator domain: ('Z list -> bool) * 'Z list Multilist
operand: (int -> bool) * int list Multilist
in expression:
multiFilter (isGreaterThen 6,List (Node <exp> :: <exp> :: <exp>))
输出:
val it = [18,7] : int list
我无法更改isGreaterThan和数据类型 – alex