2012-05-31 1 views
0
fun can_move 0 0 0 nil = false 
| can_move limit_down V 0 a = true 
| can_move limit_down V count a = if ((V-limit_down)>hd a) then false else    can_move limit_down V (count-1) tl a ; 

Эй, это мой код. Я просто хочу проверить, меньше ли значение V-limit_down, чем числа в списке int a. Число аргументы, которые я хочу проверить из списка, - V/10. Например, если у меня 20 В, то я хочу проверить первые два аргумента списка. Почему я получаю эту ошибку?правая сторона предложения не согласна с результатом funt sml

can_move.sml:1.6-3.114 Error:right-hand-side of clause doesn't agree with function  result type 
[tycon mismatch] 
expression: int -> int -> int list -> bool 
result type: int -> int -> (Z' list -> 'Z list) -> int list -> bool 
in declaration: 

can_move (fn arg =) (fn <pat> => <exp>)) 

ответ

2

Похоже, вы забыли скобки в последней правой части вашего шаблона. В рекурсивном вызове can_move limit_down V (count-1) tl a обратите внимание, что ваш последний аргумент - tl a. Обычно анализатор может понять, что это приложение функции. К сожалению, это неоднозначно, когда результат приложения является частью еще одного приложения, как и здесь.

Решение будет заключено в круглый стол: can_move limit_down V (count-1) (tl a).

+0

Да, я только что понял: P глупый вопрос о моем thnx – MikEKOU

+0

Не так глупо. Я не мог понять пропущенную скобку, благодаря вашему вопросу, который я решил сейчас. @MikEKOU – Shivendra

Смежные вопросы