2011-05-27 95 views
0

我有這個簡單的功能:SML - 操作和操作數不同意

val CLC_seq= 
     fn (n) => 
     (Cons (n, find_CLC_seq(COL_seq(n)))) 

當:

find_CLC_sqe is : int seq -> int; 
COL_seq is: fn: int -> int seq; 

的編者寫道:

Error: operator and operand don't agree 
operator domain: int * (Unit -> int seq) 
operand: int * int 
in expression: 
(Cons (n, find_CLC_seq(COL_seq(n)))) 

的原因是什麼?我該如何解決它?謝謝。

回答

0

嗯,目前還不清楚你想要做什麼,但編譯器是正確的選擇你。 find_CLC_seq返回int,這意味着您的Cons正試圖將int轉換爲int。這沒有任何意義,因爲缺點是將一個元素添加到列表的前面(您的Cons函數期望將一個int置於惰性序列的前端(Unit -> int seq))。

我不知道是什麼CLC和COL的,但它看起來像之一:

你的CLC_seq定義是錯誤的,因爲如果find_CLC_seq真的想回的int,它沒有任何意義以這種方式使用它;

或者你的find_CLC_seq的定義是錯誤的,它的返回類型應該是int seq或一個惰性序列,顧名思義。在那種情況下,錯誤是在你沒有向我們顯示的代碼中。

+0

非常感謝,但我仍然沒有得到什麼問題。 find_CLC_seq返回一個int(如我寫的:find_CLC_sqe是:int seq - > int;)。所以它會做Cons(int,int)。爲什麼編譯器將它看作Unit - > int seq? – Tom 2011-05-27 14:38:32

+0

CLC_seq的類型是由編譯器定義的。 – Tom 2011-05-27 14:44:27

+0

是的,你的代碼試圖將int賦給int(這就是它說'操作數:int * int'時的含義)。 Cons構造函數不需要這些參數;它的意思是用來對整數進行序列化。 Cons的類型將是'int *(Unit - > int seq) - >(Unit - > int seq)',這就是它表示'operator domain'的輸入時的含義。 '操作數'是你試圖傳遞它的'操作符域'是你應該傳遞的東西。 – 2011-05-27 14:50:40