我创建了一个谓词,它将检查列表中的所有项是否满足条件 .
对于此示例,谓词检查所有元素是否为两个 Check_Multiples/1 的倍数,这非常有效 .
Check_Multiples/1
我如何检查哪些项目可以添加到列表的开头或结尾,仍然满足谓词?
我试图让返回列表 .
例如:
[2,4,6]
应该返回 [8] (因为谓词不允许0)
[8]
[6,8,10]
应该返回 [4,12]
[4,12]
鉴于Check_Multiples以升序检查列表中的每个元素是否为2的倍数,以下代码应该可以解决问题 . 我猜这是一个条件,否则如果允许[4,6,4,4,8]这样的列表,你可以检查每个元素模数2是否等于0 .
additionsToList([H|T], ResultList) :- Check_Multiples([H|T]), firstElement(H, First), lastElement(T, Last), append([First],[Last], Z), flatten(Z, ResultList). firstElement(2, []). firstElement(First, X) :- X is First-2. lastElement([H|[]], X) :- X is H+2. lastElement([_|T], X) :- lastElement(T, X).
1 回答
鉴于Check_Multiples以升序检查列表中的每个元素是否为2的倍数,以下代码应该可以解决问题 . 我猜这是一个条件,否则如果允许[4,6,4,4,8]这样的列表,你可以检查每个元素模数2是否等于0 .