- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试定义关系 callto_status(Goal, Status)
总是成功,根据调用Goal
的结果统一Status (换句话说,我想实现 call_with_inference_limit/3
的具体版本)。我的实现使用 SWI 的 call_with_inference_limit/3
与 call_with_time_limit/3
具有相同的接口(interface)(这应该使它在这种情况下也能工作)。 call_with_..._limit
的执行不会回溯,所以我认为最好不要给人以报告答案替代目标的印象。
我介绍了辅助谓词 derivable_st
为了可读性。它处理成功和超时情况,否则失败。
% if Goal succeeds, succeed with Status = true,
% if Goal times out, succeed with Status = timeout
% if Goal fails, fail
derivable_st(Goal, Status) :-
T = 10000, % set inference limit
% copy_term(Goal, G), % work on a copy of Goal, we don't want to report an answer substitution
call_with_inference_limit(G, T, R), % actual call to set inference limit
( R == !
-> Status = true % succeed deterministically, status = true
; R == true
-> Status = true % succeed non-deterministically, status = true
; ( R == inference_limit_exceeded % timeout
-> (
!, % make sure we do not backtrack after timeout
Status = timeout % status = timeout
)
; throw(unhandled_case) % this should never happen
)
).
derivable_st
并处理失败情况和可能抛出的异常(如果有)。我们可能想要找出堆栈溢出(在推理限制太高的情况下发生),但现在我们只报告任何异常。
% if Goal succeeds, succeed with Status = true,
% if Goal times out, succeed with Status = timeout
% if Goal fails, succeed with Status = false
% if Goal throws an error, succeed with Status = exception(The_Exception)
% Goal must be sufficiently instantiated for call(Goal) but will stay unchanged
callto_status(Goal, Status) :-
catch(( derivable_st(Goal, S) % try to derive Goal
-> Status = S % in case of success / timeout, pass status on
; Status = false % in case of failure, pass failure status on, but succeed
),
Exception,
Status = exception(Exception) % wrap the exception into a status term
).
?- callto_reif( length(N,X), Status).
Status = true.
?- callto_reif( false, Status).
Status = false.
?- callto_reif( (length(N,X), false), Status).
Status = timeout.
copy_term/2
最佳答案
这是一个较短的解决方案:
callto_status(Goal, Status) :-
call_with_inference_limit(Goal, 10000, Status0),
(Status0 = ! -> !, Status = true; Status = Status0).
callto_status(_, false).
?- callto_status(member(X,[1,2,3]), Y).
X = 1,
Y = true
X = 2,
Y = true
X = 3,
Y = true.
?- callto_status(fail, Y).
Y = false.
Status0 = ! -> !, Status = true
通过
Status0 = ! -> Status = true
只要。然后,您将始终获得剩余的选择点:
?- callto_status(member(X,[1,2,3]), Y).
X = 1,
Y = true
X = 2,
Y = true
X = 3,
Y = true
Y = false.
关于prolog - 具体化 call_with_time_limit/call_with_inference_limit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54678295/
可能很明显,但给出这段代码(来自 http://clojure.github.com/clojure/clojure.core-api.html#clojure.core/reify ): (defn
我有一个空页面,我在其中动态添加元素,我正在尝试使用 Materialize,但我遇到了图形问题... 我已按照“http://materializecss.com/”上的不同教程使用正确的方法添加元
我正在尝试定义关系 callto_status(Goal, Status)总是成功,根据调用Goal的结果统一Status (换句话说,我想实现 call_with_inference_limit/3
我在为我的网站设置包含自动完成 (https://materializecss.com/navbar.html) 的物化搜索栏 (https://materializecss.com/autocomp
我有一个即将到来的逻辑考试,并且一直在学习我类(class)中的一些过去的论文。我遇到了一个关于物化的问题,并将其发布在下面; 用具体化来表示变量 B 的性质 取值为 1 或 8。 在阅读了一些资源并
我有一个 Laravel 项目,其中一个页面有 5 个模态(MaterializeCSS),每个模态都有一个表单。当我提交表单并遇到任何验证错误时,模式必须重新打开。 我可以通过运行以下代码来实现这一
我是一名优秀的程序员,十分优秀!