Prolog入门闸机验证程序问题:密码校验始终返回no
修复Prolog双闸机密码校验逻辑
问题分析
需求是实现双闸机逻辑:根据入口、出口闸机的距离判断用户位置;若靠近入口闸机,需验证密码(正确密码为1234),但当前密码校验逻辑始终返回no。
常见错误原因及修复方案
密码校验失败通常源于以下几点:
- 输入密码与预设值的类型不匹配(比如把数字当作字符串处理,或反之)
- 校验条件的逻辑判断错误
- 输入读取方式不当,导致获取的密码值与预期不符
修正后的完整代码
% 判断用户位置:距离入口更近则判定为入口区域 user_position(EntryDist, ExitDist, entry) :- EntryDist < ExitDist. user_position(EntryDist, ExitDist, exit) :- EntryDist >= ExitDist. % 密码校验逻辑:读取输入并匹配正确密码1234 check_password :- write('请输入密码:'), read(Password), Password = 1234, % 若输入为带引号的字符串,需改为Password = '1234' write('密码正确,允许通行!'). check_password :- write('密码错误,禁止通行!'). % 主逻辑:处理闸机流程 gate_process(EntryDist, ExitDist) :- user_position(EntryDist, ExitDist, entry), check_password. gate_process(EntryDist, ExitDist) :- user_position(EntryDist, ExitDist, exit), write('靠近出口闸机,直接通行!').
代码说明
- 位置判断:通过比较入口、出口的距离值,确定用户处于入口或出口区域
- 密码校验:
- 使用
read/1读取用户输入,需注意输入格式:若用户输入纯数字1234.,则用Password = 1234匹配;若输入字符串'1234'.,则改为Password = '1234' - 通过两个子句分别处理密码正确、错误的情况,覆盖所有可能场景
- 使用
- 主流程:根据用户位置触发对应的通行逻辑
测试示例
- 靠近入口场景:输入
gate_process(2,5).请输入密码:1234. 密码正确,允许通行! - 靠近出口场景:输入
gate_process(6,3).靠近出口闸机,直接通行! - 密码错误场景:
请输入密码:5678. 密码错误,禁止通行!
内容的提问来源于stack exchange,提问作者Abhipriyo Banerjee
相关产品推荐
相关产品推荐

