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

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('靠近出口闸机,直接通行!').

代码说明

  1. 位置判断:通过比较入口、出口的距离值,确定用户处于入口或出口区域
  2. 密码校验:
    • 使用read/1读取用户输入,需注意输入格式:若用户输入纯数字1234.,则用Password = 1234匹配;若输入字符串'1234'.,则改为Password = '1234'
    • 通过两个子句分别处理密码正确、错误的情况,覆盖所有可能场景
  3. 主流程:根据用户位置触发对应的通行逻辑

测试示例

  • 靠近入口场景:输入gate_process(2,5).
    请输入密码:1234.
    密码正确,允许通行!
    
  • 靠近出口场景:输入gate_process(6,3).
    靠近出口闸机,直接通行!
    
  • 密码错误场景:
    请输入密码:5678.
    密码错误,禁止通行!
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:55:21