gpt4 book ai didi

javascript - 在 JavaScript 中重构这个 Lisp 和 Haskell 风格的宏

转载 作者:太空宇宙 更新时间:2023-11-03 18:42:37 24 4
gpt4 key购买 nike

考虑这个 Lisp 宏:

(defmacro doif (x y) `(if ,x ,y))

在 Haskell 中也是如此:

doif x y = if x then (Just y) else Nothing

是否有可能在 JavaScript 的“lisp-y”语言中实现这种优雅? (lisp-y这个词的使用来自JS语言的作者)

最佳答案

是的,这是可能的。如果你只是想一对一映射 lisp-y 代码,那么你可以使用 conditional operator如下:

x ? y : null // note that x and y are expressions, not values: they aren't eval'd

如果您不介意表达式的结果是一个虚假值(而不是显式的 null 值),那么您可以使用 guard operator相反:

x && y // reminder: x and y are expressions - they aren't evaluated until needed

如果您想创建自己的doif 语法,那么您可以使用sweet.js 提供的卫生宏。如下:

macro doif {
rule { ($x:expr) ($y:expr) } => { $x ? $y : null }
}

上面的宏允许你这样写代码:

doif (x < 100) (x + 1)

上面的代码被转换为:

x < 100 ? x + 1 : null

如果条件 x 为假,则使用这些运算符中的任何一个时,将不评估 y

关于javascript - 在 JavaScript 中重构这个 Lisp 和 Haskell 风格的宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19357035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com