Prolog从字符串中删除括号
Prolog remove brackets from string
如何从 Prolog 中的字符串中删除括号。
我只有{}括号,可能还有嵌套括号。
例如,如果我有一个字符串
a{1+{2}+3}b{4}c
那么答案就是字符串
abc
使用 dcg 符号很容易。
以下假设您有设置:
:- set_prolog_flag(double_quotes, chars).
在您的初始化文件中,以便更方便地使用 个字符。
例如:
no_braces([]) --> [].
no_braces([C|Cs]) --> [C], { dif(C, '{') }, no_braces(Cs).
no_braces(Cs) --> ['{'], no_braces(_), ['}'], no_braces(Cs).
示例查询和答案:
?- phrase(no_braces(Ls), "abc").
Ls = [a, b, c] ;
false.
?- phrase(no_braces(Ls), "a{b}c").
Ls = [a, c] ;
false.
我们还可以post非常一般的查询,并且仍然获得答案:
?- length(Ls0, _), phrase(no_braces(Ls), Ls0).
Ls0 = Ls, Ls = [] ;
Ls0 = Ls, Ls = [_2308],
dif(_2308, '{') ;
Ls0 = Ls, Ls = [_2474, _2480],
dif(_2474, '{'),
dif(_2480, '{') ;
Ls0 = ['{', '}'],
Ls = [] ;
Ls0 = Ls, Ls = [_2640, _2646, _2652],
dif(_2640, '{'),
dif(_2646, '{'),
dif(_2652, '{') .
最后,你的例子:
?- phrase(no_braces(Ls), "a{1+{2}+3}b{4}c").
Ls = [a, b, c] ;
false.
如何从 Prolog 中的字符串中删除括号。 我只有{}括号,可能还有嵌套括号。
例如,如果我有一个字符串
a{1+{2}+3}b{4}c
那么答案就是字符串
abc
使用 dcg 符号很容易。
以下假设您有设置:
:- set_prolog_flag(double_quotes, chars).
在您的初始化文件中,以便更方便地使用 个字符。
例如:
no_braces([]) --> []. no_braces([C|Cs]) --> [C], { dif(C, '{') }, no_braces(Cs). no_braces(Cs) --> ['{'], no_braces(_), ['}'], no_braces(Cs).
示例查询和答案:
?- phrase(no_braces(Ls), "abc"). Ls = [a, b, c] ; false. ?- phrase(no_braces(Ls), "a{b}c"). Ls = [a, c] ; false.
我们还可以post非常一般的查询,并且仍然获得答案:
?- length(Ls0, _), phrase(no_braces(Ls), Ls0). Ls0 = Ls, Ls = [] ; Ls0 = Ls, Ls = [_2308], dif(_2308, '{') ; Ls0 = Ls, Ls = [_2474, _2480], dif(_2474, '{'), dif(_2480, '{') ; Ls0 = ['{', '}'], Ls = [] ; Ls0 = Ls, Ls = [_2640, _2646, _2652], dif(_2640, '{'), dif(_2646, '{'), dif(_2652, '{') .
最后,你的例子:
?- phrase(no_braces(Ls), "a{1+{2}+3}b{4}c"). Ls = [a, b, c] ; false.