prolog - Prolog中的条件写入

我有包含飞机时刻表的 Prolog 数据库。这是它的样子:

fly(id, from, to, days(1, 0, 1, 0, 1, 0, 1)).

如您所见,days 谓词中有 7 个值 - 从星期一到星期日。我想要做的是每天打印,其中值为 1,但将其打印为文本。我试图使用 if - else 语句,但在这种情况下它不起作用:

(   
        A = 1 -> write(monday), nl;
        (
            B = 1 -> write(tuesday), nl;
            (
                C = 1 -> write(wednesday), nl;
                (
                    D = 1 -> write(thursday), nl;
                    (
                        E = 1 -> write(friday), nl;
                        (
                            F = 1 -> write(saturday), nl;
                            (
                                G = 1 -> write(sunday), nl
                            )
                        )
                    )
                )
            )
        )
    )

在示例中它应该打印 4 天:

monday
wednesday
friday
sunday

我该怎么做?

最佳答案

我找到了一种方法,基本上,您需要创建 2 个列表。第一个是你的日子,第二个是日子的名字。然后,您需要迭代它们,但是,由于 Prolog 中没有 loop 结构,您必须使用递归函数来完成。

下面是我的实现方式:

iterate_weeks([], _).
iterate_weeks([H|T], [X|Y]) :- H = 1, write(X), nl, iterate_weeks(T, Y).
iterate_weeks([H|T], [_|Y]) :- H = 0, iterate_weeks(T, Y).

print_fly_days(From, To):- 
    fly(_, From, To, _, _, days(A,B,C,D,E,F,G)),
    L = [A,B,C,D,E,F,G],
    T = [monday, tuesday, wednesday, thursday, friday, saturday, sunday],
    iterate_weeks(L, T).

https://stackoverflow.com/questions/74452229/

相关文章:

python - Pandas dataframe,连续查找所选列中的最大值,并根据该值查找另一列的

javascript - 升级到 React 18 后检测到额外的点击。为什么?

macos - 在 Mac m2 Monterey 上安装 home-brew 时出现问题

swift - 如何为等待函数调用添加超时

typescript - 无法在 Apollo GraphQL 中定义自定义标量,TypeScrip

blockchain - 在 remix Ide 中,这个通知是什么意思? "You have no

python - 通用迭代器注释 Python

ruby-on-rails - 无法使用带 Rails 的 PostgreSql 创建数据库

typescript - 剧作家API测试: intercept API request

python - ModuleNotFoundError 即使模块被识别