xMenores(_,[],[]).
xMenores(X,[H|T],[R|Z]) :-
xMenores(X,T,Z),
X > H,
R is H.
xMenores
具有三个参数:
规则xMenores
的目标是获得一个列表,该列表的编号(第二个参数)小于第一个参数上的值。例如:
?- xMenores(3,[1,2,3],X). X = [1,2]. % expected result
问题是,当
xMenores
为假并且我的编程技巧在序言中几乎为空时,false
返回X > H
。因此:
?- xMenores(4,[1,2,3],X). X = [1,2,3]. % Perfect. ?- xMenores(2,[1,2,3],X). false. % Wrong! "X = [1]" would be perfect.
我考虑
X > H, R is H.
,因为我需要每当X
大于H
时,R
就取H
的值。但是我不知道像Prolog中的if或类似的控件结构可以处理此问题。
请提供任何解决方案?谢谢。
xMenores(_,[],[])。 xMenores(X,[H | T],[R | Z]):-xMenores(X,T,Z),X> H,R为H。xMenores采用三个参数:第一个是数字。第二个是数字列表。第三个是...
( if -> then ; else )
这也可以使用DCG完成:
您可以使用include(>(X), List, Result)
将其写为单行:
((这更像是评论而不是答案,但评论太久了。)
无新代码
[meta-predicate提出了一个逻辑上纯的解决方案,它利用tfilter/3
来帮助改善某些(基础)情况下的确定性。