作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我没有关于延续的正式知识,并且想知道是否有人可以帮助我验证和理解我编写的代码:)。
问题
我要解决的一般问题是将表达式转换为
(2 * var) + (3 * var) == 4
\x y -> 2 * x + 3 * y == 4 -- (result)
yices-painless
包裹。
var
翻译成
\x -> x
.我们如何将两个
var
相乘的(表示它们
\x -> x
和
\y -> y
)到一个表达式
\x -> \y -> x * y
?
var
应该有一个功能
f :: α -> E -- rest of computation
var
的值创建并返回我们想要的(标记为
result
的代码 list ),一个采用变量
x
的新函数并返回
f x
.因此,我们定义,
var' = \f -> (\x -> f x)
xf
和
yf
(例如,它可能等于
var
),我们想要使用“剩余计算”函数
f :: α -> E
如上,并返回一个新函数。给定
xf
的值,我们知道函数应该做什么。和
yf
(表示为
x
和
y
下面),并将其定义为,
mult xf yf = \f -> xf (\x -> yf (\y -> f (x Prelude.* y)))
const' c = \f -> f c
var' = \f -> (\x -> f x) -- add a new argument, "x", to the function
add xf yf = \f -> xf (\x -> yf (\y -> f (x Prelude.+ y)))
mult xf yf = \f -> xf (\x -> yf (\y -> f (x Prelude.* y)))
v_α = var' -- "x"
v_β = var' -- "y"
v_γ = var' -- "z"
m = mult v_α v_β -- "x * y"
a = add m v_γ -- "x * y + z"
eval_six = (m id) 2 3
eval_seven = (a id) 2 3 1
two = const' 2 -- "2"
m2 = mult two v_γ -- "2 * z"
a2 = add m m2 -- "x * y + 2 * z"
eval_two = (m2 id) 1
eval_eight = (a2 id) 2 3 1
quad_ary = (var' `mult` var') `mult` (var' `mult` var')
eval_thirty = (quad_ary id) 1 2 3 5
最佳答案
是的,这是用延续传递风格 (CPS) 编写的。
有人曾经向我解释过 continuations 是“无处不在的回调”,我觉得这并不是特别有用,但也许你会。
就像很多事情一样,你能做的最好的事情可能就是继续努力,以提高风格的流畅度。
关于haskell - 我是不是写了续篇?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8867837/
在上篇文章中,我们已经采集新闻信息页的列表数据,接下来要做的操作就是从数据库中读取所需要采集的URL,进行页面抓取就行 新建一个content表 不过需要注意的一点是,不能再采用采集URL这种i
在《ASP.NET MVC的四种验证编程方式》一文中我们介绍了ASP.NET MVC支持的四种服务端验证的编程方式(“手工验证”、“标注ValidationAttribute特性”、“让数据类型实现
我是一名优秀的程序员,十分优秀!