Использование \ [InvisibleApplication] и других связанных невидимых символов


35

От переднего конца, \[InvisibleApplication] может быть введен как Esc@Esc, и невидимый оператор @!. К сожалению, комбинация клавишных (возможно, была задействована кошка), это подкралось в мой код, и я потратил много времени, пытаясь понять, почему в мире f x интерпретируется как f[x]. Пример:

enter image description here

Теперь нет никакого способа, я мог бы заметил это визуально. *Form s тоже не помогли. Если вы достаточно осторожны, вы можете увидеть невидимый символ между f и x, если вы переместите курсор по выражению. В конце концов, я узнал об этом только, посмотрев содержимое ячейки.

Также есть \[InvisibleSpace], \[InvisibleComma] и \[ImplicitPlus], которые аналогичны приведенным выше. Должно быть какое-то использование для них (возможно, внутри), поэтому оно было реализовано в первую очередь. Я могу видеть использование невидимого пространства (позволяет размещать надстрочные индексы/индексы, не требуя чего-либо видимого для запирания), и невидимую запятую (позволяет использовать индексирование, как в математике). Это невидимое применение, которое меня интересует ...

Единственное преимущество, которое я вижу, - это визуально обфускать код. Где (или как) это используется (возможно, внутри?), И могу ли я его отключить? Если можно отключить, будут ли какие-либо побочные эффекты?

+1

'\ [InvisibleComma]' иногда полезен для индексирования массива. Например, '{{a, b, c}, {d, e, f}} \ [LeftDoubleBracket] 2 \ [InvisibleComma] 3 \ [RightDoubleBracket]'. Это немного лучше, если часть '\ [LeftDoubleBracket] 2 \ [InvisibleComma] 3 \ [RightDoubleBracket]' вводится как индекс ... 18 янв. 122012-01-18 11:56:36

34

Используется в TraditionalForm выход, например. здесь:

TraditionalForm[ Hypergeometric2F1[a,b,c,x] ] 

Без \[InvisibleApplication] вероятно, было бы трудно для Mathematica, чтобы разобрать его обратно InputForm. Вероятно, он используется в других местах внутри.

Для того, чтобы избавиться от него:

Найдите файл UnicodeCharacters.tr в /usr/local/Wolfram/Mathematica/8.0/SystemFiles/FrontEnd/TextResources (или эквивалент под ОС Windows или MacOSX), сделайте резервную копию файла, открыть его и удалить строку

0xF76D  \[InvisibleApplication]  ( [email protected]$ ... 

Затем ваша кошка снова может прыгать на клавиатуре.


11

Вы могли бы де-запутать это что-то вроде этого:

MakeExpression[RowBox[{a_, "\[InvisibleApplication]", b_}], StandardForm] := 
    HoldComplete[invisibleapply[a, b]] 

После чего:

In[13]:= f\[InvisibleApplication] x 
Out[13]= invisibleapply["f", "x"] 

Я думаю, что эти невидимые символы могут быть полезны для аппроксимации традиционных математических обозначений, но в общем Придерживаться стандартная математическая нотация, квадратные скобки и все, менее запутанная.

В общем, для отладки такого рода проблемы, когда клетка не разобрать, как вы ожидали, команда «Показать Выражение» (Ctrl +Shift, + E) может быть invauluable.

+2

, но это все еще не останавливает кошку от удара Esc @ Esc снова ... 17 янв. 122012-01-17 21:29:17

+1

Да, выражение выражения - это то, как я понял эти функции. Я могу видеть использование невидимого пространства (позволяет размещать надстрочные индексы/индексы, не требуя чего-либо видимого для запирания), и невидимую запятую (позволяет использовать индексирование, как в математике). Это невидимое применение, которое меня интересует ... 17 янв. 122012-01-17 21:29:53

  0

Невидимое применение приведет к появлению таких вещей, как обозначение оператора (где * Ax * означает «применить оператор A к вектору x») и комбинаторный формализм (где KS означает «применять комбинатор K к комбинатору S "). 18 янв. 122012-01-18 07:38:24


20

Я не думаю, что невидимые персонажи имеют какие-либо внутренние функции. Они, вероятно, просто для того, чтобы выражения выглядели хорошо для нас, людей. Место, где я могу думать об использовании \[InvisibleApplication], как-то group action
g x = g[x], но обязательно будут другие места.

Что касается видимости невидимых символов. Вы можете сделать все специальные символы явные используя

SetOptions[EvaluationNotebook[], ShowSpecialCharacters -> False] 

но это эффекты такие вещи, как \[Rule] (->), греческие символы (\[Alpha]) и т.д ...

Там другой вариант ноутбука

SetOptions[EvaluationNotebook[], ShowInvisibleCharacters -> None] 
(* or ShowInvisibleCharacters -> All, True, False *) 

который похоже, что это должно быть то, что вы ищете, но, похоже, ничего не делает.

Я думаю, что редактирование файла UnicodeCharacters.tr (например, Rolf suggests) - это путь. (Это будет следующая вещь, которую я пробовал, но был избит ей!)


5

C @ ts сбивали с толку людей с Schroedinger's время ... по крайней мере. Недавние исследования показывают, что невидимые персонажи Mathematica стимулируют зрительные и развлекательные центры в мозгу кошки. Особенно характер «@» с длинным хвостом мыши .

В category theory, фундаментальной ветви математики, было обычной практикой для описания функторного приложения, использующего (что составляет) «невидимое @». Например, применение functor $F$ к объекту $A$ было просто записано как $FA$ Пакет моей категории Wildcats, будучи дружественным к кошачьему и основанному на математике, действительно позволяет пользователю заниматься этой (малой) практикой, но не поощряет его. На самом деле предупреждение, описывающее опасности использования невидимых символов, было заметно в документации Wildcats с самых ранних версий. Некоторые человеческие пользователи, возможно, не заметили этого, так как в настоящее время он написан невидимыми символами.

  0

Это один из самых юмористических, но просветительных ответов, которые я видел через некоторое время ... +1! 23 окт. 132013-10-23 12:03:39

  0

Спасибо, @ Томас, я с облегчением. Некоторые пользователи, в некоторых других разделах StackExchange, недовольны юмором. К счастью, здесь, на MMA.SE, мы создали лучшее сообщество. 25 окт. 132013-10-25 09:28:59