映射(/ @)行为

Dr.*_*ius 4 wolfram-mathematica

我想这很容易,我忽视的是一个明显的文盲迹象,但无论如何.

那个怎么样

(Map[Sign, LessEqual[x, y]]) === LessEqual[Sign[x], Sign[y]]
-> True  
Run Code Online (Sandbox Code Playgroud)

(Map[Sign, LessEqual[-1, -100]]) == LessEqual[Sign[-1], Sign[-100]]
-> False  
Run Code Online (Sandbox Code Playgroud)

Dan*_*lau 7

在lhs上使用Trace将有助于显示发生了什么.

Trace[Map[Sign, LessEqual[-1, -100]]]
Run Code Online (Sandbox Code Playgroud)

Out [2] = {{-1 <= -100,False},Sign/@ False,False}

请注意,Map没有HoldXXX属性.

Attributes[Map]
Run Code Online (Sandbox Code Playgroud)

Out [3] = {Protected}

因此,在Map执行任何操作之前,LessEqual会进行评估.你得到了什么

Map[Sign,False]
Run Code Online (Sandbox Code Playgroud)

由于False是一个原子表达式,因此它的计算结果为False.

当然,rhs的计算结果为True,因为Sign [-1]和Sign [-100]都是-1.

Daniel Lichtblau Wolfram Research