2016-10-25 330 views
0

如何從Prolog中的字符串中刪除括號。 我只有{}括號,並且可能有嵌套括號。Prolog從字符串中刪除括號

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

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

那麼答案將是串

abc

回答

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.