48、编程中的求值顺序、惰性求值与 I/O 处理

编程中的求值顺序、惰性求值与 I/O 处理

1. 确定性有限自动机(DFA)示例

首先来看一个确定性有限自动机(DFA)的例子,该 DFA 用于接受包含偶数个 a 和偶数个 b 的字符串。以下是其 OCaml 数据结构表示:

let a_b_even_dfa : char dfa =
{ current_state = 0;
transition_function =
[ (0, 'a', 2); (0, 'b', 1); (1, 'a', 3); (1, 'b', 0);
(2, 'a', 0); (2, 'b', 3); (3, 'a', 1); (3, 'b', 2) ];
final_states = [0];
};;

这个 DFA 通过状态转换函数和最终状态来判断输入字符串是否符合要求。

2. 求值顺序回顾

在编程中,许多表达式的子组件可以按多种顺序求值。主要有两种求值顺序:
- 应用序求值(Applicative-order evaluation) :在将函数参数传递给函数之前先对其进行求值。
- 正则序求值(Normal-order evaluation) :将未求值的参数传递给函数。

像 Scheme 和 OCaml 这样的语言在大多数情况下使用应用序求值,而正则序求值通常出现在宏和按名传递参数的情况中。

2.1 应用序和正则序求值示例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值