Тип несоответствия между списком .. и определенный тип
-
29-09-2019 - |
Вопрос
Я пытаюсь сделать функциональный массив, который я использую внутри списка. У меня было
let minimax = [| (min : int->int->int); max |]
Что работало отлично, но теперь я хочу получить максимальную ценность списка, поэтому я подумал:
let minimax = [|List.min; List.max|]
Это, однако, бросает следующую ошибку:
Minimax.fs (175,5): Ошибка FS0030: Ограничение значения. Значение 'Minimax' было выведено, что имеет общий тип Val Minimax: ('_a List ->' _a) [] Когда '_a: сравнение
Либо определить «Minimax» как простой термин данных, сделайте его функцией с явными аргументами, либо, если вы не намереваетесь быть общим, добавьте аннотацию типа.
Я добавил тип аннотации, как это:
let minimax = [|(List.min:TreeOfPosition list -> TreeOfPosition); List.max|]
и это составлено. Проблема сейчас в List.reduce,
| BranchP(position, children) -> List.reduce (minimax.[minOrmax]) (List.map (loop (1 - minOrmax)) children)
Несоответствие типов. Ожидание дерева наложения -> TreeOFPosition -> Treeoffosition, но с учетом списка дерева наложений -> Дерево наложение Тип «Дерево насолизация» не соответствует типу «Список деревьевполнения»
Спасибо за любой совет,
Педро Дюссо
Решение
Проблема в том, что min
работает на двух значениях, но List.min
Работает в списке значений, поэтому вы не можете просто заменить одну функцию для другого. С List.min
в основном определяется как List.reduce min
, вы, вероятно, можете просто избавиться от List.reduce
и применить minimax[minormax]
напрямую. Я не вижу, как это было бы лучше, чем ваше первоначальное решение с min
и max
, хотя ... возможно, вы могли бы предоставить какой -то дополнительный контекст, чтобы точно понять, какую проблему вы пытаетесь решить.