SML Error: operator and operand don't agree [tycon mismatch]
SML Error: operator and operand don't agree [tycon mismatch]
我是 SML 的新手,不太了解我的问题,但我确定我有错。首先,这是我正在测试的两个简短函数及其描述。
MakeInterval - 取一个自然数 r,(也用于 rp)和一个自然数 t,returns 区间 [t-r,t+r].
fun MakeInterval(r,rp,t) =
if r + rp < 0 then []
else t-r :: MakeInterval(r-1,rp,t);
例如MakeInterval(3,3,10) 将 return [7,8,9,10,11,12,13]。如果您有摆脱 rp 的建议,请告诉我。这是我能想到的在保持排序顺序的同时跟踪 r 的原始值的唯一方法。
NotDivisible - 采用自然数 r,自然数列表 ts1 和另一个自然数列表ts2。使用 ts2 的代码尚未编写。
r指定区间的下限和上限,(与MakeInterval相同),ts1是一个数字列表使用 MakeInterval 函数输入 map。
fun NotDivisible(r, ts1, ts2) =
map (fn x => MakeInterval(r,r,x), ts1);
这个函数应该return一个区间列表。例如。不可分割(3,[10,20,30],
[2,4,6]) 将 return(目前)[[7..13], [17..23], [27..33]].
完成这项工作后,我将开始处理这些列表,找出这些区间中的哪些数字不能被 ts2.
中的任何数字整除
但就目前而言,我的问题在于我拥有的函数定义。 MakeInterval 的定义没有问题,我已经对其进行了测试。这是我在尝试定义 NotDivisible:
时收到的错误
stdIn:5.33-5.71 Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z -> 'Y
operand: (int -> int list) * 'X
in expression:
map ((fn x => MakeInterval <exp>),ts1)
我试过手动指定所有类型都无济于事。从逻辑上讲,一切对我来说都是有意义的,但显然这里有一个我没有理解的语法问题。
上面的问题是map的调用,函数是柯里化的
map : ('a -> 'b) -> 'a list -> 'b list;
所以,对括号做一点小改动:
fun NotDivisible(r, ts1, ts2) = map (fn x => MakeInterval(r,r,x)) ts1;
给你:
val NotDivisible = fn : int * int list * 'a -> int list list
我是 SML 的新手,不太了解我的问题,但我确定我有错。首先,这是我正在测试的两个简短函数及其描述。
MakeInterval - 取一个自然数 r,(也用于 rp)和一个自然数 t,returns 区间 [t-r,t+r].
fun MakeInterval(r,rp,t) =
if r + rp < 0 then []
else t-r :: MakeInterval(r-1,rp,t);
例如MakeInterval(3,3,10) 将 return [7,8,9,10,11,12,13]。如果您有摆脱 rp 的建议,请告诉我。这是我能想到的在保持排序顺序的同时跟踪 r 的原始值的唯一方法。
NotDivisible - 采用自然数 r,自然数列表 ts1 和另一个自然数列表ts2。使用 ts2 的代码尚未编写。
r指定区间的下限和上限,(与MakeInterval相同),ts1是一个数字列表使用 MakeInterval 函数输入 map。
fun NotDivisible(r, ts1, ts2) =
map (fn x => MakeInterval(r,r,x), ts1);
这个函数应该return一个区间列表。例如。不可分割(3,[10,20,30], [2,4,6]) 将 return(目前)[[7..13], [17..23], [27..33]].
完成这项工作后,我将开始处理这些列表,找出这些区间中的哪些数字不能被 ts2.
中的任何数字整除但就目前而言,我的问题在于我拥有的函数定义。 MakeInterval 的定义没有问题,我已经对其进行了测试。这是我在尝试定义 NotDivisible:
时收到的错误stdIn:5.33-5.71 Error: operator and operand don't agree [tycon mismatch]
operator domain: 'Z -> 'Y
operand: (int -> int list) * 'X
in expression:
map ((fn x => MakeInterval <exp>),ts1)
我试过手动指定所有类型都无济于事。从逻辑上讲,一切对我来说都是有意义的,但显然这里有一个我没有理解的语法问题。
上面的问题是map的调用,函数是柯里化的
map : ('a -> 'b) -> 'a list -> 'b list;
所以,对括号做一点小改动:
fun NotDivisible(r, ts1, ts2) = map (fn x => MakeInterval(r,r,x)) ts1;
给你:
val NotDivisible = fn : int * int list * 'a -> int list list