例如,我想从字符串中修剪正确的空格。 “狗”变成“狗”,“”变成“”。 如何实现?
我知道SWI序言中有修剪空格谓词,但是它从右和左修剪String。
但是我也使用GNU prolog,因此希望编写自己的解决方案。
答案 0 :(得分:1)
您可以将字符串转换为字符列表(请参见convert string to list in prolog),编写谓词以根据需要进行操作,然后将结果列表转换回字符串。
答案 1 :(得分:0)
这是在SWI-Prolog中使用DCG完成此操作的方法。我知道您说过您正在使用GNU Prolog,但这也许至少对使用SWI-Prolog的其他用户有所帮助:
:- use_module(library(dcg/basics)).
trimmed(S) --> blanks, string(S), blanks, eos, !.
trim(S, T) :-
string_codes(S, C), phrase(trimmed(D), C), string_codes(T, D).
答案 2 :(得分:0)
GNU Prolog是受支持的Logtalk后端编译器之一。使用它,您可以访问(便携式)库(和开发人员工具!),从而可以轻松解决问题。例如,如果您的字符串使用原子表示,则可以使用atom::replace_sub_atom/4
谓词:
| ?- {types(loader)}.
...
yes
| ?- atom::replace_sub_atom(' ', '', 'Dog ', Output).
Output = 'Dog'
yes
| ?- atom::replace_sub_atom(' ', '', ' becomes ', Output).
Output = becomes
如果您使用双引号,则它们的含义取决于double_quotes
标志值,在这种情况下,可以使用list::subtract/3
谓词。例如:
| ?- current_prolog_flag(double_quotes, Value).
Value = codes
yes
yes
| ?- list::subtract("Dog ", " ", Output).
Output = [68,111,103]
yes
| ?- list::subtract(" becomes ", " ", Output).
Output = [98,101,99,111,109,101,115]
yes
| ?- set_prolog_flag(double_quotes, chars).
yes
| ?- list::subtract("Dog ", " ", Output).
Output = ['D',o,g]
yes
| ?- list::subtract(" becomes ", " ", Output).
Output = [b,e,c,o,m,e,s]
yes
| ?- set_prolog_flag(double_quotes, atom).
yes
| ?- atom::replace_sub_atom(" ", "", "Dog ", Output).
Output = 'Dog'
yes
| ?- atom::replace_sub_atom(" ", "", " becomes ", Output).
Output = becomes
yes