- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有人向我提出以下问题:
任何整数列表都可以(唯一地)分解为“奇偶校验游程”,其中每个游程都是原始列表中连续偶数或奇数的(最大)序列。例如,列表列表 = [8,0,4,3,7,2,-1,9,9]
可以分为 [8, 0, 4]
、[3, 7]
、[2]
和 [-1, 9, 9]
编写一个谓词 paruns(List, RunList)
将数字列表转换为相应的奇偶校验运行列表。例如:
?- paruns([8,0,4,3,7,2,-1,9,9], RunList).
RunList = [[8, 0, 4], [3, 7], [2], [-1, 9, 9]]
这是我尝试过的代码,由于一个建议,它似乎适用于上述示例案例,但我遇到了一个问题,当我运行 paruns([8,0,4], RunList)。
它打印 RunList = [[8,0,4],[]]
。任何建议将不胜感激:)
paruns([],[]).
paruns([Head | Tail], [E, O | S]) :-
even([Head | Tail], E, Last),
odd(Last, O, Last1),
paruns(Last1, S).
even([Head | Tail], [], [Head | Tail]) :-
Head mod 2 =:= 1.
even([Head | Tail], [Head | L], Last) :-
Head mod 2 =:= 0,
even(Tail, L, Last).
even([],[],[]).
odd([Head | Tail], [], [Head, Tail]) :-
Head mod 2 =:= 0.
odd([Head | Tail], [Head | L], Last) :-
Head mod 2 =:= 1,
odd(Tail, L, Last).
odd([],[],[]).
最佳答案
Prolog 的一个主要吸引力在于它的关系性质。这意味着,只要我们坚持足够通用的原语,我们通常可以在几个方向使用Prolog谓词。
在这个具体案例中,由于您正在对整数进行推理,因此我强烈建议您使用 Prolog 系统的CLP(FD) 约束来从这种通用性中受益。请参阅clpfd有关这一重要声明性功能的更多信息。
此外,由于您描述的是列表,请考虑使用DCG 表示法 ( dcg )。
这是适合您任务的关系解决方案:
parity_runs([], []) --> [].parity_runs([E|Es], Os) --> [E], { E mod 2 #= 0 }, parity_runs(Es, Os).parity_runs(Es, [O|Os]) --> [O], { O mod 2 #= 1 }, parity_runs(Es, Os).
我们可以将它用于您发布的测试用例,其中指定了列表:
?- phrase(parity_runs(Es, Os), [8,0,4,3,7,2,-1,9,9]).Es = [8, 0, 4, 2],Os = [3, 7, -1, 9, 9] ;false.
此外,我们还可以将其用于其他方向。例如,假设运行已知,但列表未知:
?- phrase(parity_runs([2,4], [1,3]), Ls).Ls = [2, 4, 1, 3] ;Ls = [2, 1, 4, 3] ;Ls = [2, 1, 3, 4] ;Ls = [1, 2, 4, 3] ;Ls = [1, 2, 3, 4] ;Ls = [1, 3, 2, 4] ;false.
此外,我们还可以发布最一般的查询,其中什么都不知道:
?- phrase(parity_runs(Es, Os), Ls).Es = Os, Os = Ls, Ls = [] ;Es = Ls, Ls = [_2012],Os = [],_2012 mod 2#=0 ;Es = Ls, Ls = [_256, _258],Os = [],_256 mod 2#=0,_258 mod 2#=0 ;Es = Ls, Ls = [_826, _832, _838],Os = [],_826 mod 2#=0,_832 mod 2#=0,_838 mod 2#=0 ;etc.
为了公平列举答案,我们可以使用迭代深化:
?- length(Ls, _), phrase(parity_runs(Es, Os), Ls).Ls = Es, Es = Os, Os = [] ;Ls = Es, Es = [_168],Os = [],_168 mod 2#=0 ;Ls = Os, Os = [_550],Es = [],_550 mod 2#=1 ;Ls = Es, Es = [_770, _776],Os = [],_770 mod 2#=0,_776 mod 2#=0 ;Ls = [_770, _776],Es = [_770],Os = [_776],_770 mod 2#=0,_776 mod 2#=1 ;etc.
关于Prolog 代码将列表的各个部分拆分为连续的偶数和奇数部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43118293/
我有一个数组列表: ArrayList allText = new ArrayList(); 其内容是这样的: [Alabama - Montgomery, Alaska - Juneau, Ariz
我有一个 timestamp 格式的开始和结束时间。我想将它们分成多个时间段,例如 1 小时。 $t1 = strtotime('2010-05-06 12:00:00'); $t2 = strtot
我需要将 span10 分成 3 列,但我无法将它们排列起来。我应该在 span10 中添加一个 span12 还是使用 offset 还是??
我有一个时间序列。我想从早上 8 点到第二天早上 7:59 分成 24 小时的区 block 。我知道如何按日期分组,但我尝试过使用 TimeGroupers 和 DateOffsets 处理这个 8
我收到“街道号码邮政编码城市”形式的地址(作为字符串)。我想要做的是将街道和号码与邮政编码和城市分开。通常你可以按空格分割。但有些街道名称中也有空格,例如:“Emile Van Ermengemlaa
我有一个用户列表。其中一些用户处于第一状态,而其他用户处于第二状态。所以我想要的是将这个列表显示为首先,它按排序顺序显示存在 = 1 的用户,然后按排序顺序显示存在 = 2 的用户。这里的排序是根据用
我感觉我搜索了整个网络,但找不到一种方法将不同高度的 div 很好地划分为 3 列,就像 http://www.ing.nl 上那样 headertekst headerteksttesth
Bootstrap 3 按钮下拉菜单出现问题。你可以在这里看到我的两个例子: http://www.bootply.com/W1dLusilMk http://www.bootply.com/GGBv
我在 php 中执行以下操作 foreach($QuestionAsekd as $k => $v){ $grp_name = $v['NAME']; $groupValues[$gr
我找到了一种用pandas解析html的绝妙方法。我的数据格式有点奇怪(见下文)。我想将这些数据拆分为 2 个单独的数据帧。 注意每个单元格如何由,分隔...是否有任何真正有效的方法来分割所有这些单元
HTML 看起来像这样,但我不允许对其进行更改。我只能编写 CSS 将其变成 2 列。 Povezave www.behance.net www.kiberpipa.org www.o
假设我有以下数据框“A” utilization utilization_billable service 1
我需要将 2 个文本框拉伸(stretch)到 100% 的浏览器宽度,以及一个提交按钮。所有三个都应该在一行中,我试图拉伸(stretch)它但它没有发生......有什么想法吗? 代码: .sea
我是一名优秀的程序员,十分优秀!