- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先告诉大家,我是第一次在这里提问,如有不妥之处还请见谅。
我正在开发一个相当复杂的软件,它有一个实现 FSM 的 Prolog 核心。因为我不希望它(永远)停止,所以我正在尝试编写一个很好的类似循环的谓词,它可以使用 Prolog 的递归来工作。经过几次不成功的尝试(主要是因为堆栈问题)我最终得到了类似这样的东西:
/* Finite State Transition Network */
transition(st0,evnt0,st1).
transition(st1,evnt1,st2).
transition(st2,evnt2,st0).
fsm_state(state(st0),system(Energy,ActivePayloads),[]) :-
/* ... */
transition(st0,evnt0,NextState),
!,
fsm_state(state(NextState),system(Energy,ActivePayloads),[]).
fsm_state(state(st1),system(Energy,ActivePayloads),[]) :-
/* ... */
transition(st1,evnt1,NextState),
!,
fsm_state(state(NextState),system(Energy,ActivePayloads),[0,1,2]).
fsm_state(state(st2),system(Energy,ActivePayloads),[P|Params]) :-
/* ... */
transition(st2,evnt2,NextState),
!,
fsm_state(state(NextState),system(Energy,ActivePayloads),[]).
start :-
Sys = system(10,[]),
fsm_state(state(s0),Sys,[]).
这是一个好方法吗?
最佳答案
首先是一般性的评论:你处理这个的方式是一种完全自然的 Prolog 方法,声明式的(好吧,或多或少,如果不是因为许多 !/0 阻止你在所有方向上使用谓词的话)描述连续状态之间的关系。这种关系自然是用递归谓词实现的。
令我感到奇怪的是,您需要这么多本质上看起来都一样的子句。为什么不能使用像这样的单个子句:
fsm(State0, System0, Params0) :-
/* ... */
transition(State0, Event, State),
/* ... */
fsm(State, System, Params).
其中可能有一些额外的目标将 Params0 与 Params、System0 与 System 以及其他一些实体相关联。一般的方法通常是在计算的单个“步骤”之前和之后的状态之间建立关系,以及描述一系列连续状态的另一个关系(由如上所述的单个子句组成)。
关于state-machine - 这是 Prolog 中循环的良好实现吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13688792/
嗨,我正在考虑开发一种文件传输程序,想知道我是否想要尽可能好的加密,我应该使用什么? 我会用 C# 开发它,所以我可以访问 .net 库 :P在我的 usb 上有一个证书来访问服务器是没有问题的,如果
我创建的这个计算两个数组的交集是线性的方法的复杂度(在良好、平均、最差的情况下)? O(n) public void getInt(int[] a,int[] b){ int i=0; int
我已经能够使用 RTCPeerConnection.getStats() API 获得 WebRTC 音频调用的各种统计信息(抖动、RTT、丢包等)。 我需要将整体通话质量评为优秀、良好、一般或差。
基本问题: 如果我正在讲述/修改数据,我应该通过索引硬编码索引访问文件的元素,即 targetFile.getElement(5);通过硬编码标识符(内部翻译成索引),即 target.getElem
在 Linux 上,我想知道要调用什么“C”API 来获取每个 CPU 的统计信息。 我知道并且可以从我的应用程序中读取 /proc/loadavg,但这是系统范围的负载平均值,而不是每个 CPU 的
在客户端浏览器中使用 fetch api,GET 或 POST 没有问题,但 fetch 和 DELETE 有问题。它似乎将 DELETE 请求方法更改为 OPTIONS。 大多数研究表明是一个cor
我是一名优秀的程序员,十分优秀!