gpt4 book ai didi

haskell - 如何在 Haskell 中打印标识符或绑定(bind)的名称?

转载 作者:行者123 更新时间:2023-12-02 06:32:35 24 4
gpt4 key购买 nike

假设我想在 Haskell 中打印“变量”的名称和值。该名称在编译时已知!有没有比以下示例更好的方法?

module V
(e, c, eV, h, hbar, nm, k, viewAllConstants) where
import Text.Printf
c = 2.99792458e8::Double
e = exp(1)
eV = 1.602176565e-19
h = 6.62606957e-34
hbar = h/(2*pi)
nm = 1e-9
k = 1.3806488e-23
viewAllConstants = do
putStr ((\a b -> (foldl (++) "" ( zipWith (++) a (map (printf " = %.2e\n") b))))
["c", "e", "eV", "h", "hbar", "nm", "k"]
[c, e, eV, h, hbar, nm, k] )

请在您的回答中发布一个工作代码示例 (runhaskell)!

最佳答案

正如@PeterHall 所说:

In Lisp, the distinction between data and code is blurred and everything is inspectable and dynamic at runtime. In Haskell, all types and binding names are erased at compile time, which allows for a huge amount of optimisation.

换句话说,名称在运行时未知

此外,这些不是“变量”,而是常量,或者如前所述,绑定(bind)。出于这个原因,能够访问绑定(bind)的名称是没有意义的,因为它永远不会改变。

正如@MathematicalOrchid 所建议的,可能有一个模板 Haskell 解决方案,尽管它可能只是相对有用。

至于打印绑定(bind)的更好方法,试试这个:

import Control.Monad (forM_)

viewAllConstants = forM_ (\(a, b) -> putStrLn (a ++ " = " ++ show b))
$ zip ["c", "e", "eV", "h", "hbar", "nm", "k"]
[ c, e, eV, h, hbar, nm, k ]

关于haskell - 如何在 Haskell 中打印标识符或绑定(bind)的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30172449/

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