如何在Prolog中拆分奇偶列表并同时输出原列表?
解决Prolog中同时打印原列表、偶数列表和奇数列表的问题
你的even_odd/3谓词已经正确实现了列表奇偶元素拆分的逻辑,但它仅定义了原列表、偶数列表、奇数列表三者的关系,不会主动输出内容。要实现同时打印这三个列表,可通过以下两种方式:
方式一:查询时直接结合打印语句
在Prolog解释器中执行带打印逻辑的查询,示例如下:
?- List = [1,2,3,4,5], even_odd(List, Even, Odd), write('原列表: '), write(List), nl, write('偶数列表: '), write(Even), nl, write('奇数列表: '), write(Odd), nl.
执行后输出:
原列表: [1,2,3,4,5] 偶数列表: [2,4] 奇数列表: [1,3,5] true.
方式二:封装专门的打印谓词
定义一个整合拆分与打印逻辑的新谓词,比如print_even_odd/1:
print_even_odd(List) :- even_odd(List, Even, Odd), write('原列表: '), write(List), nl, write('偶数列表: '), write(Even), nl, write('奇数列表: '), write(Odd), nl.
查询时直接调用该谓词即可:
?- print_even_odd([1,2,3,4,5]).
输出结果与方式一一致。
说明:nl是换行谓词,用于分隔不同列表的输出;write/1负责输出指定内容,原even_odd/3不需要修改,只需基于它扩展打印逻辑。
内容的提问来源于stack exchange,提问作者aish 1352
相关产品推荐
相关产品推荐

