【发布时间】:2017-11-26 02:55:10
【问题描述】:
由于下学期我将在学校上一门 AI 课程,因此我正在尝试更多地学习 prolog。我已经能够掌握基础知识并且可以做基于关系的东西,但是,我一直在尝试学习排列和组合电子学,它们看起来很简单,但这让我想到了一个我无法弄清楚的问题怎么解决。假设我想知道 1 和 0 的排列,条件是必须连续至少有 4 个 1。 我不知道从哪里开始尝试找到解决方案,但最后我希望代码做这样的事情:
?- placeOnesAndZeros(9,X).
% where 9 is the length of the list/array and X is the permutations
[0,0,0,0,0,0,0,0,0]
[1,1,1,1,0,0,0,0,0]
[0,1,1,1,1,0,0,0,0]
[0,0,1,1,1,1,0,0,0]
[0,0,0,1,1,1,1,0,0]
[0,0,0,0,1,1,1,1,0]
[0,0,0,0,0,1,1,1,1]
[1,1,1,1,0,1,1,1,1]
[1,1,1,1,1,0,0,0,0]
[0,1,1,1,1,1,0,0,0]
[0,0,1,1,1,1,1,0,0]
[0,0,0,1,1,1,1,1,0]
[0,0,0,0,1,1,1,1,1]
[1,1,1,1,1,1,0,0,0]
[0,1,1,1,1,1,1,0,0]
[0,0,1,1,1,1,1,1,0]
[0,0,0,1,1,1,1,1,1]
[1,1,1,1,1,1,1,0,0]
[0,1,1,1,1,1,1,1,0]
[0,0,1,1,1,1,1,1,1]
[1,1,1,1,1,1,1,1,0]
[0,1,1,1,1,1,1,1,1]
[1,1,1,1,1,1,1,1,1]
提前谢谢你!
编辑代码:
printList([ ]).
printList([H|T]) :- print(H), nl, printList(T).
eval([],_).
eval([H|T],[1,0]):-member(H,[1,0]),eval(T,[1,0]).
placeOnesAndZeros(N, L):-length(L,N), eval(L,[1,0]).
【问题讨论】:
-
[0,0,0,0,0,0,0,0,0]没有连续四个 1。此外,您的条件似乎比“它必须连续有四个 1”更强,但是任何时候它有一个 1,那个 1 必须是 4 个或更多连续 1 的一部分。 -
我不好,我试图输入代码会做什么,因为我不知道该怎么做,但你的情况更准确声明我想要什么。
-
如果您完全了解任何 Prolog 以及如何操作列表,那么您需要尝试一些事情。如果您对此不熟悉,那么您应该阅读它们并尝试教程。当有人问这样一个开放式问题时,他们需要编写代码来执行某项任务并且他们“不知道从哪里开始”,那么那些被问到帮助的人不知道你是否只需要一个语言教程或者是什么。所以这个问题太笼统了。通常,在此站点上,您应该进行一些尝试并显示一些代码来指示您更具体地卡在哪里。
-
在任一描述中,
[0,0,0,0,0,0,0,0,0]仍然不是有效的解决方案。 ;) -
一个排列是一个
Transposition,排列并不意味着你填写一个和零,而是你改变它们的位置。
标签: algorithm prolog permutation