【发布时间】:2012-11-20 04:24:38
【问题描述】:
我在序言中有一个字符代码列表。
我想把它们变成字符。
例如,
L = "abc"
返回L = [97,98,99]
假设我从L = [97,98,99]开始
如果存在方法,是否可以将 L 转换回 abc
convert(L, X) 返回X = abc
谢谢。
【问题讨论】:
标签: list character-encoding prolog character
我在序言中有一个字符代码列表。
我想把它们变成字符。
例如,
L = "abc"
返回L = [97,98,99]
假设我从L = [97,98,99]开始
如果存在方法,是否可以将 L 转换回 abc
convert(L, X) 返回X = abc
谢谢。
【问题讨论】:
标签: list character-encoding prolog character
鉴于L="abc", convert(L, X), X = abc 我想说你想从序言字符串中获取原子(参见Data types description)。
我猜你想要atom_codes/2 或类似的东西。根据文档,它应该像L="abc", atom_codes(X, L). 一样工作。
不幸的是,目前我的系统中没有 SWI-Prolog。但这里是YAP,其中包含atom_codes/2
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。见format/2 in SWI(或in YAP)
?- L="abc", format("~s~n", [L]).
abc
L = [97,98,99]
【讨论】:
【讨论】:
【讨论】:
set_prolog_flag(double_quotes, chars),然后 "abc" 是 [a,b,c]。一般来说,这种表示比[97, 98, 99]更具可读性。
L="abc", format("~s~n", [L]).,你会看到它报错TYPE ERROR- format/3: expected text, got [~,s,~,n]。所以我觉得某些 Prolog 系统的开发人员将字符以数字表示作为默认行为是有原因的。
format('~s~n',[L]) 更可取。