【发布时间】:2025-12-24 12:50:15
【问题描述】:
我刚刚开始使用 SML,但在尝试将 NONE/SOME 作为参数传递给函数时遇到了麻烦。
fun fx (SOME x) (SOME y) f = 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;
我要做的是仅当两个数字都不是 NONE 时才添加两个数字。但我收到以下错误:
Error: operator and operand do not agree [tycon mismatch]
operator domain: int -> int -> 'Z option
operand: int -> int -> int
in expression:
((fx (SOME 2)) (SOME 4)) add
如果去掉 NONE 的情况,即:
fun fx (SOME x) (SOME y) f = f x y
然后它工作正常。我不知道我到底在哪里犯了错误。 f 参数不是可选的,但它被视为一个。
【问题讨论】:
-
重新定义
fun add x y = SOME (x + y);怎么样? -
add 只是一个例子,fx 对于任何需要两个操作数(加、乘等)的函数都是通用的
标签: smlnj