在prolog中列出语句if

在prolog中列出语句if,prolog,Prolog,我想用一个列表来做if语句。我们有一个带有数字的列表,极端([1,5,-10,-22,33,-41,16,58,10],LP)。我怎么用if来做呢?假设我想让数字小于-10,大于12。因此,它将是 LP=[-22,-41,33,16,58]。它能以某种方式使用吗?另外,我想具体一点,我只想在if语句中使用数字,而不是字符串。使用类似的方法可能适合您的需要: extreme(L, NL):- include(in_range, L, NL). in_range(X):- number(X

我想用一个列表来做if语句。我们有一个带有数字
的列表,极端([1,5,-10,-22,33,-41,16,58,10],LP)
。我怎么用if来做呢?假设我想让数字小于-10,大于12。因此,它将是
LP=[-22,-41,33,16,58]
。它能以某种方式使用吗?另外,我想具体一点,我只想在if语句中使用数字,而不是字符串。

使用类似的方法可能适合您的需要:

extreme(L, NL):-
  include(in_range, L, NL).

in_range(X):-
  number(X),
  (X < -10 ; X > 12).

您可以使用
include/3
。我不理解您的示例中的预期输出,例如-10不小于-10并包含在预期结果中,33大于12且未包含…不要将其视为“如果”。把它想象成描述条件。例如,
(E<-10;E>12)
。使用递归谓词定义包含这些条件的列表。在这个网站上,搜索
[prolog]过滤器列表
以获得许多示例。@gusbro你是对的,我做得不对,我想知道我是如何做到的,我edit@lurker我已经搜索过了,但没有找到任何东西。它有相似之处,但没有相似之处。例如,它找到了min或max。我没有搜索它。发布了大量类似的问题和答案。如果你研究它们,你可以应用到你的问题上。@false:是的,起初我打算建议只使用
X#12
,但如果列表中有类似
a的内容,就会产生错误,因此我添加了
number/1
呼叫,这让我找到了答案。现在,您将如何使OP定义的
extreme/2
,纯?@gusbro:将
number/1
替换为。也就是说,为实例化不足的查询生成实例化错误。@gusbro:而不是
X#<10;X#>12
更喜欢
X#=10,X#=11,X#=12
或者更喜欢inf.9\/13中的
X..sup
@false:我喜欢你的建议,用'number\u itype/
1,而不仅仅是
number/1`。但如果只接受数字,为什么要使用CLP?(使用中电大约是一个数量级的“慢”,至少在SWI方面是如此)。@gusbro:事实上,我在第一次发表评论的时候并没有想到它们。此外,也许一个更好的类型是合适的:也就是说,如果argument已经是一个受约束的变量,那么它将成功。
extreme(L, NL):-
  include(in_range, L, NL).

in_range(X):-
  number_or_fd_var_itype(X),
  X in inf..(-9)\/13..sup.

number_or_fd_var_itype(N):-
   (
     fd_var(N) -> true ;
     ( functor(N,_,_),number(N) )
   ).