gpt4 book ai didi

string - 序言 : Remove extra spaces in a stream of characters

转载 作者:行者123 更新时间:2023-12-01 01:31:29 26 4
gpt4 key购买 nike

Prolog 的新手。这让我有点沮丧。我下面的“解决方案”是我试图使 Prolog 程序化......

如果需要,这将删除空格或在逗号后插入一个空格,即,直到遇到句点:

squish:-get0(C),put(C),rest(C).  
rest(46):-!.
rest(32):-get(C),put(C),rest(C).
rest(44):-put(32), get(C), put(C), rest(C).
rest(Letter):-squish.

目标:我想知道如何删除逗号之前的任何空格。

以下工作,但在这么多层面上都是错误的,尤其是“退出”!
squish:-  
get0(C),
get0(D),
iteratesquish(C,D).

iteratesquish(C,D):-
squishing(C,D),
get0(E),
iteratesquish(D,E).

squishing(46,X):-put(46),write('end.'),!,exit.

squishing(32,32):-!.
squishing(32,44):-!.
squishing(32,X):-put(32),!.

squishing(44,32):-put(44),!.
squishing(44,44):-put(44), put(32),!.
squishing(44,46):-put(44), put(32),!.
squishing(44,X):-put(44), put(32),!.

squishing(X,32):-put(X),!.
squishing(X,44):-put(X),!.
squishing(X,46):-put(X),!.

squishing(X,Y):-put(X),!.

最佳答案

由于您正在描述列表(在这种情况下:字符代码),请考虑使用 DCG 表示法。例如,要让任何逗号后跟一个空格,请考虑使用类似于以下内容的代码:

squish([])                 --> [].
squish([(0',),(0' )|Rest]) --> [0',], spaces, !, squish(Rest).
squish([L|Ls]) --> [L], squish(Ls).

spaces --> [0' ], spaces.
spaces --> [].

示例查询:
?- phrase(squish(Ls), "a,   b,c"), format("~s", [Ls]).
a, b, c

因此,首先关注字符序列和所需“干净”字符串之间关系的清晰声明性描述。然后,您可以使用 SWI-Prolog 的库 (pio) 通过这些语法规则读取文件。要删除逗号前面的所有空格,您只需向上面的 DCG 添加一条规则(压扁//1),我将其留给您作为练习。当然,一个极端的情况是,如果一个逗号后跟另一个逗号,在这种情况下,要求是相互矛盾的:-)

关于string - 序言 : Remove extra spaces in a stream of characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4572807/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com