#haskell
#haskell
Вопрос:
Сегодня начал изучать haskell для школы, и я столкнулся с проблемой с функцией. Я не понимаю, почему это не в области видимости..
Вот код:
ff :: [[Char]] -> [[Char]] -> [Char]
ff A B = [[x !! 0, y !! 1] | x <- A, y <- B, (x !! 1) == (y !! 0)]
И ошибки:
md31.hs:2:4: Not in scope: data constructor `A'
md31.hs:2:6: Not in scope: data constructor `B'
md31.hs:2:38: Not in scope: data constructor `A'
md31.hs:2:46: Not in scope: data constructor `B'
Заранее спасибо 🙂
Комментарии:
1. Как отмечено в ответах, имена переменных должны быть в нижнем регистре. Официальная документация, связанная с этим, находится по адресу haskell.org/onlinereport/intro.html#namespaces
Ответ №1:
Параметры функции должны начинаться со строчной буквы в Haskell.
Таким образом, вам нужно было бы сделать A
и B
строчными буквами ( a
и b
) в определении вашей функции.
Если первая буква идентификатора находится в верхнем регистре, предполагается, что это конструктор данных.
Ответ №2:
В Haskell заглавные буквы означают, что значение является конструктором данных, как в:
data Test = A | B
Если вам нужна переменная, используйте нижний регистр:
ff a b = [[x !! 0, y !! 1] | x <- a, y <- b, (x !! 1) == (y !! 0)]