- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
鉴于数据库中的以下事实:
foo(a, 3).
foo(b, 2).
foo(c, 4).
foo(d, 3).
foo(e, 2).
foo(f, 6).
foo(g, 3).
foo(h, 2).
find_min_1(Min, As) :-
setof(B-A, foo(A, B), [Min-_|_]),
findall(A, foo(A, Min), As).
?- find_min_1(Min, As).
Min = 2,
As = [b, e, h].
setof/3
, 我可以用
aggregate/3
:
find_min_2(Min, As) :-
aggregate(min(B), A^foo(A, B), Min),
findall(A, foo(A, Min), As).
?- find_min_2(Min, As).
Min = 2,
As = [b, e, h].
aggregate(min(...), ...)
会抛出错误!
find_min_3(Min, As) :-
setof(B-A, foo(A, B), [Min-First|Rest]),
min_prefix([Min-First|Rest], Min, As).
min_prefix([Min-First|Rest], Min, [First|As]) :-
!,
min_prefix(Rest, Min, As).
min_prefix(_, _, []).
?- find_min_3(Min, As).
Min = 2,
As = [b, e, h].
std::partition_point
这样的谓词来自 C++ 标准库? partition_point/4
:
partition_point(Pred_1, List, Before, After) :-
partition_point_1(List, Pred_1, Before, After).
partition_point_1([], _, [], []).
partition_point_1([H|T], Pred_1, Before, After) :-
( call(Pred_1, H)
-> Before = [H|B],
partition_point_1(T, Pred_1, B, After)
; Before = [],
After = [H|T]
).
find_min_4(Min, As) :-
setof(B-A, foo(A, B), [Min-X|Rest]),
partition_point(is_min(Min), [Min-X|Rest], Min_pairs, _),
pairs_values(Min_pairs, As).
is_min(Min, Min-_).
?- find_min_4(Min, As).
Min = 2,
As = [b, e, h].
最佳答案
What is the idiomatic approach to this class of problems?
Is there a way to simplify the problem?
append/3
不要树立好榜样。想想
append(As,As,AsAs)
.
find_min(Min, As)
的第一个参数是最小值。所以
minimum_with_nodes/2
可能是一个更好的名字。
findall/3
请勿使用
findall/3
除非严格检查用途,否则基本上所有东西都必须研磨。在你的情况下,它碰巧工作。但是一旦你概括
foo/2
一点点,你就会输。这通常是一个问题:您编写一个小程序;它似乎有效。
findall/3
是(与
setof/3
相比)就像瓷器店里的公牛,粉碎了共享变量和量化的精细结构。另一个问题是意外故障不会导致
findall/3
的故障。这通常会导致奇怪的、难以想象的极端情况。
findall/3
有点关系, 也。您的程序是如此具体,以至于您永远不可能对其进行测试。边际变化将使您的测试无效。所以你很快就会放弃执行测试。让我们看看具体是什么:主要是
foo/2
关系。是的,只是一个例子。想想如何设置测试配置在哪里
foo/2
可能会改变。每次更改(写入新文件)后,您都必须重新加载程序。这太复杂了,您可能永远不会这样做。我想你没有一个测试工具。 Plunit 不包括此类测试。
minimum_with(Rel_2, Min, Els)
xfoo/3
使用附加参数,例如:
xfoo(o, A,B) :-
foo(A,B).
xfoo(n, A,B) :-
newfoo(A,B).
你最自然地会得到两个答案
minimum_with(xfoo(X), Min, Els)
.你会用
findall/3
而不是
setof/3
你已经有严重的问题了。或者只是一般:
minmum_with(\A^B^member(A-B, [x-10,y-20]), Min, Els)
.所以你可以在顶层玩,并产生许多有趣的测试用例。
setof/3
有其局限性。理想情况下,你会测试它们。答案不应包含约束,尤其是在相关变量中。这显示了
setof/3
本身有一定的限度。在开拓阶段之后,SICStus 在这种情况下(1990 年代中期)为约束产生了许多错误,后来改为忽略无法处理它们的内置程序中的约束。另一方面,SWI 在这里做了完全未定义的事情。有时东西会被复制,有时不会。举个例子:
setof(A, ( A in 1..3 ; A in 3..5 ), _)
和
setof(t, ( A in 1..3 ; A in 3.. 5 ), _)
.
call_unconstrained(Goal_0) :-
call_residue_vars(Goal_0, Vs),
( Vs = [] -> true ; throw(error(representation_error(constraint),_)) ).
但是,请注意 SWI 具有虚假约束:
?- call_residue_vars(all_different([]), Xs).
Xs = [_G1130].
目前尚不清楚这是否是一项功能。自
call_residue_vars/2
推出以来,它就一直存在。大约 5 年前。
关于prolog - 从谓词中收集所有 "minimum"解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27317069/
我是 Haskell 术语的初学者。我必须做一个显示所有最低位置的练习。 例如: [1,2,3,1,1] => 0,3,4 这些是最小位置。 我尝试用两种方法来做到这一点,但这些都不起作用。 请有人帮
我需要找到整个矩阵的最小值,它是“坐标”。在像 这样的矩阵中 matrix = 8 7 6 5 4 3 2 1 最小值为 (2, 4) 处的 1。 最佳答案 这可以很简单地通过使用
给定一个正整数“l”和“r”。找到最小的数字“n”,使得 l r: cnt = 32 for i in range(l, r+1): s = bi
numpy.minimum 似乎不适用于复数: np.minimum(5+3*1j,4+30*1j) (4+30j) 我想保持最大幅度的值。它只比较实部。元素最小比较的任何其他功能? MATLAB m
鉴于数据库中的以下事实: foo(a, 3). foo(b, 2). foo(c, 4). foo(d, 3). foo(e, 2). foo(f, 6). foo(g, 3). foo(h, 2).
假设我们给出了给定图 G 的最小生成树 T(有 n 个顶点和 m 个边)和一条权重为 w 的新边 e = (u, v),我们将添加到 G 中。 I) 检查 T 是否仍然是 MST。II) 如果不是,请
我有一个名为“posts”的elasticsearch索引。 http://127.0.0.1:9200/posts/doc/_count返回{"count":240000,"_shards":{"t
我在 MySQL 中有一个表,名称如下 我有两件事要处理 1- 停用所有未使用的书籍 isActive = 1 - Active isActive = 0 - Inactive is_inuse =
我的站点位于 www.ethoma.com/wd/ . 如您所见,我已经使用自己的代码实现了主题和所有菜单。我想在我的网站上安装 WordPress,这样我就可以简单地在 WordPress 上输入我
当我在 bool 数组上使用 numpy 函数 minimum() 和 maximum() 时,结果类型打印为 numpy.int32。但是,与 numpy.int32 类型的比较失败(即使在转换之后
我在分布式系统中遇到分片移动问题。 【问题】 最初每个分区负责任意数量的分片。 (这个数字可以是任意的,因为系统支持将分片从一个分区移动到另一个分区) 然后一个新的分区来了,系统需要重新分片。目标是使
我有 3 个这样的观点: 我需要定义一个约束,以便在蓝色或芥末色垂直调整大小时,红色 View 将保持在任一上 View 的最小距离处,例如 或者 那么我怎样才能达到那个结果呢??? 最佳答案 建立从
题目地址:https://leetcode.com/problems/minimum-area-rectangle/description/ 题目描述 Given a set of points
题目地址:https://leetcode-cn.com/problems/path-with-minimum-effort/ 题目描述 你准备参加一场远足活动。给你一个二维 rows x col
题目地址:https://leetcode.com/problems/minimum-absolute-difference/ 题目描述 Given an array of distinct in
题目地址:https://leetcode.com/problems/minimum-height-trees/description/ 题目描述 Fora undirected graph wi
题目地址:https://leetcode.com/problems/minimum-time-difference/description/ 题目描述: Given a list of 24-h
题目地址: https://leetcode.com/problems/minimum-genetic-mutation/description/ 题目描述 Agene string can be
你们能帮我解决一些我被困的家庭作业问题吗? 完整二叉树中的局部最小值被定义为小于其所有邻居(邻居 = 父、左子、右子)的节点。 我需要在给定的完整二叉树中找到一个局部最小值,它的每个节点都有不同的数字
(defun *smaller* (x y) ( if (> x y) y x)) (defun *minimum* (lst) (do ((numbers lst (cdr
我是一名优秀的程序员,十分优秀!