2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 команды Mathematica 7, аналогичные Maple
Сообщение24.12.2011, 13:29 
Есть программа в Maple, надо тот же алгоритм проделать в Mathematica 7...
Так вот...

В программе Maple
whattype(x+y) вернёт +, т. е. тип операции
op(x+y) вернёт x, y, т. е. операнды

Никак не могу найти аналогичные команды в Mathematica 7... Может кто знает? Заранее большое спасибо...

 
 
 
 Re: команды Mathematica 7, аналогичные Maple
Сообщение24.12.2011, 21:36 
Код:
Hold[x + y][[1]][[0]]
Hold[x + y][[1]][[1]]  Hold[x + y][[1]][[2]]

или даже
Код:
u=x+y
u[[0]]
u[[1]] u[[2]]

 
 
 
 Re: команды Mathematica 7, аналогичные Maple
Сообщение24.12.2011, 23:32 
Прозрачнее вместо e[[0]] использовать Head[e].
Aralidka в сообщении #519222 писал(а):
op(x+y) вернёт x, y, т. е. операнды
Завёрнутыми в список вернёт? Если так, то вам надо List @@ e или, что то же самое, Apply[List, e].

Hold bocovp здесь употребил, чтобы выражение не вычислялось. Если попытаться брать вышеуказанные вещи от выражения, оно перед этим вычислится. Возможно, во что-то компактное, а возможно, что и вообще в странное что-нибудь, с другими компонентами. Но если использовать Hold как выше, то вместо Plus для Head[Hold[2+3]] оператора будет возвращаться Hold! Правильное решение есть, щас я его найду, а то забыл.

-- Вс дек 25, 2011 02:39:44 --

А именно: вместо Hold оборачивайте выражение, которое хотите разделить на кусочки, в Unevaluated. (Введена во второй версии.) Эта штука имеет единственную цель: подать свой аргумент во внешнюю функцию невычисленным. Даже если та просит (есть те, которые не всегда просят в некоторых местах, см. http://reference.wolfram.com/mathematica/tutorial/NonStandardEvaluation.html; кстати, там ещё упоминается дельная функция Extract, вдруг пригодится).

-- Вс дек 25, 2011 02:41:56 --

Не забудьте также и о том, что Mathematica не делит свои выражения на операции и что-то ещё, все они предстают для неё одинаковыми в форме голова[параметры]. Собственно, потому функция для выделения из суммы плюса и называется Head.

 
 
 [ Сообщений: 3 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group