/tmp/duangsuse.sock
23 subscribers
303 photos
3 videos
92 files
337 links
从 duangsuse::Echo (@dsuse) 跟进出来的分支,将在作者恢复原帐号访问的时候合并删除。
Download Telegram
Forwarded from duangsuse::Echo (duangsuse /'dʊɔːŋ sjuːz/ | [⃪PLD, FPλ])
回家了~
#CS #PLT 入门级别的回答们 #CoolShell

+ 也不要太较真成『语法糖主义』…

也不要太较真成『语法糖主义』… Java 5 之前没 Generics 的时候代码不还是照样写、Assembler 那时没有 C 不还是可以编程,C 从 89 到 17 加了多少特性,vararg、complex、block、pack,多少也是『可有可无』的,甚至因为有内联汇编和底层访问性、低层次的规范,你都可以内联汇编给它“加特性”,你甚至可以说,C 就是汇编的语法糖,哪怕它让代码机器平台无关、提供了类型检查

C++ 的 block 的确是没啥革命性的变更,但是一切皆语法糖这个观点太表面了…

+ 另外你所说的 environment 模型是指 Scheme 系基于 Lambda 演算程序设计语言的 Lexical scoping 变量解析吗?



另外你所说的 environment 模型是指 Scheme 系基于 Lambda 演算程序设计语言的 Lexical scoping 变量解析吗?

Lisp 里这样的… 我还是用 Racket 吧(我不会 R*RS,但多范式融合的也就是那个样子),怎么说,Lisp 首先这个语言本身已经很老了并且也对很多人不那么可获取、其次它的名称被滥用的很严重,有一大堆 『Lisp 方言』 和 『C-like 语言』了…. 我…..

(define counter
(lambda [n] (+ n 1))) ; your definition above
(define effect-couter
(lambda [n] [lambda [] (set! n (+ n 1)) n])) ; using side-effects upvalue assignment like what we does in JavaScipt
(define time-a (effect-counter 0))
(display (a)) ; 1
(display (a)) ; 2

可是要用到副作用啊… 什么是消息传递模型,大概就是类似面向对象 Builder pattern 那个数据依赖构建吧,一般都是高阶函数引用 UpValue… 并且传递的消息,一般都是 immutable 的数据模型对象啊?

+ First-class 在 PLT(Programing Language Theory)里是指『能够被作为“子程序”的参数、返回值』使 用的一种『值』。



First-class 在 PLT(Programing Language Theory)里是指『能够被作为“子程序”的参数、返回值』使用的一种『值』。
C 里面有函数指针、但一些语言(很难举出例子… 因为又要有子程序又不能有函数指针,我举 Bash 吧)就不存在『函数指针』
同样的,一些语言里没有『变量』而只有『等式』『定义』『侧面』『式子(Term)』这些与之类似的概念,可能在使用上也有相通并且经常被弄混,但把他们混为一谈偏偏就是不准确的

何况〖变量化函数〗这个名称本身也有点不准确 — 是不是说函数就不能被作为参数和返回值呢?虽然很多语言都在低层使用了本地变量来管理参数的状态分配,是不是就意味着子程序的『参数』和『返回值』都是『变量』呢?

而且函数式里说的这个『first-class functions』远远不止一个 functions,还有它依赖的 data,这是一个容易被忽视的侧面。

function konst(x) {
return function immediate() { return x; }; }
let a = konst(1);
console.log(a()) // 1

如果真的只有一个『函数指针』,那这个 x 变量应该从哪里来?所以对于好的程序员,闭包和匿名函数不应混淆,哪怕是概念都应该尽可能做到准确无歧义。

有的时候我们就是需要一个可以进行『操作』的『值』而已,不需要关心它们是来自『变量』还是『参数』、他们是不是一个『函数变量』。

这个特性就是 1932 年 Lambda calculus 的 lexical scoping,这里 讲的很清楚

任何新知识对任何人来说都是突兀的,所以我们在第一次见到某种概念的时候应该学会闭嘴。我第一次听王垠骂 Type Theory Hindley-Milner 类型推导和 Haskell 的惰性计算引用透明的时候也无脑跟着骂了(那时候是一行 Haskell 都没有看过….)…. 现在是极其后悔 为什么要无脑跟风(给一点建议…)

和变量这个东西有『相通』(都能用)之处,但还是很不一样的。
就像上面那个拿『引用透明』换『确定性』(这个还有和线程安全的某种特例混淆的风险)的人一样,能够准确的就尽可能做到准确,这不正是酷壳大部分技术文和科普/人文写作的风格吗?有多少技术博客还会专门列个引用表给人去找上面的一手资料…


+ 未必啊,我们只是使用了接口,没有规定必须得怎样实现

未必啊,我们只是使用了接口,没有规定必须得怎样实现
for/while 是经典顺序逻辑编程里常用的循环,但实际上计算远远不止这一种可能,有复杂的数据库查询可以分到很多台计算机上去做、复杂的 ray tracing 渲染可以分到计算集群去做,单机对于 DIP 处理/计算机视觉/3D 计算/着色 什么的,未必就 for/while 这一种,比如 X86 的 SIMD 特性(SSE/AVX 什么的)就可以让你一下子处理一批数据,批量完成加减乘除取余什么的,这种情况 map 的语义远远比 for index 好,编译器也更敢做优化一些
Forwarded from Math notes | 数学笔记 (Harry Ying)
近期在写一篇分布式信任的post
Forwarded from Math notes | 数学笔记 (Harry Ying)
reasoning-about-knowledge-part-1.pdf
283.3 KB
PDF版本
PDF Version
#recommended #Math #tool 生成的杂乱式子,很适合大家训练自己的模式识别和展开/化简能力。
Forwarded from Math notes | 数学笔记 (Harry Ying)
#Dev #Tech #JavaScript #TypeScript 理想状态机模型实例
Forwarded from 羽毛的小白板
理想中的 TypeScript 版有限状态机
#MS 送终!等着 Flash 和 Java Applet
#Life #ACG 现在又复活了
Forwarded from エロ奇譚 (Cololi)
看求值顺序喽,如果 a++ 的值被保留赋值则不变(显然赋值语句会在自增表达式求值后执行);如果 a++ 反而是没有实现它的 side-effect 语义则值会发生改变(也就是说它在整个语句后完成自增操作) #C #Zhihu
Forwarded from METO 的涂鸦板
霸王还行,这奖品真接地气
#ACG #Life 离不开的 漫画 站!
Forwarded from Rachel 碎碎念 (Rachel Mirai | 🏳️‍🌈)
好时代,来临吧