Невозможно получить простой код на Haskell для компиляции, независимо от того, как много разных способов я попробую - PullRequest
1 голос
/ 20 октября 2019

Я пытаюсь написать функцию Haskell, которая принимает дерево и заменяет каждый узел парой, содержащей высоту поддерева в этом узле и исходный узел

В зависимости от того, где я размещаюмоя скобка в последней строке кода, я получаю всевозможные ошибки. Я знаю, что моя функция высоты работает, потому что я использовал ее для различных функций ранее. Я явно не правильно группирую вещи, потому что я получил все: от недостаточно аргументов до максимума, до слишком большого количества аргументов для пар. Пожалуйста помоги! Я действительно застрял здесь и не прогрессирую, потому что я просто перемещаю скобки вперед и назад.

data Tree a = Tip | Bin (Tree a) a (Tree a) deriving (Show, Eq)

getHeight :: Tree a -> Integer
getHeight Tip = 0
getHeight (Bin l _ r) = (max (getHeight l) (getHeight r)) +1

pairs :: Tree a -> Tree (Integer, a)
pairs Tip = Tip
pairs (Bin l x r) = (Bin (pairs l) ((max (left right)) x) (pairs r))
  where left = (getHeight l)
        right = (getHeight r)

1 Ответ

5 голосов
/ 20 октября 2019

Чтобы вызвать функцию с двумя аргументами, нужно разделить их пробелами, например:

f x y

Или в вашем случае это будет:

max left right

способ создать пару с паренсом и запятой, как это:

(42, "foo")

Или в вашем случае это будет:

(max left right, x)

Суммируя все это, строкадолжно быть:

pairs (Bin l x r) = Bin (pairs l) (max left right, x) (pairs r)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...