Mslxl's Blog

Integrate Life

CPS 变换

发布于 # CPS

大多数语言都是通过编译器实现 CPS 变换。尤其是 FP 语言将 CPS 作为一种中间代码。 CPS 变换的过程非常简单 对于一个函数 $f: t1 \to t2$,它的 CPS 版本应该是 $f_cps: t1 \to (t2 \to a) \to a$, 其中 $f_cps\ x\ k \cong k\ (f\ x)$ 其变换过程如下: 对返回值是 $t$ 的函数,添加一个 $t \to a$ 类型的 Continuation 参数,并将返回值将变为 $a$ 在每个函数的 return 处调用 Continuation 如果有函数的递归调用表达式 $e$,将$e$的结果绑定到新的变量 $rec_ans$ 上 将原递归部分更改为 $e (rec_ans \to <body>)$,其中 $<body>$ 是原本函数的其他部分 以以下 Haskell 代码 map

周报 0x01: ボクの理想の Python

为了记录我的精神状态,我决定从今天开始写周报了。虽然说是周报,但不一定每周都写,有可能数个月才写一次。 换句话说,等我精神不稳定的时候才会来写周报。 日语 再见了,多邻国。 大概是3年前,我开始使用多邻国学习日语和世界语。后来渐渐的将世界语丢掉只学日语了,到现在世界语也只能算个 komencanto。 而日语却一直坚持了下来,到现在连续打卡已经有 627 天了。这1000余天我通过多邻国学到了什么?其实我觉得我什么也没有学到。 在老中的特色汉字 buff 下,我还勉强能看懂简单的句子,但却说不出、写不下简单的单词。在今天,我觉得是时候放下 Duolingo 转向其他正常的学习方式了。 多邻国有什么问题?首先它其中的题目有一些问题。比如在其中的听力中,有时会同时出现 「<span lang="jp">中村さん</span>」和 「<span lang="jp

CPS 与 Rust Result

发布于 # Rust # CPS

CPS(Continuation-passing style, 连续传递) 是一种编程风格。 CPS 中的 C 即 Continuation,它是一个作为参数的函数,表示计算后的下一个过程。它的主要作用就是接受函数的结果, 并控制下一步执行。 我们用一段 Kotlin 代码来表示。这是一个 Direct Style 的代码 mul 函数 fun mul(a: Int, b: Int): Int { return a + b } 它的 CPS 大概是这样的 fun mul<R>(a: Int, b: Int, continuation: (Int)->R): R{ return continuation(a+b) } 如果用它来实现阶乘的话将会是这样 fun fact(a: Int, k: (Int)->Int): Int { return match

新春快乐

发布于

时间总是在匆忙间悄悄溜走,曾经坚定的那些遥遥无期都已沦为了转身的天涯...

moe-counter

统计自 2024 年 9 月