SML - оператор и операнд не согласны - PullRequest
0 голосов
/ 27 мая 2011

У меня есть эта простая функция:

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))))

В чем причина? Как я могу решить это? Спасибо.

1 Ответ

0 голосов
/ 27 мая 2011

Ну, не совсем понятно, что именно вы пытаетесь сделать, но компилятор подойдет вам.find_CLC_seq возвращает int, что означает, что ваш Cons пытается вывести int на int.Это не имеет смысла, потому что cons предназначен для добавления элемента в начало списка (ваша функция Cons ожидает поместить int в начало ленивой последовательности, (Unit -> int seq)).

Я не знаю, что такое CLC и COL, но это выглядит так:

Ваше определение CLC_seq неверно, потому что если find_CLC_seq действительно предназначено для возврата int, ононе имеет смысла использовать его таким образом;

ИЛИ ваше определение find_CLC_seq неверно, и его тип возвращаемого значения должен быть int seq или ленивая последовательность, как следует из названия.В этом случае ошибка в куске кода, который вы нам не показали.

...