在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/