Prolog从字符串

时间:2016-10-25 08:24:59

标签: string prolog brackets

如何从Prolog中的字符串中删除括号。 我只有{}括号,可能有嵌套括号。

例如,如果我有一个字符串

  

一个{1+ {2} 3} B {4}℃

然后答案将是字符串

  

ABC

1 个答案:

答案 0 :(得分:2)

使用 表示法非常容易。

以下假定您具有以下设置:

  

:- 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.

我们还可以发布非常一般的查询,仍然获取答案:

?- 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.