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.
我正在学习序言,这是我现在遇到的问题
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.