Тип несоответствия между списком .. и определенный тип

StackOverflow https://stackoverflow.com/questions/3097293

  •  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, хотя ... возможно, вы могли бы предоставить какой -то дополнительный контекст, чтобы точно понять, какую проблему вы пытаетесь решить.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top