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

Prolog技术问询:定义avg_num/0谓词实现交互式输入数字求平均值

实现交互式avg_num/0谓词

我来帮你搞定这个Prolog的交互式求平均值需求!下面是完整的可运行代码,以及逐部分的解释:

avg_num :-
    write('Enter a number (or stop to end): '),
    read(Input),
    avg_loop(Input, 0, 0).

avg_loop(stop, Sum, Count) :-
    Count =:= 0,
    writeln('No numbers entered!'), !.
avg_loop(stop, Sum, Count) :-
    Avg is Sum / Count,
    format('Average of the numbers is: ~w~n', [Avg]), !.
avg_loop(Num, Sum, Count) :-
    number(Num),
    NewSum is Sum + Num,
    NewCount is Count + 1,
    write('Enter a number (or stop to end): '),
    read(NextInput),
    avg_loop(NextInput, NewSum, NewCount).
avg_loop(Invalid, Sum, Count) :-
    writeln('Invalid input! Please enter a number or "stop".'),
    write('Enter a number (or stop to end): '),
    read(NextInput),
    avg_loop(NextInput, Sum, Count).

代码解释

  • 主谓词 avg_num/0:作为程序入口,先打印输入提示,读取用户的第一个输入,然后调用辅助循环谓词avg_loop/3,初始总和设为0,计数设为0。
  • avg_loop/3 的子句逻辑:
    1. 当输入是stop且没有输入任何数字(计数为0)时,输出提示信息,用!截断避免匹配其他子句。
    2. 当输入是stop且已有数字输入时,计算平均值(总和除以计数),用format/2格式化输出结果。
    3. 当输入是有效数字时,更新总和和计数,再次打印提示并读取下一个输入,递归进入下一轮循环。
    4. 当输入既不是数字也不是stop时,提示输入无效,重新等待用户输入,继续循环。

运行示例

在Prolog解释器中运行的效果如下:

?- avg_num.
Enter a number (or stop to end): 2.
Enter a number (or stop to end): 3.
Enter a number (or stop to end): 7.
Enter a number (or stop to end): stop.
Average of the numbers is: 4.0

注意:输入时要遵循Prolog的语法,数字和stop后面都要加上英文句号.作为输入结束符哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:19:27