SML函数调用不会将参数解析为参数

时间:2009-04-17 04:34:22

标签: sml smlnj

我在调用SML函数时遇到了似乎是一个优先问题,替换:

fun substitute v new (typevar q) = ...

我从另一个函数中调用它:

fun new_type_vars (typevar v) non_gens = 
                   substitute v new_var() (typevar v)

但是我收到了一个错误:

    C:/sml/type_checker.sml:22.48-23.44 Error: operator and operand don't agree [tycon mismatch]
      operator domain: type_exp
      operand:         unit -> string
      in expression:
        (substitute v) new_var

这似乎表明它正在尝试调用(替换v),然后使用参数new_var调用该调用的结果。

我尝试在整个事情周围添加括号,但这没有帮助,当我在(v new_var...)这样的参数周围添加括号时,它认为v是new_var上的函数应用程序。这个函数调用发生了什么?

2 个答案:

答案 0 :(得分:1)

我不明白所有事情,因为你没有给出所有类型的不同操作和变量。

但是你已经猜到的一般问题就是你已经猜到,SML从左侧执行函数调用(并绑定变量)。这是一个例子:

fun f a:int b:int c:string = ...
因此,

f是int - >类型的函数。 int - > string - > ...并隐式添加括号fun(((f a:int)b:int)c:int)= ...

这意味着您可以使用它,例如:

var f2 = f 3;

f2现在的类型为int - > string - > ...

答案 1 :(得分:1)

您可能想要更改

substitute v new_var() (typevar v)

substitute v (new_var()) (typevar v)

(布塔的答案解释了原因。)