【发布时间】:2015-05-11 16:04:34
【问题描述】:
假设我想在 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)!
【问题讨论】:
-
在 Lisp 中,数据和代码之间的区别是模糊的,并且在运行时一切都是可检查的和动态的。在 Haskell 中,所有类型和绑定名称在编译时都会被删除,这允许进行大量优化。
-
也许你能解释一下你为什么想要这个?根据您所追求的具体目标,Template Haskell 可能会也可能不会提供帮助。
-
@MathematicalOrchid 我认为现在的问题更好地反映了我想要做的事情:打印绑定/标识符的名称而不是值。这个名字在编译时就知道了!
-
@PeterHall:Lisp 函数只接收对其参数值的引用。它不知道 Haskell 函数执行调用者将这些值绑定到哪些标识符(如果有的话!)。
标签: haskell metaprogramming code-inspection