Несоответствие типов при прохождении кортежа - PullRequest
0 голосов
/ 08 марта 2019

Следующая функция принимает список, кортеж (a, b), где 'a' - это кортеж с плавающей точкой и запрос для проверки.

checkDist - это функция, которая принимает два кортежа с плавающей точкой и возвращает расстояние между всеми точками.

Теперь моя проблема заключается в том, что я столкнулся с ошибкой несоответствия типов и не могу понять, почему.Похоже, что вместо 'float * float * выводится' a 'как один-единственный float.

let intoTp lst (a, b) qry = 
   let rec intoTpLoop lst prevMax =
      match lst with
      | [] -> []
      | (feat, value) :: t ->
         let curr = checkDist feat qry    // current max
         let prev = checkDist prevMax qry // prev max

         // Check to replace top
         if prev < curr then
            let nextMax = (feat, value)
            prevMax :: intoTpLoop t nextMax
         else
            (feat, value) :: intoTpLoop t prevMax

   intoTpLoop lst (a, b)

enter image description here

Спасибо,

1 Ответ

4 голосов
/ 08 марта 2019

Таким образом, вы звоните checkDist дважды, когда первый раз вы передаете feat, который является единственным значением, второй раз, когда вы передаете prevMax, который является кортежем.В этом ваше противоречие.

Если вы сомневаетесь в том, что происходит с выводом типа, это помогает добавить аннотации типов, чтобы прояснить, что должно быть тем (для механизма вывода, для вас и для нас).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...