首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SML错误:运算符和操作数不一致[类型错配]

SML错误:运算符和操作数不一致[类型错配]
EN

Stack Overflow用户
提问于 2017-09-02 03:17:37
回答 1查看 1.7K关注 0票数 1

我对SML并不熟悉,也不太理解我的问题,尽管我确信我是错的。首先,这里是两个简短的功能,我正在测试和他们的描述。

MakeInterval -取自然数r(也用于rp)和自然数t,并返回间隔t-r,t+r。

代码语言:javascript
复制
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函数的映射的数字列表。

代码语言:javascript
复制
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时收到的错误

代码语言:javascript
复制
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)

我尝试手动指定所有类型,但都没有效果。所有的事情对我来说都是合乎逻辑的,但很明显,这里有一个语法问题,我没有遵循。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-02 04:07:24

上面提到的问题是对map的调用,函数被匆忙调用。

代码语言:javascript
复制
map : ('a -> 'b) -> 'a list -> 'b list;

因此,对括号的一个小改动:

代码语言:javascript
复制
fun NotDivisible(r, ts1, ts2) = map (fn x => MakeInterval(r,r,x)) ts1;

给你:

代码语言:javascript
复制
val NotDivisible = fn : int * int list * 'a -> int list list
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46010138

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档