最近准备使用Flutter,那些嵌套n层的代码感觉可读性和代码颜值都不好,一切都是Widge,但大部分Widge都会让你多一层,逻辑上也挺好,很多Widge就是CSS的一部分
Dart 能不能实现类似我这帖子提到的把代码从嵌套变成平行的风格? 例如把 Scaffold(Container(Margin(…))) 变成
Scaffold(
Container,
Margin,
…)
如果不行就反应出了 Lisp 的灵活度,主要是macro,很难被复制啊…
不过更高级点的是不是也可以做一个Lisp 代码转换为 Dart/Flutter 代码的编译器(当然就用Lisp来写)啊? 那样代码写起来会更爽吧?
就像Google也要让Flutter转换为JS实现网页端
记得有个 Lisp付费代码库写 iOS 的,估计是直接编译而不是转换为OC再编译吧?
这件事可以指望clojure,不过目前还没有人去实现。clojure社区还都在用 rn.
对Clojure 没有感觉,语法看起来更加有限制了,风格也有不小差别
我也不知道是因为初遇CL的时候(《黑客与画家》)对那风格有感觉就限制住了
但 Clojure 有成套的做宿主语言的机制,其它的 Lisp 这方面要差很多。
我对Clojure 也没有详细去了解(翻看了下书里的代码就没动力了),但是能不能像CL2 那样写个库把 CL 的语法改成 Clojure 那样?
(主要就是 set-dispatch-macro-character 和 set-macro-character 吧?)
CL 可以改成 Clojure 那样,但是反过来不行。Clojure 的语法扩展是有边界的。
你可以看看julia的源码 那里面有一个用C写的lisp 是用来解析julia
你可以hack一下 自定义自己的解析器!
觉得怎么样呢?
如果你不打算看C语言 那你的lisp也不会高到哪去
C语言早就会啦,十年前就用C语言写了一个VS对战平台DOTA的挤房器,大学舍友都说好用。。。
核心就是 pointer 吧? C语言默认是用 stack,而 Lisp 是默认用 heap (会像OC一样自动释放吧?前版本都是要手动 release,iOS6 以后才让人舒一口气不用手工[obj release])
那是我的表面理解~~
1 个赞
用scheme写了个简单的 Threading function:
(define (~>> arg list-of-funcs)
((foldl compose identity list-of-funcs) arg))
;; For example:
(~>> 0
(list add1
add2
product3
product4))