Поведение карты (/ @) - PullRequest
       6

Поведение карты (/ @)

4 голосов
/ 04 февраля 2011

Полагаю, это - что-то легкое, что я пропускаю - явный признак неграмотности, но в любом случае

Как это

(Map[Sign, LessEqual[x, y]]) === LessEqual[Sign[x], Sign[y]]
-> True  

Но

(Map[Sign, LessEqual[-1, -100]]) == LessEqual[Sign[-1], Sign[-100]]
-> False  

Ответы [ 2 ]

7 голосов
/ 04 февраля 2011

Использование Trace на lhs поможет показать, что произошло.

Trace[Map[Sign, LessEqual[-1, -100]]]

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

Обратите внимание, что у карты нет атрибутов HoldXXX.

Attributes[Map]

Out [3] = {Protected}

Таким образом, LessEqual оценивает, прежде чем Map что-либо сделает.В этот момент вы получаете

Map[Sign,False]

Поскольку False является атомарным выражением, это просто оценивается как False.

Rhs, конечно, оценивается как True, поскольку Sign [-1] и Sign [-100] -1.

Даниэль Лихтблау Вольфрам Исследования

3 голосов
/ 04 февраля 2011

Посмотрите, что произойдет, если вы сделаете это в два шага:

In[1]:= LessEqual[-1,-100]
Out[1]= False

In[2]:= Map[Sign, False]
Out[2]= False

Второй результат может быть неожиданным, но, как оказалось, работает функция Map;если вы используете Map в выражении длиной 0 (например, символ False), оно просто возвращает это выражение без изменений.Другой пример:

In[3]:= Map[f, "Pillsy"]
Out[3]= "Pillsy"

С другой стороны, очевидно

In[4]:= LessEqual[Sign[-1],Sign[-100]]
Out[4]= True
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...