prolog - Prolog,生成n个平衡括号的所有组合
问题描述
你能告诉我如何在 PROLOG 中实现一个算法来生成 N 个平衡括号的所有组合吗?(正确关闭的括号)
解决方案
这是dcg最适合的。我们为平衡圆括号定义一个语法,然后相应地枚举它们。
:- set_prolog_flag(double_quotes, chars).
balanced --> "".
balanced --> "(", balanced, ")", balanced.
现在,当要求具体句子时,最好使用library(double_quotes)
see this了解更多信息。
我们可以要求固定长度的句子:
| ?- length(T, 6), phrase(balanced, T).
T = "()()()"
; T = "()(())"
; T = "(())()"
; T = "(()())"
; T = "((()))"
; false.
或者只是比比皆是任何句子:
| ?- length(T, N), phrase(balanced, T).
T = [], N = 0
; T = "()", N = 2
; T = "()()", N = 4
; T = "(())", N = 4
; T = "()()()", N = 6
; T = "()(())", N = 6
; T = "(())()", N = 6
; T = "(()())", N = 6
; T = "((()))", N = 6
; T = "()()()()", N = 8
; T = "()()(())", N = 8
; T = "()(())()", N = 8
; T = "()(()())", N = 8
; T = "()((()))", N = 8
; ...
推荐阅读
- snmp - 阅读经理发送的他的snmp
- java - Maven 和 Dockerfile - 下载容器创建的依赖项
- javascript - Leaflet and Ordance Survey Open Data:在网页上映射
- python - 使用多个依赖文件将 .py 转换为 .exe
- react-native - 反应本机导航-无法在额外属性扩展上获取属性“RNNKotlinVersion”,因为它不存在
- python - Python - 开始写入文本文件的第二行
- powershell - 我可以单独获取 AD 帐户属性,但不能在 foreach 循环中获取?
- android - 无法在 kotlin 中创建视图模型类的实例
- angular - Typescript 上的 Drawflow 库
- html - Bootstrap-vue b-table 响应属性无法识别 lg 或 xl 值