我是SML的新手。我尝试在下面创建并测试以下函数,但是我收到了一个错误。我不知道是什么问题。
fun isOld(pFirstTuple: int*int*int, pSecondTuple: int*int*int) =
if (#1 pFirstTuple) < (#1 pSecondTuple)
then
true
if (#1 pFirstTuple) = (#1 pSecondTuple)
then
if (#2 pFirstTuple) < (#2 pSecondTuple)
then
true
else
false
我已尝试过此命令&#34; val p = isOld((8,9,10),(10,11,12))&#34;,但它显示以下错误未绑定变量或构造函数。我该如何解决这个问题?
答案 0 :(得分:1)
以下是您的代码的样子,通过忽略各种子表达式(用A
,B
和C
替换它们来删除)
if A
then true
if B
then if C
then true
else false
您正在广泛使用if
/ then
/ else
,但语法不太正确。在SML中,每个if
必须同时包含then
和 else
子句。这是我对你的真实含义的猜测:
if A
then true
else if B
then if C
then true
else false
else false
这开始变得非常混乱---但你可以用布尔逻辑来清理它。请注意,例如,if X then true else false
与简单地编写X
完全相同,因为两个表达式都是bool
类型,并且总是计算为相同的布尔值,而不管{{1}是的。您可以扩展此推理以查看
X
相当于if X then true else Y
。X orelse Y
相当于if X then Y else false
。有了这些想法,我们可以大大清理你的代码:
X andalso Y