我猜这个很容易,我忽略了是一个明显的文盲迹象,但无论如何。
怎么样?
(Map[Sign, LessEqual[x, y]]) === LessEqual[Sign[x], Sign[y]]
-> True
但是
(Map[Sign, LessEqual[-1, -100]]) == LessEqual[Sign[-1], Sign[-100]]
-> False
答案 0 :(得分:7)
在lhs上使用Trace将有助于显示已发生的事情。
Trace[Map[Sign, LessEqual[-1, -100]]]
Out [2] = {{-1< = -100,False},Sign / @ False,False}
请注意,Map没有HoldXXX属性。
Attributes[Map]
Out [3] = {Protected}
因此,在Map执行任何操作之前,LessEqual会进行评估。那时你得到了
Map[Sign,False]
由于False是一个原子表达式,因此只评估为False。
当然,rhs的计算结果为True,因为Sign [-1]和Sign [-100]都是-1。
Daniel Lichtblau Wolfram Research
答案 1 :(得分:3)
看看当你分两步完成时会发生什么:
In[1]:= LessEqual[-1,-100]
Out[1]= False
In[2]:= Map[Sign, False]
Out[2]= False
第二个结果可能会令人惊讶,但恰好是Map
函数的工作原理;如果对长度为0的表达式使用Map
(如符号False
),则只返回该表达式不变。另一个例子:
In[3]:= Map[f, "Pillsy"]
Out[3]= "Pillsy"
另一方面,显然
In[4]:= LessEqual[Sign[-1],Sign[-100]]
Out[4]= True