Предположим, у нас есть следующая грамматика:
# x = INT | (#x + #x)
INT = 0 | 1
Предположим, теперь я хотел бы создать бесконечный поток, который "содержит" все возможные формы #x.
Вот что я могу придумать:
atomic :: [String]
atomic = ["0", "1"]
--------------------
plus :: String -> String -> String
plus x1 x2 = "(" ++ x1 ++ "+" ++ x2 ++ ")"
--------------------
makeInfiniteStream :: [String]
makeInfiniteStream = atomic : --something
Я не совсем уверен, что происходит на другой стороне толстой кишки. Я предполагаю, что это должно включать вызов функции, но я пока не вижу этого.
Спасибо.