prolog - 查找具有从 1 到 K 的所有数字的第一个子列表
问题描述
我需要找到具有从 1 到 K 的所有数字的第一个子列表并返回它及其长度。
提前抱歉编辑不好
所以我检查 1 到 K 是否在子列表中,如果没有,那么我从
NumList ,将其附加到我们的结果(SubList)并递归调用该函数
将尾部作为我们要检查的新列表。
findFirstSubListHavingAllColors( NumList, [Hd|Tl] ,SubList, X):-
( oneToKinSub(SubList,NumList)
-> length(SubList,X)
; delete(NumList,Hd,NumList1),
append(SubList,[Hd],SubList1),
findFirstSubListHavingAllColors(NumList1,Tl,SubList1,_)
).
oneToKinSub(_,[]).
oneToKinSub(SubString,[Hd|Tl]) :-
member(Hd,SubString),
oneToKinSub(SubString,Tl).
例如,如果
数字列表 =[1,2,3]
[高清|Tl] =[ 1,3,1,3,1,3,3,2 ,2,1]
预期的结果应该是 SubList=[1,3,1,3,1,3,3,2] 和 X= 8
解决方案
您可以使用append/3
andsubtract/3
来获取包含所有项目的第一个子列表:
findFirstSubListHavingAllColors( NumList, List ,SubList, Len):-
once((
append(SubList, _, List), % get SubList
subtract(NumList, SubList, []), % test whether NumList is contained in SubList
length(SubList, Len)
)).
once/1
这是为了避免在回溯中获得其他(错误的)解决方案。
推荐阅读
- c++ - 将一些连续的数组单元读取为更大的类型是 UB 吗?
- c++ - 启动 VS2019 并启动分析器或跳过欢迎屏幕
- r - 使用 RcppAlgos (R),是否有一个函数可以获取结果组合中元素的索引?
- spring - 未为 PasswordCompareConfigurer 类型定义 contextSource()?
- ios - 如何为 Google 登录委托功能进行单元测试?
- python - Sympy 潜艇没有价值
- ruby-on-rails - Ruby on rails Validation 不适用于包含 Action 文本等的 Form 对象
- python - 使用 Python 库地址标准化地址
- elasticsearch - Elasticsearch 突出显示的术语各不相同
- java - 从 Android (java) 到 Spring Boot 的日期格式