You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SML中传递NONE或SOME作为函数参数出现类型不匹配如何解决?

问题根源

该类型不匹配错误与f参数是否为可选参数无关,核心原因是SML要求同一个函数的所有分支返回值类型必须完全一致:

  • 代码后三个分支返回值为NONE,属于**'a option类型**
  • 第一个分支直接返回f x y,传入的add函数返回值为int类型,不属于option类型,因此类型推断失败

删除其他分支后,函数仅存在返回f x y的分支,返回值类型与add的int类型匹配,因此可以正常运行。

修复方案

最合理的修改是调整第一个分支的返回值,将f x y的执行结果用SOME包裹,保证所有分支都返回option类型:

fun fx (SOME x) (SOME y) f = SOME (f x y)
    | fx (SOME x) (NONE) f = NONE
    | fx (NONE) (SOME y) f = NONE
    | fx (NONE) (NONE) f = NONE;

fun add x y = x + y;

fx (SOME 2) (SOME 4) add;

修改后执行上述代码会得到结果SOME 6,符合「仅两个输入都不为NONE时才执行运算」的预期逻辑。

内容的提问来源于stack exchange,提问作者akhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 20:15:04