我对SML并不熟悉,也不太理解我的问题,尽管我确信我是错的。首先,这里是两个简短的功能,我正在测试和他们的描述。
MakeInterval -取自然数r(也用于rp)和自然数t,并返回间隔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)将返回7,8,9,10,11,12,13。如果你有去除rp的建议,请告诉我。这是我唯一能想到的方法,在保持排序顺序的同时跟踪r的原始值。
NotDivisible --获取自然数r、自然数ts1列表和自然数ts2列表。还没有编写使用ts2的代码。
R指定区间的下界和上界(与MakeInterval相同),而ts1是要输入带有MakeInterval函数的映射的数字列表。
fun NotDivisible(r, ts1, ts2) =
map (fn x => MakeInterval(r,r,x), ts1);这个函数应该返回一个间隔列表。例如,NotDivisible(3,10,20,30,2,4,6)将返回(目前)[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)我尝试手动指定所有类型,但都没有效果。所有的事情对我来说都是合乎逻辑的,但很明显,这里有一个语法问题,我没有遵循。
发布于 2017-09-02 04:07:24
上面提到的问题是对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 listhttps://stackoverflow.com/questions/46010138
复制相似问题