prolog - Prolog - 在列表中查找最小元素
问题描述
我试图通过比较正方形来找到列表中的最小元素。我做了以下事情:
min_elem([Min],Min).
min_elem([Head | Tail], Min) :-
min_elem(Tail, Tail_min),
Min is min(Head ^ 2, Tail_min ^ 2).
它实际上适用于一些测试,但我在跟踪以下测试时注意到:
因此,在它检查正方形之后,它将使用前一个。即,当 8^2 变为 64,然后变为 64^2。我怎样才能防止这种情况?谢谢!!!
解决方案
如果我对您的理解正确,那么您想min_elem(XS,X)
成为真实X
的当且仅当XS
.
基于这样的理解,有两个问题:
在您的基本情况下,您没有选择广场。
在您的递归情况下,您正在取尾部平方的最小值的平方。
要解决这些问题,请将基本情况中的最小值平方并删除递归情况中的平方:
min_elem([X],Min) :- Min is X ^ 2.
min_elem([Head | Tail], Min) :-
min_elem(Tail, Tail_min),
Min is min(Head ^ 2, Tail_min).
推荐阅读
- javascript - 在 NodeJS 中是否可能缓存未命中以及如何获取它?
- python - Dockerized Python 应用程序在 EC2 上占用 100% CPU
- sql-server-2012 - 创建到 SQL Azure 数据库的链接服务器不起作用
- postgresql-11 - 在 Windows 10 上为 PostgreSQL 11 安装 Pgroonga
- php - Symfony:更新没有相关实体的实体
- python - pandas 在分组列中使用 NaN 值进行转换
- firebase - 如何将 google 服务帐户直接集成到 firebase 项目中?
- javascript - 将 font-awesome 作为组件添加到 Vue.js 后,热重载非常慢
- r - 如何使用 rvest 从抓取中排除标签
- bash - tcpdump 未正确设置路径