8

我在序言中有一个字符代码列表。

我想把它们变成字符。

例如,

L = "abc" 返回 L = [97,98,99]

假设我从L = [97,98,99]

无论如何将 L 转换回 abc 这样,如果存在方法

convert(L, X)返回X = abc

谢谢。

4

3 回答 3

5

鉴于L="abc", convert(L, X), X = abc我会说您想从序言字符串中获取原子(请参阅数据类型描述)。我猜你想要atom_codes/2或类似的东西。它应该像L="abc", atom_codes(X, L).文档中所说的那样工作。

不幸的是,目前我的系统中没有 SWI-Prolog。但这里是包含atom_codes/2的YAP

YAP 6.3.2 (x86_64-linux): Sat Sep  1 08:24:15 EEST 2012
MYDDAS version MYDDAS-0.9.1
?- L="abc", atom_codes(X,L).
L = [97,98,99],
X = abc

也不要忘记,如果您需要输出字符串,则不需要将其转换为 atom。请参阅SWI(或YAP)中的 format/2

?- L="abc", format("~s~n", [L]).
abc
L = [97,98,99]
于 2012-12-02T15:57:42.570 回答
4

char_code(?Atom, ?ASCII)在地图列表中使用。

char_code(?Atom, ?ASCII) 在字符和单个字符的 ASCII 值之间转换。(16)

来源

于 2012-12-02T15:48:39.917 回答
4

字符表示为长度为 1 的原子。您可以生成它们:

  • 在读取时通过更改 Prolog 标志double_quotes。有关更多信息,请参阅这个那个链接。

    :- set_prolog_flag(double_quotes, chars).
    
  • 动态地,您可以使用atom_codes/2atom_chars/2。或者你可以char_code/2直接使用。

于 2012-12-04T16:42:28.430 回答