Prolog:如何组成两个 "functions",以找到我列表中方块的最小值?

Prolog: How to compose two "functions", to find the min of the squares of my list?

我正在学习序言,这是我现在遇到的问题

Write a Prolog function that takes two parameters: an input list, and an output variable that is the smallest one among the squares of each number in the input list

到目前为止,我已经能够进行平方函数

square([], []).  
square([First | Rest], [FirstSquared | SquareRest]) :-
    FirstSquared is First * First,
    square(Rest, SquareRest).

但我不知道如何调用这个新列表作为参数,在 SWI-Prolog 中伪调用时看起来像这样

min(square[result_List], Answer).
Answer = *minimum number of list of squares*

或者有没有更简单的方法在 Prolog 中实现它?如果您能解释一下为什么在 Prolog 中以某种方式做事背后的逻辑,那就太好了,因为我更习惯于使用 C++ 和 C# 进行编码。谢谢!

在 Prolog 中工作的主要范例之一是状态转换。您的 square(也许更好地命名为 squared)谓词将列表转换为正方形列表;剩下的就是找到该列表中的最小元素:

min_square(L, M):-
    squared(L, LS),
    min_list(LS, M).

编写您自己的 min_list/2 应该很简单。只需遵循您在 squared/2 谓词中使用的相同代码框架。

掌握了这些之后,代码开发的下一步就是 将两个处理阶段 融合为一个,正如@CapelliC 建议的那样 ,通过向 squared 关系添加一个参数,即 minimum-so-far.