我有包含飞机时刻表的 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 时出现问题
typescript - 无法在 Apollo GraphQL 中定义自定义标量,TypeScrip
blockchain - 在 remix Ide 中,这个通知是什么意思? "You have no
ruby-on-rails - 无法使用带 Rails 的 PostgreSql 创建数据库