duangsuse::Echo
719 subscribers
4.26K photos
130 videos
583 files
6.48K links
import this:
美而不丑、明而不暗、短而不凡、长而不乱,扁平不宽,读而后码,行之天下,勿托地上天国。
异常勿吞,难过勿过,叹一真理。效率是很重要,盲目最是低效。
简明是可靠的先验,不是可靠的祭品。
知其变,守其恒,为天下式;穷其变,知不穷,得地上势。知变守恒却穷变知新,我认真理,我不认真。

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
吞错误可还行
而且还是解析器这种非常容易出现无效输入的
https://www.zhihu.com/question/20259086

此外 Sexp 还将支持 Continuation,虽然还有两天,,,
duangsuse::Echo
https://gist.github.com/duangsuse/fc33ea2690d77a0cc1fe0f0a4ce8b4f2
当然只有一天了,所以 PIRV 这种要再转换成 IR 的特殊解释器肯定旧做不了了...
This media is not supported in your browser
VIEW IN TELEGRAM
临时设计一个更简单的,一样的词法规则,然后传统 Sexp AST 解释器的模式
还是要支持 lazy、eval 和 CPS
duangsuse::Echo
https://www.zhihu.com/question/21954238
这个问题里有学院派和偏向学院派的工程派的回答... 你们应该能看出区别吧

应该说他们都讲的很好,可以说是尽可能容易理解了,但回答的角度和层次不同,自然就会有容易理解和不容易理解的区分
duangsuse::Echo
https://gist.github.com/duangsuse/fc33ea2690d77a0cc1fe0f0a4ce8b4f2
当然我是不会做 TCO 的 CFA 流程控制分析 的,所以得在 tco 调用后面加 yield ...
如何解释 Lisp 中 call/cc 的概念? - 知乎用户的回答 - 知乎
https://www.zhihu.com/question/21954238/answer/23905991

我选择了一个最容易理解的「表层(使用)上」的描述

(call/cc
(lambda (next) BODY))

continuation 是“然后要做的事情”,“要做的事情”我们用什么表示?当然是函数,所以说 k 是个函数。

如果我们在 BODY 里呼叫了 (next ...),那么会立即跳出 (call/cc (lambda (next) BODY)),去做下一个括号/外层括号的事。

那么刚才 (let/cc next BODY) 没执行完,它的返回值是什么呢?就是你传给 next 的参数。
duangsuse::Echo
如何解释 Lisp 中 call/cc 的概念? - 知乎用户的回答 - 知乎 https://www.zhihu.com/question/21954238/answer/23905991 我选择了一个最容易理解的「表层(使用)上」的描述 (call/cc (lambda (next) BODY)) continuation 是“然后要做的事情”,“要做的事情”我们用什么表示?当然是函数,所以说 k 是个函数。 如果我们在 BODY 里呼叫了 (next ...),那么会立即跳出 (call/cc…
举个最简单的例子(简化版 R5RS 例子),

这里,(let/cc next ...) 可以理解为 (call/cc (lambda (next) ...))

((let/cc next (for-each
(lambda (x) (if (= x 1) (next) (display x)))
'(2 3 4 1 0))))


continuation 给了 Scheme 系真·functional 语言流程控制的能力,比如需要 "break" for-each 的时候

好想加此特性的说...

https://www.biwascheme.org/test/tracer.html
((call/cc (lambda (next) (for-each
(lambda (x) (if (= x 1) (next) (display x)))
'(2 3 4 1 0)))))
scala中的flatMap详解? - 知乎用户的回答 - 知乎
https://www.zhihu.com/question/34548588/answer/62603889

非常简单明了的解释 flatMap 用法

下面 Belleve 的回答也很简洁

先映射(map),再拍扁(join)

不过貌似不是简单的这样

[:a, :b, :c, [:ac, :bc]].map(&:to_s).flatten => ["a", "b", "c", "[:ac, :bc]"]

就是字面上的意思

[:a, :b, :c, [:ac, :bc]].flatten.map(&:to_s) => ["a", "b", "c", "ac", "bc"]
This media is not supported in your browser
VIEW IN TELEGRAM
弄错了,明天返校了