假设我想要一个函数,它接受一个数字并将其作为字符串返回,与给出的完全一样。以下不起作用:
SetAttributes[foo, HoldAllComplete];
foo[x_] := ToString[Unevaluated@x]
foo[.2]
和的输出foo[.20]
是相同的。
我想这样做的原因是我想要一个可以理解以点为分隔符的日期的函数,例如f[2009.10.20]
. 我意识到这是对 Mathematica 的一种奇怪的滥用,但我正在制作一种特定于领域的语言,并希望通过执行 eval (ToExpression) 来使用 Mathematica 作为它的解析器。如果我可以依赖两位数的日期和月份,我实际上可以完成这项工作,比如 2009.01.02 但我也想允许 2009.1.2 最终归结为上述问题。
我怀疑唯一的答案是将事物作为字符串传递然后解析它,但也许有一些我不知道的技巧。请注意,这与这个问题有关: Mathematica: Unevaluated vs Defer vs Hold vs HoldForm vs HoldAllComplete vs etc etc