教程 1 第 8 课 ( mu-defined )
我的尝试是替换现有规则:“rule mu X . E => E[(mu X . E) / X]”
规则:
rule mu X:KVar . E:Exp
=> let X =
(lambda $x . (( lambda X . E) (lambda $y . ($x $x $y))))
(lambda $x . (( lambda X . E) (lambda $y . ($x $x $y)))) [macro]"
不幸的是,它不会编译。我究竟做错了什么 ?这个解决方案正确吗?
教程 1 第 8 课 (SK-combinators )
他们在练习的自述文件中有这一部分:
“例如,lambda x . if x then y else z
不能按原样转换为组合子,但如果我们假设一个内置的条件函数常量,比如cond
,然后对其脱糖if_then_else_
,则可以。然后这个表达式变成
lambda x . (((cond x) y) z)
,我们知道如何转换。”
我的斗争是与'说' cond
,并if_then_else_
对其进行脱糖。'
我该怎么做这部分?任何帮助,将不胜感激。
教程 2 第 4 课(纯句法)
他们在练习的自述文件中有这一部分:
'提示:进行顺序组合strict(1)
or seqstrict
,并让语句减少到{}
而不是.
; 并且不要忘记创建
{}
一个KResult
(您可能需要一个新的句法类别,它只包含{}
并包含在 中KResult
)。
我的斗争是与部分: ' 和有陈述减少到{}
而不是.
; 并且不要忘记创建
{}
一个KResult
(您可能需要一个新的句法类别,它只包含{}
并包含在 中KResult
)'
我该怎么做呢 ?有什么提示吗?
教程 2 第 4 课(未初始化变量)
我创建了以下模块:
module UNDEFINED
rule <k> int (X,Xs => Xs);_ </k> <state> Rho:Map (.Map => X|->"##") </state>
requires notBool (X in keys(Rho))
endmodule
但这会用“##”初始化变量。如何用“未定义”初始化变量?有什么提示吗?
教程 3 第 1 课 (callCC)
对于这个练习,我创建了一个与 callcc 非常相似的代码:
syntax Exp ::= "callCC" Exp [strict]
syntax Val ::= cc(K)
rule <k> (callCC V:Val => V cc(K)) ~> _ </k>
rule <k> cc(K) V ~> _ => V ~> _ </k>
由于某种原因,它不会编译。我究竟做错了什么 ?这个解决方案正确吗?