假设我需要一个函数,它接收一个数字并将其作为字符串返回,完全按照给出的。以下不工作:可以区分foo [.2]和foo的Mathematica函数foo [.20]
SetAttributes[foo, HoldAllComplete];
foo[x_] := ToString[[email protected]]
的输出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
神圣的废话,你真了不起!我曾认为这是不可能的。一个问题:我没有使用前端,而是内核处理的纯文本。在那种情况下,你认为我毕竟运气不好? (我很快就会尝试更多的自己,这是一个很好的领导,非常感谢!) – dreeves 2009-10-27 16:09:08