String Prolog从字符串中删除括号
如何在Prolog中从字符串中删除括号。 我只有{}个括号,可能有嵌套的括号 例如,如果我有一个字符串 a{1+{2}+3}b{4}c 那么答案就是字符串 abcString Prolog从字符串中删除括号,string,prolog,brackets,dcg,String,Prolog,Brackets,Dcg,如何在Prolog中从字符串中删除括号。 我只有{}个括号,可能有嵌套的括号 例如,如果我有一个字符串 a{1+{2}+3}b{4}c 那么答案就是字符串 abc 使用符号很容易做到这一点 以下内容假设您具有该设置: :-set_prolog_标志(双引号,字符)。 在初始化文件中,更方便地使用字符 例如: no_braces([]) --> []. no_braces([C|Cs]) --> [C], { dif(C, '{') }, no_braces(Cs). no_b
使用符号很容易做到这一点 以下内容假设您具有该设置:
:-set_prolog_标志(双引号,字符)。
在初始化文件中,更方便地使用字符
例如:
no_braces([]) --> [].
no_braces([C|Cs]) --> [C], { dif(C, '{') }, no_braces(Cs).
no_braces(Cs) --> ['{'], no_braces(_), ['}'], no_braces(Cs).
?- phrase(no_braces(Ls), "a{1+{2}+3}b{4}c").
Ls = [a, b, c] ;
false.
没有大括号([])-->[]。
没有大括号([C | Cs])-->[C],{dif(C,'{')},没有大括号(Cs)。
不带大括号(Cs)->['{'],不带大括号(['}'],不带大括号(Cs)。
询问和回答示例:
?- phrase(no_braces(Ls), "abc").
Ls = [a, b, c] ;
false.
?- phrase(no_braces(Ls), "a{b}c").
Ls = [a, c] ;
false.
-短语(无括号),“abc”)。
Ls=[a,b,c];
错。
-短语(无括号),“a{b}c”)。
Ls=[a,c];
错。
我们也可以发布非常一般的查询,仍然可以获得答案:
?- 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, '{') .
?-长度(Ls0,u),短语(无大括号,Ls0)。
Ls0=Ls,Ls=[];
Ls0=Ls,Ls=[[u 2308],
dif(_2308,{');
Ls0=Ls,Ls=[[u 2474,[u 2480],
dif(_2474,{'),
dif(_2480,{');
Ls0=['{','}'],
Ls=[];
Ls0=Ls,Ls=[[u 2640,[u 2646,[u 2652],
dif(_2640,{'),
dif(_2646,'{'),
dif(_2652,{')。
最后,您的示例:
no_braces([]) --> [].
no_braces([C|Cs]) --> [C], { dif(C, '{') }, no_braces(Cs).
no_braces(Cs) --> ['{'], no_braces(_), ['}'], no_braces(Cs).
?- phrase(no_braces(Ls), "a{1+{2}+3}b{4}c").
Ls = [a, b, c] ;
false.
-短语(无括号(Ls),“a{1+{2}+3}b{4}c”)。
Ls=[a,b,c];
错。
使用符号很容易做到这一点 以下内容假设您具有该设置:
:-set_prolog_标志(双引号,字符)。
在初始化文件中,更方便地使用字符
例如:
no_braces([]) --> [].
no_braces([C|Cs]) --> [C], { dif(C, '{') }, no_braces(Cs).
no_braces(Cs) --> ['{'], no_braces(_), ['}'], no_braces(Cs).
?- phrase(no_braces(Ls), "a{1+{2}+3}b{4}c").
Ls = [a, b, c] ;
false.
没有大括号([])-->[]。
没有大括号([C | Cs])-->[C],{dif(C,'{')},没有大括号(Cs)。
不带大括号(Cs)->['{'],不带大括号(['}'],不带大括号(Cs)。
询问和回答示例:
?- phrase(no_braces(Ls), "abc").
Ls = [a, b, c] ;
false.
?- phrase(no_braces(Ls), "a{b}c").
Ls = [a, c] ;
false.
-短语(无括号),“abc”)。
Ls=[a,b,c];
错。
-短语(无括号),“a{b}c”)。
Ls=[a,c];
错。
我们也可以发布非常一般的查询,仍然可以获得答案:
?- 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, '{') .
?-长度(Ls0,u),短语(无大括号,Ls0)。
Ls0=Ls,Ls=[];
Ls0=Ls,Ls=[[u 2308],
dif(_2308,{');
Ls0=Ls,Ls=[[u 2474,[u 2480],
dif(_2474,{'),
dif(_2480,{');
Ls0=['{','}'],
Ls=[];
Ls0=Ls,Ls=[[u 2640,[u 2646,[u 2652],
dif(_2640,{'),
dif(_2646,'{'),
dif(_2652,{')。
最后,您的示例:
no_braces([]) --> [].
no_braces([C|Cs]) --> [C], { dif(C, '{') }, no_braces(Cs).
no_braces(Cs) --> ['{'], no_braces(_), ['}'], no_braces(Cs).
?- phrase(no_braces(Ls), "a{1+{2}+3}b{4}c").
Ls = [a, b, c] ;
false.
-短语(无括号(Ls),“a{1+{2}+3}b{4}c”)。
Ls=[a,b,c];
错。