Как удалить скобки из строки в Prolog. У меня есть только {} скобки, и могут быть вложенные скобки.Prolog удалить скобки из строки
, например, если у меня есть строка
а {1+ {2} +3} б {4} С
тогда ответ будет строка
abc
Как удалить скобки из строки в Prolog. У меня есть только {} скобки, и могут быть вложенные скобки.Prolog удалить скобки из строки
, например, если у меня есть строка
а {1+ {2} +3} б {4} С
тогда ответ будет строка
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.
Мы также можем создавать очень общие вопросы и еще получить ответы:
?- 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.