我在下面有一个源代码。我不明白它的语法。
[g | t <- ts; g <- symbols t]
很奇怪。请帮我解释它或推荐任何与之相关的书籍或文件。非常感谢
type term = V of string | F of string * term list
let rec symbols = function
| V x -> [x]
| F (f, ts) -> f :: [ g | t <- ts; g <- symbols t ]
let rec functions = function
| V _ -> []
| F (f, ts) -> f :: [ g | t <- ts; g <- functions t ]