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 的子句逻辑:
- 当输入是
stop且没有输入任何数字(计数为0)时,输出提示信息,用!截断避免匹配其他子句。 - 当输入是
stop且已有数字输入时,计算平均值(总和除以计数),用format/2格式化输出结果。 - 当输入是有效数字时,更新总和和计数,再次打印提示并读取下一个输入,递归进入下一轮循环。
- 当输入既不是数字也不是
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
相关产品推荐
相关产品推荐

