Обработка арг haskell - PullRequest
       0

Обработка арг haskell

0 голосов
/ 03 марта 2020

Если мой elemIndex равен Nothing, пусть вызывается функция default_value. Вот мой код:

import System.Environment
import System.Exit
import Data.Maybe (fromMaybe)
import Data.List (elemIndex)

default_value :: String -> Maybe Int
default_value elem
        | elem == "--rule" = 0
        | elem == "--start" = 0
        | elem == "--lines" = 0
        | elem == "--window" = 80
        | elem == "--move" = 0

getPos :: String -> [String] -> Maybe Int
getPos elem list = fromMaybe (default_value elem) (elemIndex elem list)

main :: IO ()
main = do
        args <- getArgs
        let rule = getPos "--rule" args
        let start = getPos "--start" args
        let lines = getPos "--lines" args
        let window = getPos "--window" args
        let move = getPos "--move" args
        putStrLn "Goumage"

Когда я компилирую, у меня появляется эта ошибка, и я ее не понимаю.

Compiling...
[1 of 1] Compiling Main             ( src/main.hs, src/main.o )

src/main.hs:11:51: error:
    parse error on input ‘=’
    Perhaps you need a 'let' in a 'do' block?
    e.g. 'let x = 5' instead of 'x = 5'
   |
11 | getPos elem list = elemIndex elem list == Nothing = default_value elem
   |                                                   ^
make: *** [Makefile:16: wolfram] Error 1

1 Ответ

2 голосов
/ 03 марта 2020

elemIndex уже возвращает нужный вам индекс, завернутый в Just, если элемент находится в списке. Если это не так, возвращается Nothing.

. Комбинируя это с функцией fromMaybe , вы можете легко указать значение по умолчанию для случая, когда оно не найдено:

import Data.Maybe (fromMaybe)

-- more code here

getPos :: String -> [String] -> Int
getPos elem list = fromMaybe (default_value elem) (elemIndex elem list)

Обратите внимание, что это все равно не скомпилируется, потому что ваша функция default_value должна возвращать "обычный" Int, а не Maybe Int. Это не проблема, так как все ваши значения на самом деле уже "обычные Int" - просто измените сигнатуру типа, и все должно быть хорошо (если я не пропустил никаких других проблем в вашем коде).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...