gpt4 book ai didi

haskell - (模拟)Haskell 中的宏?

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

Reddit 上的一个人提请我注意这段代码:

main = do
let ns = [print 1, print 2, print 3]
sequence_ ns
sequence_ $ reverse ns
sequence_ $ tail ns ++ [head ns]
head ns

这里发生的事情是我们有一系列操作可以用来做一些事情,比如反转或获取它的尾部或头部。

太棒了。

我想做的是深入了解各个元素并彻底改变它们。例如,我希望能够做这样的事情:

ns !! 0

然后得到类似 [print, 1] 的东西,然后将最后一个元素更改为 3.14,以便函数打印 3.14。

在 Haskell 中完全可行还是我应该回到 LISP?

一个重要的编辑:我有点失误了。我知道我需要创建一个新列表。是否可以获取作为列表一部分的函数的参数?我想要的是能够从它们的标识符/参数组成函数,并且能够在函数被评估之前将函数分解为标识符/参数。

最佳答案

它比 Lisp 稍微复杂一点,但是对于 Haskell 中的元编程,您可以使用 Template Haskell .

例如,[|print 1|] 将被翻译成

return $ AppE (VarE $ mkName "print") (LitE $ IntegerL 1)

其类型为 Q Exp(表达式的引用)。

如果要将自己的数据拼接成引号,[|print $(foo 3.14)|] 会在编译时执行foo 3.14

关于haskell - (模拟)Haskell 中的宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295763/

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