Vì vậy, tôi đã đọc một cuốn sách, "Giới thiệu về lý thuyết ngôn ngữ chính thức" và nó mô tả một ngôn ngữ L(G) = {a^n ++ b^n | n > 0}
.Ngôn ngữ cân bằng, 2 Ký hiệu không phải là thiết bị đầu cuối, Danh sách hiểu
Nó có tác phẩm sau đây:
S -> ab | aSb
Và như vậy sẽ tạo ra các ngôn ngữ sau:
a, ab, aabb, aaabbb, ...
tôi đã tự hỏi làm thế nào tôi có thể sử dụng danh sách hiểu Haskell để tạo ra ngôn ngữ này. Tôi biết tôi có thể làm danh sách hiểu với dây, nhưng tôi khá nhiều người mới bắt đầu và không chắc chắn làm thế nào tôi có thể nhận được một danh sách vô hạn như tôi muốn của các dây.
Tôi đang tưởng tượng cái gì đó như:
[ x ++ y | x <- ["a","aa",..] y <- ["b","bb",..]]
Điều này không làm chính xác những gì bạn nghĩ. Làm thế nào về '[replicate n 'a' ++ tái tạo n 'b' | n <- [1 ..]] '? Điều đó có vẻ giống như bản dịch trung thành nhất ... – Alec
"a" không phải là một phần của ngôn ngữ đó. –