Задать вопрос
dsherbakov
@dsherbakov
Студент

Как порождать двоичные векторы в Haskell?

Как породить двоичные вектора определенной длинны используя рекурсию в Haskell?
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
youngmysteriouslight
@youngmysteriouslight
ТК, ТТ, JS, FP, WM
Если подключить Control.Monad, то все возможные двоичные векторы, представленные списком компонент, порождаются функцией
vectors :: Int -> [[Int]]
vectors n = replicateM n [0, 1]

Вместо [0,1] могут быть любые другие значения компонент (True и False, например). Аргумент n задаёт длину векторов, которое будет равняться числу переменных в логическом выражении.

upd.
С учётом пожеланий новый вариант:
data BinTree = Leaf [Int] | Node BinTree BinTree deriving Show
vars :: Int -> [Int] -> BinTree
vars 1 context = Node (Leaf (0:context)) (Leaf (1:context))
vars n context = Node (vars (n-1) (0:context)) (vars (n-1) (1:context))

Prelude> vars 2 []
Node (Node (Leaf [0,0]) (Leaf [1,0])) (Node (Leaf [0,1]) (Leaf [1,1]))
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы