синтаксис в выражении - Haskell - PullRequest
0 голосов
/ 16 мая 2009

Я новичок в Хаскеле! Я написал этот код:

import Data.List
inputIndex :: [String] -> [String] -> Bool
inputIndex listx input = and [x `elem` listx |x <- input]
inputIndex = if inputIndex == true
                then putStrLn ("ok")

Работает нормально без оператора if, но когда я ставлю оператор if, появляется следующая ошибка:

Синтаксическая ошибка в выражении (неожиданный `} ', возможно, из-за неправильного расположения)

Что я здесь не так делаю?

Спасибо

Ответы [ 2 ]

8 голосов
/ 16 мая 2009

Несколько вещей здесь не так:

  • Вам понадобится необходимо предложение else.
  • True должен быть написан заглавными буквами.
  • inputIndex всегда должен принимать два аргумента (сейчас это не так, в последнем случае).

Полагаю, вы хотите что-то подобное ...

inputIndex :: [String] -> [String] -> IO ()
inputIndex listx input = if inputIndex' listx input
                             then putStrLn ("ok")
                             else putStrLn ("not ok")
  where
    inputIndex' :: [String] -> [String] -> Bool
    inputIndex' listx input = and [x `elem` listx |x <- input]

(Здесь я определил новую функцию с почти одинаковым именем, добавив простую / апостроф. Определив ее в предложении where, она видна только внешней функции inputIndex. вспомогательная функция, если хотите. Я мог бы также выбрать совершенно другое имя, но я не креативен.)

Вы также можете сократить это до следующего (что также является более общим):

allPresent :: (Eq t) => [t] -> [t] -> IO ()
allPresent xs ys = putStrLn (if and [y `elem` xs | y <- ys] then "ok" else "not ok")
0 голосов
/ 16 мая 2009
  1. Это "правда", а не "правда".
  2. Ваша вторая реализация inputIndex не совместима с первой. Все ваши примеры шаблонов для функции должны иметь одинаковую подпись ([String] -> [String] -> Bool)
  3. Ошибка, которую вы показываете здесь, не генерируется этим кодом, потому что здесь нет '}'.
  4. putStrLn имеет подпись String -> IO(), в то время как ваш inputIndex выглядит так, как будто он должен быть чистым - просто верните значение и напечатайте его где-нибудь еще.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...