You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GNU Prolog中如何在pl文件内使用get_code获取字符ASCII值

问题原因
  • 代码中先调用了read(X),read/1谓词的作用是读取完整的Prolog项,会等待用户输入后按下回车才完成解析,此时输入流中残留的换行符ASCII值为10,后续my_get_code(X)读取的就是这个换行符,因此无论输入什么内容都会固定输出10。
  • 自定义my_get_code/1中的get_linedit_prompt('')是错误用法,该谓词用于获取当前行编辑提示符,设置空提示符应该使用set_linedit_prompt('')。
正确实现方案

首先去掉冗余的read/1调用,直接读取输入流的字符ASCII值,添加大写字母的范围判断逻辑,符合条件则加32得到小写ASCII值,其余字符保持原值即可,完整代码如下:

% 无提示读取单个字符的ASCII值
my_get_code(C) :- 
    set_linedit_prompt(''),
    % 可选:关闭输入缓冲,输入字符后无需按回车即可立刻读取
    % set_stream_input(user_input, buffer(false)),
    get_code(C).

% 大写ASCII转小写逻辑
lower_case(UpperCode, LowerCode) :-
    UpperCode >= 65, UpperCode =< 90, % 匹配A-Z的ASCII范围
    LowerCode is UpperCode + 32,
    !. % 截断避免匹配下方兜底规则
% 非大写字符直接返回原值
lower_case(Code, Code).

% 调用入口:读取字符、转换、输出结果
lower :-
    my_get_code(InputCode),
    lower_case(InputCode, OutputCode),
    write('输入字符ASCII:'), write(InputCode), nl,
    write('转换后ASCII:'), write(OutputCode), nl,
    write('转换后字符:'), put_char(OutputCode), nl.

使用说明:加载代码后在GNU Prolog交互端输入lower.触发执行,输入需要转换的字符即可得到对应结果。如果开启了无缓冲模式,输入字符后会立刻返回结果,否则需要按下回车确认输入。

内容的提问来源于stack exchange,提问作者Student_in_computer_science

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:45:03