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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
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
弄错了,明天返校了
This media is not supported in your browser
VIEW IN TELEGRAM
duangsuse::Echo
http://www.yinwang.org/blog-cn/2012/07/04/dan-friedman #CS #recommended
后面贴了他那 40 行代码,唉(真心的),我也是现在才知道他说这些代码真是“最优雅”的四十行的原因了

为了描述它,很多人(当然明显也水平不低,要不然连 CPS 是啥都可能不知道)“连平行宇宙、世界”都拿来做比喻了,效果很不好,他们或许自己的确懂,但他们不会教给别人自己所知道的知识

如果连《The Little Schemer》都没看过的话,大概也是不可能真正理解 CPS 的含义吧,就是后端老油条、精通 C++ template... coroutine... imperative 过程式语言实现、处理各种锁各种数据竞争问题...,看几遍“这个世界 那个世界”这种描述大概也没人真正明白

— 其实就是一个简单的问题,那 40 行代码到底是拿来做什么的,连怎么用都不需要知道,我想这都是苛求了

现在看来,我知道当初那些知乎上的程序员,大部分真的都不知道它是做什么的,只是不明觉历,而知乎上 PL 爱好者也不会特别纠结这些问题
Friedman 弗里德曼教授,总是能用尽可能简明易懂的方式梳理知识,尝试简化一切,这真的是有好处的。过度复杂化只会让你要记的更多,思考的更累,人非圣贤。Scheme 复制的定义都是从更小的定义组装起来的。模块化、彻底解藕不也正是现在工程的风向标吗?

而且我觉得他和王垠大概是真的天才(要不然怎么能在一周里做出别人十年才能完成的算法呢),即使这样,也不应该有神的存在。天才的存在促人进步,神的存在阻碍人进步。计算机科学不需要一个人成为只能被人膜拜的神,那对科学发展没有帮助

最后回复我下面提到某个知乎问题的某个造压缩算法和计算机网络的回答(正好我看得到一本《Internet 原理于技术》,如果他说的是真的那水平应该在不同方向和王垠差不多),神是人造的,不是神自己造的,如果不是那么多完全不懂和不懂装懂、完全不是一个世界的人凑热闹,他怎么会被当成神一样看待?