python - 当一个 DSL 得到 'lispy'

标签 python lisp dsl

a recent question about a DSL我试图将 DSL 表达式与恰好是过程性的嵌入语言的表达式混合(在这种情况下是 Python)。经过一些实验后,我打算放弃继续使用严格的过程语法,转而采用 lispy 风格,即代替我最初的想法

 @MY_DSL_FOO_FUNCTION(params,@ANOTHER_DSL_FUNCTION(...),expression_in_python,more_expressions_in_python)

我现在倾向于

  {MY_DSL_FOO_FUNCTION params,{ANOTHER_DSL_FUNCTION ...},expression_in_python,more_expressions_in_python}

对这个语法决定有什么意见(最好是根据经验)?

最佳答案

如果您稍微修改该语法以正确使用 ()'a 和 ,',则不需要“DSL”。

您拥有普通的 Python。生活是美好的。

from my_standard_package import *

(MY_DSL_FOO_FUNCTION, params, (ANOTHER_DSL_FUNCTION, ), expression_in_python, more_expressions_in_python)

您需要做的就是添加 ,'s。由于您似乎有两件事 — 函数和表达式,也许您是这个意思。

( MY_DSL_FOO_FUNCTION(params), ANOTHER_DSL_FUNCTION(), expression_in_python, more_expressions_in_python )

那可能更像 Pythonic。

但也许您的目标是某种后期绑定(bind),稍后在其他上下文或其他内容中评估元组。

from functools import partial
( partial(MY_DSL_FOO_FUNCTION, params), ANOTHER_DSL_FUNCTION, lambda: expression_in_python, lambda: more_expressions_in_python )

通过这种方式,带有参数的函数被用来构建其他可以稍后评估的函数。是的。这确实涉及更多语法。然而。它还避免创建另一种语言。

关于python - 当一个 DSL 得到 'lispy',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9429255/

相关文章:

python - Pyramid 错误 : AttributeError: No session factory registered

Python开发模块路径

python - 嵌入式用户定义表达式的安全实现策略

python - 在 Django 中仅删除某些多对多关联

Python:添加元素以在字典中设置值

Lisp:引用符号值列表

emacs - emacs lisp 中惯用的序列化方式

clojure - 将抽象/空变量传递给函数 Clojure

python - 用于交易策略开发的脚本语言

configuration - 如何在 Kotlin for TeamCity 中隐藏自定义构建步骤中的参数?