如何 "return" 序言中的两个值

How to "return" two values in prolog

我有两个函数,第一个计算列表中有多少负元素,第二个用负元素索引形成列表。我需要编写一个名为 goal_negative_positions 的函数,它将“return”两个值。我的版本不起作用,它总是 return 错误。怎么改正?

negative_count([], 0):-!.
negative_count([Head|Tail], Count):-
  Head >= 0, !, 
  negative_count(Tail, Count).
negative_count([_Head|Tail], Count):-
  negative_count(Tail, TailCount), 
  Count is TailCount + 1.

negative_positions([], _, []):-!.
negative_positions([Head|Tail], CurPos, Positions):-
  NextPos is CurPos + 1, (
    Head >= 0, !, 
    negative_positions(Tail, NextPos, Positions);
    
    negative_positions(Tail, NextPos, TailPositions), 
    Positions = [NextPos|TailPositions]
  ).

goal_negative_positions([], [], 0).
goal_negative_positions(Start, Result, count):-
    negative_count(Start, count),
  negative_positions(Start, -1, Result).

goal_negative_positions 的最后一个定义有问题。 count 参数应以大写字母开头:

goal_negative_positions(Start, Result, Count):-
  negative_count(Start, Count),
  negative_positions(Start, -1, Result).

在以小写字母 a 开头的 prolog 参数中,工作方式类似于常量。在您的情况下,如果 negative_count(Start, Count) Count 等于 count.

,则 goal_negative_positions(Start, Result, count) 将为真