- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直遇到这种情况,我永远不知道用哪种方法来攻击它。以下是处理某些季节事实的两种方法。
我正在努力解决的是使用方法1还是2,以及每种方法的优缺点,尤其是大量的事实。methodone
既然事实是可用的,这似乎很浪费,为什么还要建立一个列表(尤其是一个大列表)。如果列表足够大,这也一定会影响内存?而且它没有利用 Prolog 的自然回溯功能。methodtwo
利用回溯为我进行递归,我想内存效率会更高,但是通常这样做是一种好的编程习惯吗?可以说它更丑陋,可能还有其他副作用吗?
我能看到的一个问题是每次fail
被调用,我们失去了将任何东西传回调用谓词的能力,例如。如果是 methodtwo(SeasonResults)
,因为我们不断地故意使谓词失败。所以methodtwo
需要断言事实来存储状态。
大概(?)方法2会更快,因为它没有(大)列表处理要做?
我可以想象,如果我有一个列表,那么 methodone
将是要走的路..还是总是这样?在任何情况下使用 methodone
将列表声明为事实是否有意义?然后使用方法二处理它们?彻底的疯狂?
但是话又说回来,我读到断言事实是一项非常“昂贵”的业务,因此即使对于大型列表,列表处理也可能是要走的路?
有什么想法吗?或者有时根据(什么)情况使用一个而不是另一个更好?例如。对于内存优化,使用方法 2,包括断言事实,对于速度使用方法 1?
season(spring).
season(summer).
season(autumn).
season(winter).
% Season handling
showseason(Season) :-
atom_length(Season, LenSeason),
write('Season Length is '), write(LenSeason), nl.
% -------------------------------------------------------------
% Method 1 - Findall facts/iterate through the list and process each
%--------------------------------------------------------------
% Iterate manually through a season list
lenseason([]).
lenseason([Season|MoreSeasons]) :-
showseason(Season),
lenseason(MoreSeasons).
% Findall to build a list then iterate until all done
methodone :-
findall(Season, season(Season), AllSeasons),
lenseason(AllSeasons),
write('Done').
% -------------------------------------------------------------
% Method 2 - Use fail to force recursion
%--------------------------------------------------------------
methodtwo :-
% Get one season and show it
season(Season),
showseason(Season),
% Force prolog to backtrack to find another season
fail.
% No more seasons, we have finished
methodtwo :-
write('Done').
最佳答案
让我们看看你的例子。它非常简单,所以我们可以想象它更复杂。但是,您似乎理所当然地认为副作用是必不可少的。让我质疑一下:
在您的示例中,您有一个非常有趣的发现:所有季节的名称长度相同。多么惊天动地的洞察力!但是等等,这是真的吗?
验证这一点的最直接的方法是:
?- 季节(S),atom_length(S,L)。
S = Spring ,
L = 6 ;
S = 夏天,
L = 6 ;
S = 秋天,
L = 6 ;
S = 冬天,
L = 6。
不需要findall/3
, 不需要 write/1
.
对于大量答案,目视检查是不切实际的。想象一下 400 个季节。但我们可以通过以下方式验证这一点:
?- 季节(S),atom_length(S,L),dif(L,6)。
错误的。
所以我们现在肯定知道没有不同长度的季节。
这是我对你的问题的第一个回答:
As long as you can, use the toplevel shell and not your own side effecting procedures! Stretch things a little bit further to avoid side-effects altogether. This is the best way to avoid failure driven loops right from the beginning.
write/1
也适用于花车?编写浮点数以使其可以准确读回的正确方法是什么? iso-prolog 中有一种方法可以做到这一点.答案是:writeq/1,2
,
write_canonical/1,2
,
write_term/2,3
带选项
quoted(true)
保证可以准确地读回浮点数。也就是说,它们是相同的w.r.t。
(==)/2
methodone
和
methodtwo
不正确:您在写入
Done
后忘记了换行符.所以
methodone, methodone
包含一条乱码。如何轻松测试?
atom_length/2
隐藏在故障驱动循环中,完全无法进行测试或推理。
findall(A, season(A), As)
这样的目标
A
的每个答案被复制到某个空间。对于原子之类的东西来说,这是一个微不足道的操作,但可以想象一个更大的术语。说:
findall/3
或
assertz/1
因为这个大术语将卡住系统。
关于prolog - 使用手动列表迭代与失败递归的优缺点是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9744641/
ODBC是一种连接数据库的开放标准。 ODBC(OpenDataBase Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows OpenServices Ar
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
在我最近的 javascript 程序中(主要是为了好玩和概念验证)我有很多不同种类的对象,并且每种类型我都有相当数量的“实例”。所以我想我应该为这些使用类,但是由于它们非常简单,我可以直接构造它们而
我想知道图标(Material Design 图标)使用可绘制矢量形状(XML 文件)与图像资源(png 文件)的优缺点是什么? 最佳答案 正如我所见,这个问题是指光栅(例如 jpeg、png)和矢量
优点和缺点是什么使用 Plain Old Data (POD)structs\classes in C++ ? 在什么情况下应该更喜欢使用他们在非 POD 上? 具体来说,POD 在工作时有优势吗与序
我听说 Ctypes 会导致 Python 和 Windows 崩溃(或停止错误)。我应该远离他们的使用吗?我从哪里听到的?当我试图控制窗口的各个方面、自动化之类的东西时,它又回来了。 我听说过 sw
您能否解释一下在 iPhone 上存储数据的不同方式,以及每种方式的优缺点。 我已经阅读了很多关于 UserDefaults、CoreData、XML、plist 的内容……但我有点不知所措。 目前,
但对于关闭PING值后,网站能否被百度和GOOGLE等搜索引擎收录,很多人说法不一,有些说对收录没任何影响,也有人说影响不大,其实会不会影响,我也不是很清楚,我只能从我遇到情况的来分析一下。 7月
我正在寻找一个制作平台。我读过一些关于 gnu make 的文章,它在 Windows 平台上有一些问题(从斜杠/反斜杠到 shell 确定......)所以我想听听我有什么替代品? 如果重要的话,我
我是 Ubuntu Linux 用户,我仅将 Win XP 用于我的工作目的。 最近我用 XP + Visual Studio 2008(由 kvm-quemu 提供支持)设置了一个虚拟机。 我的问题
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 5 年前。 Improv
我对使用Grails Portlets plugin在Grails上开发 Liferay portlet的可能性感兴趣。我认为引入portlet框架(例如Spring Portlet API)将使开发
作为Photon的新手,有以下问题: 看起来 VMware 正在尝试创建与 Docker 并行的容器技术。由于现阶段docker比较成熟,使用photon有什么好处/优势吗? 我知道有人可以在内部使用
我只需要一些关于此布局的建议。我不是经验丰富的 CSS 用户,所以我遇到的唯一技术是将所有内容包装到一个 div 中,设置宽度和自动左/右边距。这种方法是面向 future 的吗? 在我开始之前我应该
我正在使用 jQuery Mobile 和 Phonegap 开发 HTML5 移动应用程序。它将部署在多个平台上。 我在下面有一个横幅 png: 我的问题是: 1)直接用这张图片做背景还是用CSS动
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这个问题在这里已经有了答案: When is it necessary or convenient to use Spring or EJB3 or all of them together? (2
我最近听说了 JavaScript 对象表示法 (JSON),在查找之后,它似乎作为可扩展标记语言 (XML) 的替代品变得相当流行。 我继续 this页面以获取更多信息,但它似乎更像是一个 XML
这个问题在这里已经有了答案: 9年前关闭。 Possible Duplicate: EF 4.1 Code-first vs Model/Database-first 我刚刚开始学习 EF 4.0 C
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我是一名优秀的程序员,十分优秀!