Sml 标准ML错误:运算符和操作数don';我不同意

Sml 标准ML错误:运算符和操作数don';我不同意,sml,Sml,我想在求和之前写一个函数number\u,它接受一个名为sum的int,并返回一个int n,使得列表的前n个元素相加小于sum,但列表的前n+1个元素相加为sum或更多。 这是我的密码 fun number_before_reaching_sum(sum:int,lists:int list)= let val sum_list=0 val n=0 in let fun list_compute(sum_list:int,lists2:int list,n:int)=

我想在求和之前写一个函数
number\u,它接受一个名为sum的int,并返回一个int n,使得列表的前n个元素相加小于sum,但列表的前n+1个元素相加为sum或更多。
这是我的密码

 fun number_before_reaching_sum(sum:int,lists:int list)=
 let
 val sum_list=0
 val n=0
 in
     let fun list_compute(sum_list:int,lists2:int list,n:int)=
           let val sum_list2=sum_list+(hd lists2)
           in if sum_list2>=sum
                  then (sum_list2,n+1)
              else (#1 list_compute(sum_list2,tl lists2,n+1),#2 list_compute(sum_list2,tl lists2,n+1))
               end
     in   #2 list_compute(sum_list,lists,n)
     end
 end
错误消息将打印出来:

    hw1_1.sml:67.14-67.97 Error: operator and operand don't agree [type mismatch]
  operator domain: {1:'Y; 'Z}
  operand:         int * int list * int -> 'X
  in expression:
    (fn {1=1,...} => 1) list_compute
hw1_1.sml:67.14-67.97 Error: operator and operand don't agree [type mismatch]
  operator domain: {2:'Y; 'Z}
  operand:         int * int list * int -> 'X
  in expression:
    (fn {2=2,...} => 2) list_compute
hw1_1.sml:69.11-69.44 Error: operator and operand don't agree [type mismatch]
  operator domain: {2:'Y; 'Z}
  operand:         int * int list * int -> int * int
  in expression:
    (fn {2=2,...} => 2) list_compute
我不明白为什么
(#1 list_compute(sum_list2,tl lists2,n+1)、#2 list_compute(sum_list2,tl lists2,n+1))
#2 list_compute(sum_list,lists,n)
这两行是错误的。

fg(x,y)
被解析为
(fg)(x,y)
,而不是
f(g(x,y))
。因此,您希望添加如下括号:

#1 (list_compute (sum_list2,tl lists2,n+1))

否则,它会尝试将
#1
应用于函数
列表_compute
。错误消息是编译器告诉您“
#1
想要一个元组,但您给了它一个函数”

一般来说,如果在标准ML中出现这样的错误,那是因为您忘记将一些表达式括在括号中。