与结合的方程式推理 [英] Equational reasoning with tying the knot
本文介绍了与结合的方程式推理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
s0 =(flip runContT )return $ do
(k,n)< - callCC $ \k - >令f x = k(f,x)
作为回报(f,0)
lift $打印n
如果n < 3
,则k(n + 1)>> return()
else return()
我设法达到了这一点:$>
s21 = runContT(让fx = ContT $ \ _ - > cc(f,x) ,0)))cc其中
cc =(\(k,n) - > let
iff = if n <3 then k(n + 1)else ContT($())
in print n>> runContT iff(\_-> return()))
在这一点上,我不知道如何处理 f
的递归定义。完成这个缩减的最佳方法是什么?
解决方案
您可以按照以下步骤操作。
<$ c $ ($(f,0)))cc其中,
cc =(\(k,n) - > let
iff = if n <3 then k(n + 1)else ContT($())
in print n>> runContT iff(\_ - > return ())
- runContT与ContT
s22 =(let ($(f,0)))cc
其中
cc =(\(k,n) - >让
iff = if n < 3然后k(n + 1)else ContT($())
in print n>> runContT iff(\_-> return())
- 重排序
s23 =($(f,0))cc
其中
fx = ContT $ \_ - > cc(f,x)
cc =(\(k,n) - > let
iff = if n <3 then k(n + 1)else ContT($())
in print n>> runContT iff(\_-> return())
s24 = cc(f,0)
其中...
- beta
s25 = let iff = if 0 <3 then f(0 + 1)else ContT($())
in print 0>> ; runContT iff(\_-> return())
其中...
- if,算术
s26 = let iff = f 1
in print 0>> runContT iff(\_ - > return())
where ...
s27 =打印0>> runContT( f1)(\_-> return())
其中...
s28 =打印0>>>> runContT(ContT $ \_ - > cc f(1))(\_-> return())
其中...
s29 = print 0>>(\_-> cc(f ,1))(\_-> return())
其中...
s30 =打印0> gt cc(f,1)
其中...
- 重复所有步骤s24..s30
s31 = p rint 0>>打印1>> cc(f,2)
其中...
- 等等
s32 =打印0 >>打印1>>打印2>> cc(f,3)
其中...
s33 =打印0>>打印1>>打印2>>
let iff = if 3< 3然后在打印3中f(3 + 1)else ContT($())
>> runContT iff(\_ - > return())
其中...
s34 =打印0>>打印1>>打印2>>打印3>>
让runFontT中的iff = ContT($())
iff(\_-> return()))
其中...
s35 =打印0>>打印1>>打印2>>打印3>>
runContT(ContT($()))(\_-> return())
其中...
s36 =打印0>>打印1>>打印2>>打印3>>
($())(\_ - > return())
其中...
s37 =打印0>>打印1>>打印2>>打印3>>
return()
I'm trying to wrap my head around Cont and callCC, by reducing this function:
s0 = (flip runContT) return $ do
(k, n) <- callCC $ \k -> let f x = k (f, x)
in return (f, 0)
lift $ print n
if n < 3
then k (n+1) >> return ()
else return ()
I've managed to reach this point:
s21 = runContT (let f x = ContT $ \_ -> cc (f, x) in ContT ($(f,0))) cc where
cc = (\(k,n) -> let
iff = if n < 3 then k (n+1) else ContT ($())
in print n >> runContT iff (\_ -> return ()))
And at this point i have no idea what to do with recursive definition of f
What is the best way to finish this reduction?
解决方案
You can proceed as follows.
s21 = runContT (let f x = ContT $ \_ -> cc (f, x) in ContT ($(f,0))) cc where
cc = (\(k,n) -> let
iff = if n < 3 then k (n+1) else ContT ($())
in print n >> runContT iff (\_ -> return ())
-- runContT is the opposite of ContT
s22 = (let f x = ContT $ \_ -> cc (f, x) in ($(f,0))) cc
where
cc = (\(k,n) -> let
iff = if n < 3 then k (n+1) else ContT ($())
in print n >> runContT iff (\_ -> return ())
-- reordering
s23 = ($(f,0)) cc
where
f x = ContT $ \_ -> cc (f, x)
cc = (\(k,n) -> let
iff = if n < 3 then k (n+1) else ContT ($())
in print n >> runContT iff (\_ -> return ())
s24 = cc (f,0)
where ...
-- beta
s25 = let iff = if 0 < 3 then f (0+1) else ContT ($())
in print 0 >> runContT iff (\_ -> return ())
where ...
-- if, arithmetics
s26 = let iff = f 1
in print 0 >> runContT iff (\_ -> return ())
where ...
s27 = print 0 >> runContT (f 1) (\_ -> return ())
where ...
s28 = print 0 >> runContT (ContT $ \_ -> cc (f, 1)) (\_ -> return ())
where ...
s29 = print 0 >> (\_ -> cc (f, 1)) (\_ -> return ())
where ...
s30 = print 0 >> cc (f, 1)
where ...
-- repeat all the steps s24..s30
s31 = print 0 >> print 1 >> cc (f, 2)
where ...
-- etc.
s32 = print 0 >> print 1 >> print 2 >> cc (f, 3)
where ...
s33 = print 0 >> print 1 >> print 2 >>
let iff = if 3 < 3 then f (3+1) else ContT ($())
in print 3 >> runContT iff (\_ -> return ())
where ...
s34 = print 0 >> print 1 >> print 2 >> print 3 >>
let iff = ContT ($())
in runContT iff (\_ -> return ()))
where ...
s35 = print 0 >> print 1 >> print 2 >> print 3 >>
runContT (ContT ($())) (\_ -> return ())
where ...
s36 = print 0 >> print 1 >> print 2 >> print 3 >>
($()) (\_ -> return ())
where ...
s37 = print 0 >> print 1 >> print 2 >> print 3 >>
return ()
这篇关于与结合的方程式推理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文