Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
навскидку
> openBraces = "({[" ... лучше [('(',')'), ... ] или свой Pair '(' ')'
не было бы неидиоматичного !! + elemIndex, непонятно, почему не используются преимущества языка
для сравнения (правда древний "hugs"): http://codepad.org/8GKpGQws - тут тоже пропущено, но если код не одноразовый, должны быть сигнатуры
> !! + elemIndex
Согласен. Очень чужеродно.
Вот если бы он написал как вы говорите - ещё можно было бы подумать его взять:
import Data.List
import Data.Maybe
import Data.Map (keys, fromList, elems)
import Data.Map as M (lookup)
checkBraces "" = True
checkBraces e = checkBrace e [] where
braceToBraceMap = fromList [('(',')'), ('{','}'), ('[',']')]
openBraces = keys braceToBraceMap
closeBraces = elems braceToBraceMap
braceToBrace brace = fromJust $ M.lookup brace braceToBraceMap
checkBrace (c:e) s | elem c openBraces = checkBrace e ((braceToBrace c):s)
checkBrace (c:e) (h:s) | (elem c closeBraces) && (h==c) = checkBrace e s
checkBrace (_:e) _ = False
checkBrace "" [] = True
checkBrace "" _ = False
main = mapM_ (print . checkBraces) bracesExpressionExamples where
bracesExpressionExamples =
[
"({[{}]{}[]})",
"({}}{[{}]{}[]})",
"({[{}]{}[]}",
"({[{}]{}]})",
"({[{}{}[]})",
"",
"{}"
]
http://ideone.com/1OIrFf
А так он даже умение пользоваться монадами не продемонстрировал.
Ещё заметьте, в своем коде случаи:
checkBrace "" [] = True
checkBrace "" _ = False
вместо "" он написал [], что явно не так читабильно
Мяу!
> openBraces = "({[" ... лучше [('(',')'), ... ] или свой Pair '(' ')'
не было бы неидиоматичного !! + elemIndex, непонятно, почему не используются преимущества языка
для сравнения (правда древний "hugs"): http://codepad.org/8GKpGQws - тут тоже пропущено, но если код не одноразовый, должны быть сигнатуры
Согласен. Очень чужеродно.
Вот если бы он написал как вы говорите - ещё можно было бы подумать его взять:
http://ideone.com/1OIrFf
А так он даже умение пользоваться монадами не продемонстрировал.
Ещё заметьте, в своем коде случаи:
checkBrace "" [] = True
checkBrace "" _ = False
вместо "" он написал [], что явно не так читабильно