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

技术相干订阅~
另外有 throws 闲杂频道 @dsuset
转载频道 @dsusep
极小可能会有批评zf的消息 如有不适可退出
suse小站(面向运气编程): https://WOJS.org/#/
Download Telegram
Screenshot_20210116_201051.png
122.9 KB
#Java #plt #types 泛型数组问题真多…… 首先是 Integer[] 和 int[] 不能 autobox 装拆箱(误,这个其实不是拆不拆的问题了,但是 Arrays 居然没提供复制 API...),我写 rangeSwitch(int[],int[]) 它报错 Object,int 没有顶类型(共同超类)... ;因为 Object os/*可*/=(String[])ss; 的默认协变T数组再加上 reified 假泛型问题,必须得用这种方法建立泛型数组,气死我了。
duangsuse::Echo
#Java #code UI.render(Application().title("table").width(1200).height(500)) { val colOpts = Column("Options").widgets(/*rendering widget instead of row-object property*/ Button(/*auto-id, must*/).text("OK").sameline(true).onClick { it.text((it.getData("rowData")…
#plt #types 下午走在路上就想着 IO 便利性函数该如何封装

说(o) 说点(s) (即 println/print)是既有的,增添 说报错(s) ,有点半通不通但意思准确

麻烦的是之前 听去数一 (加动词 去 的显示无参调用可以不带括号) 这种头疼的 API 不好优化,或可变成 例『听』为 ……量 数 取者,待写()。 的这种形式但不太准确

于是就说可以(而且:...
对何<真型> 恒事 听() 为
量读造器=伴生例<型、可读造>()
量参=建元组<提取自 参数型<读造器::去建>()>()
对读造器的参数里的,参去加(它)。
回读造器去建(提取自 参)“编不下去了……”

搞得这有点高级了…… 像 C++ 的 template<> ,还打算搞 组<交集型<数4、数8>()“=断止”> 、 组<并集型<数1、数4>()“=值”> ,后来发现全身想太多, 可为<数、文> 这样的 Either<A,B> 还比较常见。

不过我终于明白 trait Bounded 可以怎么实现了,以及它不需要高端语言特性的事情了…… 以后可以试着实现下

但是还有个问题,就是如果仅对 thing T 1:1 定义的 compaion-insta 支持默认建立类型,依然需要“T 的 companion 必须实现某 trait”的类型约束,不可能隔离开T和其伴生类型,所以还是要 template 才能真的将 static/instance 的 type check 统一化😂

对何<型、构型> 恒事 伴生例型():构型 = 编译器实现()
对何<数型> (其中 伴生例型<数型>():有界)
内联的恒事 取最小值() = 取伴生例<数型>()的底


C 时代的类型系统还不如说是“sizeof 计算系统”,而 Java 则更高级些,现在如何区分编译期和运行期的职责和计算,保证灵活性,是一个问题了。

我希望这种系统的工作原理必须简单直观,当务之急是学习如何实现编译期计算,区分常/变量参数,相信有了易用的编译期计算,允许用户程序/表达式与编译器协作,类型运算符的问题就迎刃而解。
#learn #FP 从“面向运气编程”到“设计程序”,「编程是什么」有许多天差地别的答案。

编程语言的范式。以社区的主流写法而定(FP之前后:统称过程式 vs. 定义式):

PP结构化- C,Go,Perl,Lua

C是会计算(跳转)栈、整数/struct* 类型到成员地址的汇编,它的对象检查很弱,也没有规范的List,KV数据类型(SDL,linux,qemu 这些都有自己的"utils")

GC需要定期"stop THE WORLD"并自 static/调用栈变量遍历对象图,连[]{} 都没有的C当然找不出“0引用”指针,更多人使用shared_ptr<T> 引用计数实现Pair<AB>等数据

OOP面向对象- C++, Java~, .NET~

FP函数式- JS,Py, Rust

若对象用 函数值参数/监听器字典,取代override 那就叫“闭包closure” (其可见/可定性同interface,都为 public open)

类比,AbstractAnimal=(T={eat,say})=>“构造器”(name)=>{name, __proto__:T“类型T也有proto”}

“弱结构强脚本”轻松于万物class{}。fn=a=>(b=>a+b) 能从词法上文捕获a,不用 new fn$1(fn.arg[1]) 手动把a放入匿名对象

PF纯函数- Haskell Scala Lisp~

冷门:
FRP响应式- Rx,React

- x86 wasm
在 .data 段加个字符常量, 再在 .text push bp;sub sp,N 栈分配调用 libc:printf
甚至需要关心 nasm; ld 仅仅来让print() 能跳转到dll的“地址”,不会SEGV

LP逻辑式- SQL Prolog #relational #types

逻辑问题也有函数域和'=',只是'a=b' 的含义是“解构赋值” 出解集。b能含变量: [1 x]=[y 2]
a=b, b=1 应求出a=1 ,因此执行流程是 cut(=) 深解构, ',|'and or 靠约束过滤解集, 最后 cat 深建构

若等号右边必须已知,在 ([1]+x)=[1 2] 的求解中
(+) A B
|A=[], B
|A=[x a], [x (a+B)]

appendo A B O
|A=[], O=B
|A=[x a], O=[x appendo(a B)]
里,O=[x 递归] 就无法匹配出 A=[$x ] 这些输入参数了

当然,变量是值。“解”可以是 [List T] 这样的含“类型”变量,<T> 一定是“类型函数”加过的变量,所以:[List T]就是函数签名
可以取各处T的成员(接口)交来infer调用、单独查找fun重载,但本质上都是这样:

fun Box<T>.let(f:(T)->R)=listOf(f(item))
let A B
|A=[Box T],B=[Fn T R], listOf(B.invoke(A.item))
|重载,.
listOf T..|[List T]

阮一峰 体验 👉 swish.swi-prolog.org/example/grammar.pl //在左边粘贴关系, 右边查询,如 murderer(X)
tomstu.art/hello-declarative-world