首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >prolog中的字符串操作

prolog中的字符串操作
EN

Stack Overflow用户
提问于 2012-12-05 17:27:03
回答 3查看 4.7K关注 0票数 4

前提

因此,我试图将一个给定的字符串分解为一个字符列表,然后这些字符将被编辑/更改并重新分配到列表中,然后列表将被重新构造为一个字符串。

举个例子:

给定String : "ABCDEFG"

字符list : [A,B,C,D,E,F,G]

操作将列表更改为如下所示:E,F,G,H,I,J,K

然后被重构成一个字符串:

代码语言:javascript
代码运行次数:0
运行
复制
"EFGHIJK"

问题

我正在寻找一种方法来访问字符串中的单个元素。如果是Java,我将使用类似于charAt(int i)的命令,但我不知道这种命令是否存在于prolog中。

Note

我是一个新的prolog程序员,所以我不熟悉大多数prolog操作。

耽误您时间,实在对不起。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-05 20:48:05

字符串--它是一个字符代码列表,而一个原子--它是原子的,也就是不可分割的,但是有原子/5来访问原子数据的一部分。

下面是一些字符串示例:

代码语言:javascript
代码运行次数:0
运行
复制
1 ?- L = "ABCDEF".
L = [65, 66, 67, 68, 69, 70].

2 ?- L = "ABCDEF", maplist(succ, L, N), format('~s', [N]).
BCDEFG
L = [65, 66, 67, 68, 69, 70],
N = [66, 67, 68, 69, 70, 71].

3 ?- L = "ABCDEF", maplist(succ, L, N), format('~s', [N]), atom_codes(A, N).
BCDEFG
L = [65, 66, 67, 68, 69, 70],
N = [66, 67, 68, 69, 70, 71],
A = 'BCDEFG'.

如果分析和转换需要详细信息,那么通常最好使用DCGs

票数 3
EN

Stack Overflow用户

发布于 2012-12-05 17:35:33

字符串是Prolog中的原子。

在您的例子中,您可以这样做:"EFGHIJK“= List。

这里有一个很好的帖子:http://obvcode.blogspot.com/2008/11/working-with-strings-in-prolog.html

票数 1
EN

Stack Overflow用户

发布于 2012-12-05 17:41:47

你可以试试这个

代码语言:javascript
代码运行次数:0
运行
复制
t(S_in, S_out) :-
    maplist(modif, S_in, S_temp),
    string_to_list(S_out, S_temp).


modif(In, Out) :-
    atom_codes('A', [X]),
    atom_codes('E', [Y]),
    Out is In + Y - X.

字符串是Prolog中的代码列表。因此,maplist对列表中的每个代码进行了修改(一种功能方式)。string_to_list可以在输出端获得一个字符串,而不是一个代码列表。

您可以快速地编写修饰语,但我用您可以轻松理解的方式编写它。

输出是

代码语言:javascript
代码运行次数:0
运行
复制
?- t("ABCDEFG", Out).
Out = "EFGHIJK".
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13728938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档