- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要一个满足目标的有序对象列表。 setof
负责排序,但当没有对象满足目标时会失败。我想像 findall
那样返回一个空列表。
这可行,但是有没有一种方法可以在不削减的情况下实现这一点?我正在使用 SWI-Prolog。
setof(Object, Goal, List), !; List = [].
最佳答案
首先
..., ( setof(Object, Goal, List), ! ; List = [] ), ...
按照您的建议不起作用。 List = []
总是成功,并且只显示 setof/3
的第一个答案。但是setof/3
可能会产生几个答案。适用于任何 Prolog 的通用方法是:
..., ( \+ Goal -> List = [] ; setof(Object, Goal, List) ), ...
许多实现为此提供了特定于实现的控制构造,以避免两次调用Goal
。例如。 if/3
(SICStus、YAP)或 (*->)/2
(SWI、GNU):
..., if( setof(Object, Goal, ListX), ListX = List, List = [] ), ...
..., ( setof(Object, Goal, ListX) *-> ListX = List ; List = [] ), ...
新变量 ListX
对于 List
已实例化的情况(确实罕见)是必需的。
请注意,其他两个答案并不完全符合您的要求。
关于Prolog - 如何执行 setof 返回空列表而不是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20407430/
我编写了一个函数,它接受两个参数并返回一个 SETOF 结果。 创建函数 foo(parentId bigint, childId bigint) 返回 SETOF 栏 AS ... 我想为这个函数编
我使用的谓词如下所示: predicate(Country, X):- setof(Length, anotherPredicate(Country,Length), X). 我的问题是我的代
我使用的谓词如下所示: predicate(Country, X):- setof(Length, anotherPredicate(Country,Length), X). 我的问题是我的代
我需要一个满足目标的有序对象列表。 setof 负责排序,但当没有对象满足目标时会失败。我想像 findall 那样返回一个空列表。 这可行,但是有没有一种方法可以在不削减的情况下实现这一点?我正在使
SELECT GENERATE_SERIES(0, 2) 和 SELECT * FROM GENERATE_SERIES(0, 2) 很有用,因为返回列和行...还有 SELECT id,GENERA
快速背景:PostgreSQL 非常新,来自 SQL Server。我正在将存储过程从 SQL Server 转换为 PostgreSQL。我已阅读 Postgres 9.3 文档并查看了大量示例和问
我有一个自定义类型: create type some_type as ( some_bool_param boolean, str varch
函数 json_object_keys(json) 返回一个 setof text。如何将此 setof text 转换为所有元素均由 ',' 分隔的字符串?我必须使用函数 array_to_stri
我正在编写一个 PL/pgSQL 存储过程,它将返回一组记录;每条记录包含现有表的所有字段(称之为零售商,它有两个字段:retailer_key 和 retailer_name)。这当然有效: CRE
进入 PL/pgSQL... 我还在学习语法。有时,我会遇到此错误消息: ERROR: cannot use RETURN QUERY in a non-SETOF function 这听起来有点神秘
我在 Postgresql 中有一个基本的用户表, CREATE TABLE myuser ( userId bigserial primary key, user_name varchar(3
我有以下 - 不工作 - 功能: CREATE FUNCTION permission_cache_update(affected_user_list int[]) RETURNS TABLE(u
我在 DBMS (Postgresql) 中有这个存储过程 CREATE OR REPLACE FUNCTION getallentree() RETURNS SETOF entree AS $B
我有一个简短的问题。在序言中使用 setof 的存在限定符(即 ^)。 使用SICStus,似乎(尽管许多网站声称如此),S确实似乎在下面的代码中被量化(使用沼泽标准,事实的母亲/ child ,我没
这个问题在这里已经有了答案: PostgreSQL "Column does not exist" but it actually does (6 个答案) sql statement error:
我对 postgresql 比较陌生,正在努力熟悉它。我在编写新的 pl/sql 函数时遇到了错误。 错误:类型“ordered_parts”不存在 CREATE OR REPLACE FUNCT
我正在将 SETOF 从 Postgres FUNCTION 返回到 PHP/PDO。不幸的是,我得到每行返回的 2 个副本。 这是 Postgres 类型: CREATE TYPE marker A
我有一个复杂的 PSQL 函数返回表记录的 SETOF(树中叶记录的祖先路径,哎呀),通常一次只有几条记录 - 祖先 - 和这非常适合应用程序的其余部分。 例如,给定记录: id: 5, parent
我正在尝试保护我的数据库免受 SQL 注入(inject)攻击。我有许多返回 SETOF 我预定义数据类型的存储函数。例如: create type userLoginUserIdPasswordRe
我已经动态生成了 SELECT。我尝试将结果作为 SETOF RECORD 返回。诸如此类: CREATE FUNCTION test(column_name text) RETURNS SETOF
我是一名优秀的程序员,十分优秀!