тестов много не писал, но работает....
Я там вижу патерн, в функциях bsub и bsum повторяющийся, по идее его можно вынести в отдельную функцию, с передачей ей (subBi и sbi - приведя их у одному типу, что не сложно), вопрос, стоит ли таким заморачиваться?
И что еще там надо скомпоновать, для красивого кода?
Мне пока не понятен баланс читаемости и красивости (вот например в функции comp пару строк можно сократить, но как мне кажеться ухудшиться читаемость...
PS по поводу subBi написана как таблица истинности, можно переписать в стиле парной (sbi) , но тоже не понимаю, на сколько оно лучше в смысле понятность - красота...
PPS - В общем хотелось критики, рекомендаций.... В том числе по оформлению сообщения в чат, если опять написал непонятно.
putStr a; putStrLn "" === putStrLn a
(ssb, lst) = foldl' (\(m, l) (a, b) -> f m l a b) (Zero, []) zl f m l a b = (sb, mb : l) === (ssb, lst) = foldl' f (Zero, []) zl f (m, l) (a, b) = (sb, mb : l)
(a, b) : _ -> if a == One then GT else LT === (One, _) : _ -> GT _ -> LT
чем comp отличается от compare?
Ничем просто чтоб не пересечься по имени с библиотекой
comp2 :: [Bit] -> [Bit] -> Ordering comp2 aBl bBl = compare (p aBl) (p bBl) where p = reverse . prep (max (length aBl) (length bBl))
subBi что символизирует?
Вычитание битов с заемом разряда
я бы как-то так написал subBi2 a b c = ifB a (b `eq` c, b `andB` c) (b `andB` notB c, b `orB` c)
Понял почитаю что м как
если система примет, попробуй type Bit = Bool subBi3 a b c = if a then (b == c, b && c) else (b && not c, b || c)
map (\b -> if b == Zero then replicate (length l) Zero else l) === map \case Zero -> Zero <$ l One -> l
Bit определен как тип, могу наследовать что то... но не переопределить
(mapr, lr) = if cmp == GT then (mapal al, bl) else (mapal bl, al) lSum = mapr lr === lSum = if cmp == GT then mapal al bl else mapal bl al === lSum = case cmp of GT -> mapal al bl _ -> mapal bl al
Тут для <$ Control.Monad нужен, его стоит привыкать использовать ?
(<$) ограничен Functor и доступен из Prelude
Да разобрался, в общем к такой реализации стоит привыкать спасибо
можно не заучивать, просто удобно
вот такое выдает, куда копать не понимаю Main.hs:42:16: error: Unexpected \case expression in function application: \case Zero -> Zero <$ l One -> l Suggested fixes: • Use parentheses. • Perhaps you intended to use BlockArguments | 42 | mapal l = map \case как записать лямбду с кейсом понимаю, а вот так нет
просто прочитай это сообщение
компилятор сам рассказывает, что добавить
Обсуждают сегодня