列表中小于给定数字的数字

问题描述 投票:13回答:6
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采用三个参数:第一个是数字。第二个是数字列表。第三个是...

list prolog
6个回答
13
投票

使用( if -> then ; else )


10
投票

这也可以使用DCG完成:


5
投票

您可以使用include(>(X), List, Result)将其写为单行:


4
投票

((这更像是评论而不是答案,但评论太久了。)


4
投票

无新代码


3
投票

[提出了一个逻辑上纯的解决方案,它利用tfilter/3来帮助改善某些(基础)情况下的确定性。

© www.soinside.com 2019 - 2024. All rights reserved.