Несоответствие ограничений типа с типом разделения int * int по умолчанию - PullRequest
0 голосов
/ 09 февраля 2012

Итак, я прорабатываю пример кода F # и наткнулся на следующий фрагмент:

let divRem a b = 
    let x = a / b
    let y = a % b
    (x,y)

Когда я пытаюсь его скомпилировать, я получаю следующую ошибку:

HelloWorld \ Program.fs (15,14): ошибка FS0071: Несоответствие ограничения типа при применении типа по умолчанию int * int для переменной вывода типа.Тип '(int * int)' не поддерживает никакие операторы с именем '/' Рассмотрите возможность добавления дополнительных ограничений типа

Однако, делая что-то вроде

let print n = System.Console.WriteLine(n.ToString())
print (4/2)

Результат в

2

Почему целочисленное деление невозможно использовать из определения функции?

РЕДАКТИРОВАТЬ: Вот полный пример кода, который не удается скомпилировать.

let divRem a b = 
    let x = a / b
    let y = a % b
    (x,y)

let print n = System.Console.WriteLine(n.ToString())
print (divRem (5,3))

Ответы [ 2 ]

7 голосов
/ 09 февраля 2012

Проблема в том, что вы не используете запятые при вызове функций в F #, запятые используются для создания кортежей. Код должен быть:

let divRem a b = 
    let x = a / b
    let y = a % b
    (x,y)

let print n = System.Console.WriteLine(n.ToString())
print (divRem 5 3)
0 голосов
/ 09 февраля 2012
let divRem (a, b) = 
    let x = a / b
    let y = a % b
    (x,y)

let print n = System.Console.WriteLine(n.ToString())
print (divRem (5,3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...