Как составить бесконечный список конкатенаций a..z с 1, 2 и т. Д. - PullRequest
1 голос
/ 11 апреля 2019

Я пытаюсь создать бесконечный список в Haskell, который принимает буквы a..z, а затем повторяет их с суффиксом 1 ("a1 ... z1"), затем 2 ("a2" .. "z2") и т. д.

На данный момент самое дальнее, что у меня есть, - использование понимания списка для создания списка каждой возможной комбинации строк из двух списков az и 1-9, однако я не могу понятькак применить это к моей проблеме.Я также пытался использовать функцию карты, но не мог понять, как применить ее к моей проблеме.

variables :: [Var]
variables = [x : y | y <- "" : variables, x <- ['a'..'z'] ++ ['0'..'9']]

Ввод [variables !! i | i <- [0,1,25,26,27,100,3039]] в ghci должен дать: ["a","b","z","a1","b1","w3","x116"], но на данный момент результатЯ получаю это: ["a","b","z","0","1","2b","plb"].Любая помощь будет высоко ценится

1 Ответ

5 голосов
/ 11 апреля 2019

Используйте понимание бесконечной последовательности:

Prelude> let variables = [l:show x | x <- [1..],  l <- ['a'..'z']]
Prelude> take 100 variables
["a1","b1","c1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","p1","q1","r1","s1","t1","u1","v1","w1","x1","y1","z1","a2","b2","c2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","q2","r2","s2","t2","u2","v2","w2","x2","y2","z2","a3","b3","c3","d3","e3","f3","g3","h3","i3","j3","k3","l3","m3","n3","o3","p3","q3","r3","s3","t3","u3","v3","w3","x3","y3","z3","a4","b4","c4","d4","e4","f4","g4","h4","i4","j4","k4","l4","m4","n4","o4","p4","q4","r4","s4","t4","u4","v4"]

Просто используйте (++) над этим списком и ['a'..'z'] для добавления отдельных списков символов, обратите внимание, что с 'a' :: char вам необходимо преобразовать его в String заранее

Prelude> let variables = [l:[] | l <- ['a'..'z']] ++ [l:show x | x <- [1..],  l <- ['a'..'z']]
Prelude> take 100 variables
["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","a1","b1","c1","d1","e1","f1","g1","h1","i1","j1","k1","l1","m1","n1","o1","p1","q1","r1","s1","t1","u1","v1","w1","x1","y1","z1","a2","b2","c2","d2","e2","f2","g2","h2","i2","j2","k2","l2","m2","n2","o2","p2","q2","r2","s2","t2","u2","v2","w2","x2","y2","z2","a3","b3","c3","d3","e3","f3","g3","h3","i3","j3","k3","l3","m3","n3","o3","p3","q3","r3","s3","t3","u3","v3"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...