我已经完全是 recurse 的形状了, 有老哥 Clojure 玩的比较六的么?

2022-07-08 02:19:11 +08:00
 ca1123

希望能有偿咨询一下, 虽然这是我写的最顺的语言, 但还是有很多问题. 希望找人交流一下.

2965 次点击
所在节点    程序员
26 条回复
1hscj3sm63
2022-07-08 16:14:54 +08:00
clj 搞一些函数式运算,还有研究宏造 DSL 还是很爽的,不过感觉平时业务都是搬砖,不太用的上
Dregs2
2022-07-08 17:38:56 +08:00
你发的例子中
(let [form `(+ 3 1)]
(println-test form))
form 已经是是一个 list
在宏里面能拿到的也是这个 list ,没法通过宏来展开,运行时评估看起来还是得用 eval
ca1123
2022-07-08 20:25:24 +08:00
@1hscj3sm63 我哭死, 我写不来 C 系的语言, 都是谭浩强的错
ca1123
2022-07-08 20:25:58 +08:00
@Dregs2 是, macro 会把整个 list 对应到一个 symbol 上去, 只 resolve 一次
ca1123
2022-07-10 09:11:53 +08:00
@Dregs2 我今天又怼了一天 macro, 自定义 macro 组装 go-loop, 里面还有<!和作为传进来参数的 channel. 人都麻了. clojure 还真是有点问题, 数据结构上, 不像其它 lisp 是封闭的, clojure 很多数据本质是 java 对象, 包括语言本身的要素, 正向求值 fn 的时候没问题. 但是在 macro 里面如果, 就不能形成 clojure 代码的 closure. 如果 var 里面是一个 java object, 它也可以 unquote, 但是 eval 不认... 这时候就得手操 dynamic var, 或者 intern symbol, 或者 laziness (如果这个 object 其实是 clojure 代码产生的), 把 macro 里面 eval 要用的数据套一个 clojure var 的形式, eval 这个东西, 还不接受 lexical binding, fn 参数符号和 let 的符号都不认. 不过这个用 macro 接收 s-exp 拼一个能运行的 form 的目的总算有点眉目了.
wdv2ly
2022-08-02 23:08:19 +08:00
@Dregs2 坐标深圳

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/864802

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX