分享:让 Common Lisp 代码更简洁可读性高一些~

最近准备使用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))