代码分享,用lisp的形式写html css, in php

@Kinney @xuchunyang 等启发 原帖在这 ,也想用lisp的形式写html,我php用得比较多,于是就实现了一个,代码大部分来自AI,代码见 用lisp的形式写html,在php中 · GitHub

例子:

$env=standard_env();
echo run_lisp(<<<EOF
  (list-to-html '(body 
     (h1 :id "logo" "test")
     (div :id "content" 
         (img :src "./test/t1.jpg") 
         (button :class "btn" :disable "" "click") )) )
EOF,$env);

执行结果:

<body>
  <h1 id="logo">test</h1>
  <div id="content">
    <img src="./test/t1.jpg"/>
    <button class="btn" disable>click</button>
  </div>
</body>

这么一写下去,就发现css也想这么写,但发现css似乎不太好用这种形式,主要是css不支持元素嵌套的写法,css的选择器命名包含空格在内

和 vue 里的 render 函数写法 有点像。

image

我感觉不像吧, vue这个写法就是很普遍常见的写法, 也就是把函数作为参数传递, 但现在感觉几乎所有编程语言都有支持lisp的这个特性,作为语言版本的重大升级

有没有可能 xml是lisp的一个小变种 php也是lisp的大变种之一

用王垠的话来说, 不要纠结于 语言品牌,品牌不重要, 重要的是语言特性,掌握重要的语言特性后任何语言都能写出好的代码.

我以前也不会写lisp, 但写出上面的代码后感觉我又会lisp了, 所以lisp可能真的只有自己亲自去实现一个,才能学得会

开始尝试css也这么写了,在加上elisp形式的注释,用上elisp-mode,截个图 el-css

感觉挺不错的,只是有点分不清,我这到底是在写css还是在写lisp,或者是二者同时在写

突然想到, 如果继html css之后还能在进一步, js也用这种形式写, 那lisp还有什么是写不了的, 所以lisp实际是个文学编程工具

1 个赞

这应该是函数式语言的一大特性,其它支持闭包的语言应该也能这么写,比如 groovy, kotlin, swift 等,这种写法好像是叫 DSL (Domain-Specific Languages)

DSL 的误区 https://www.yinwang.org/blog-cn/2017/05/25/dsl

建议阅读论文[2310.04368] A Core Calculus for Documents

函数式编程,闭包,箭头函数,可变函数……现在应该很少有编程语言不支持这些,我现在听到这些名词感觉就是把lisp里lambda重新发明一次,还要重新去理解的感觉。

Lisp老玩法了,spinneret + parenscript + css-lite 三件套欢迎你喵w

我之前还把cl-who搬到elisp了(帖子),你遇到CL的代码可以搬过来直接用

? 不就是个结构化表达式吗, 为什么会扯到函数式