character-encoding - SWI prolog,char_type,ascii / alnum,为什么这么多字符?如何解决?
问题描述
我只是想检查一下,SWI-prolog 将什么字符视为“alnum”。我的问题条款是:
findall(X,char_type(X,alnum),Lalnum),length(Lalnum,N).
和 SWI 的回答:
Lalnum = ['0', '1', '2', '3', '4', '5', '6', '7', '8'|...],
N = 816459.
我很惊讶——为什么这么多?然后我决定检查纯'ascii'集 - 毕竟,根据文档页面:
http://www.swi-prolog.org/pldoc/doc_for?object=char_type/2
其中只有 128 个(7 位字符集)。我的明显问题是:
findall(X,char_type(X,ascii),Lascii),length(Lascii,N).
和 SWI 的回答:
Lascii = ['\000\', '\001\', '\002\', '\003\', '\004\',
'\005\', '\006\', '\a', '\b'|...],
N = 2176.
我比以前更惊讶了……怎么了?问题出在哪里?我的问题?使用我的 SWI-prolog 安装?用我的系统?这是:
SWI Prolog 7.7.13, with ascii encoding:
current_prolog_flag(encoding,X).
X = ascii.
Win 8.1 64bit, with code page 852.
以及如何解决?
先感谢您
编辑:可能我已经找到了第二个问题的答案:“如何解决它”。看来,附加条款:
sort(Lascii,SortedLascii)
删除重复并保留基本的 128 个字符集。
但我还是不明白为什么第一个子句会产生这么多结果......???
解决方案
有这么多字符的原因是 Unicode。它将根据您当前的语言环境返回所有相关字符。
包括 Unicode:
仅限字母:
?- :(C, char_type(C, alpha), L), length(L, Len).
L = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'|...],
Len = 2568.
字母数字字符:
?- findall(C, char_type(C, alnum), L), length(L, Len).
L = ['0', '1', '2', '3', '4', '5', '6', '7', '8'|...],
Len = 2578.
现在只有ASCII:
仅限字母:
?- findall(C, (char_type(C, alpha), char_type(C, ascii)), L), length(L, Len).
L = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I'|...],
Len = 52.
字母数字:
?- findall(C, (char_type(C, alnum), char_type(C, ascii)), L), length(L, Len).
L = ['0', '1', '2', '3', '4', '5', '6', '7', '8'|...],
Len = 62.
是什么导致了混乱?
因为返回的项目数量太多,所以输出被削减,省略的项目被省略号替换。更多细节在这里: https ://www.swi-prolog.org/FAQ/AllOutput.html
要更改此行为并查看完整输出,请使用以下配置选项:
set_prolog_flag(
answer_write_options,
[
quoted(true),
portray(true),
spacing(next_argument)
]
),
这样,您将看到所有 Unicode 字符并且不会再感到困惑。请注意,与默认值的唯一区别是缺少max_depth(10)
.
推荐阅读
- node.js - 使用 Node js 按周/月/年对文档进行分组
- javascript - React 输入 defaultValue 重新渲染
- flutter - 视频播放器中的颤振问题
- bash - Bash:使用 getopts 解析参数后的选项
- django - 分配前引用的 Django UnboundLocalError 局部变量“注册”
- powershell - Powershell 图形用户界面。从动态列表框中选择一个项目,随后从 Active Directory 中卸载用户信息
- c# - 如何在 WinForms 按钮的文本之前添加图像图标?
- docker - Docker多阶段不调用入口点
- wordpress - 收到一定数量的视图后如何在 WordPress 上隐藏内容
- python - 使用Django、python和vue axiox提交表单后重定向到主页