> convert(table([Kr, G, S, Art]), 'array'); ⇒ [Kr, G, S, Art] > convert([2, 0, 0, 6], 'base', 10, 2); ⇒ [0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1] > convert(2006, 'binary'); ⇒ 11111010110 > convert(Tallinn, 'bytes'); ⇒ [84, 97, 108, 108, 105, 110, 110] > convert([73, 110, 116, 101, 114, 110, 97, 116, 105, 111, 110, 97, 108, 32, 65, 99, 97, 100, 101, 109, 121, 32, 111, 102, 32, 78, 111, 111, 115, 112, 104, 101, 114, 101], 'bytes'); "International Academy of Noosphere" 2 > convert(sin(x)/x, 'confrac', x, 8); ⇒ 1 + x 2 −6 + x 210 11 x − + 3 126 > convert(x*y*z, `+`), convert(x*y*z – h + 64, `*`); ⇒ x + y + z, -64 x y z h > [convert(101100111, 'decimal', 'binary'), convert(64, 'decimal', 'octal'), convert(`ABCDEF`, 'decimal', 'hex')]; ⇒ [359, 52, 11259375] > convert(y*sin(x) + x*cos(y), 'exp'); ⇒ −1 I y e(x I) − e(1x I) + x 12 e(y I) + 12 e(1y I) 2 > convert([[V, 42, 64], [G, 47, 59], [Art, 89, 96]], 'matrix'); ⇒ ArtGV 424789 645996 > convert([inch, ft, yard, miles, bushel], 'metric'); 1275000m, 3811250m, 11431250m, 2514615625km, 0.035238775147289395200 m3 > convert([Art, Kr, Sv, Arn, V, G], `and`); ⇒ Art and Kr and Sv and Arn and V and G > G:= (x, y) -> x*sin(y): convert(G(x, y), 'numericproc'); proc(_X, _Y) local err; err := traperror evalhf(( (x×sin( )y )(_X _Y, )));if type [( err], [numeric]) then err else err := traperror(evalf((x×sin(y))(_X, _Y))); if type [( err], [numeric]) then err else undefined end if end if end proc > convert(a*x + b*y - 3*x^2 + 5*y^2 - 7*x^3 + 9*y^3, 'horner', [x, y]); (b + (5 + 9 y) y) y + (a + (-3 - 7 x) x) x |
С учетом сказанного приведенный фрагмент использования вышерассмотренных пакетных средств конвертации типов (форматов) выражений в широком понимании данного термина представляется достаточно прозрачным и особых пояснений не требует. Более детальное ознакомление со средствами данного класса Maple-языка рекомендуется проводить при непосредственной практической работе в его среде. Нами также был определен ряд довольно полезных средств конвертации объектов Maple-типа в объекты типа rtable, и наоборот [103]. Например, вызов нижеприведенной процедуры avm_VM(G) возвращает результат преобразования объекта, определенного фактическим аргументом G типа {array, vector, matrix}, в объект типа {Vector, Matrix}, и наоборот – объект типа {Vector, Matrix} в векторы или матрицы типа Maple.
avm_VM := proc(G::{Matrix, Vector, matrix, vector, array}) local k h S H M, , , , ; S := H → rtable(op 2,( eval(G)), {op(op 3,( eval(G)))}, 'subtype' = H); `if`(type(G, 'array') = true and nops [( op 2,( eval(G))]) = 1, S(Vector['row']), `if`(type(G, 'array') = true and nops [( op 2,( eval(G))]) = 2 and nops([seq(k, k = op(2, eval(G))[1])]) = 1, rtable( op [( assign(h = op 3,( eval(G))), [seq(rhs(h k[ ]), k = 1 .. nops( )h )]]), 'subtype' = 'Vector'['row']), `if`( type(G, 'array') = true and nops [( op 2,( eval(G))]) = 2 and nops [( seq(k, k = op 2,( eval(G))[ ]2 )]) = 1, rtable( op([assign(h = op(3, eval(G))), [seq(rhs(h[k]), k = 1 .. nops(h))]]), 'subtype' = 'Vector'['column']), `if`(whattype(G) = 'Matrix', op([assign(M = Matrix(op 1,( G), op 2,( G), subs('readonly' = NULL, MatrixOptions(G)))), matrix(op 1,( G), [op(op 2,( G))])]), `if`(whattype(G) = 'Vector'['row'], vector(`if`(whattype(op 1,( G)) = `..`, rhs(op 1,( G)), op 1,( G)), op([assign(h = op(2, eval(G))), [seq(rhs(h[k]), k = 1 .. nops(h))]])), `if`( whattype(G) = 'Vector'['column'], matrix( `if`(whattype(op 1,( G)) = `..`, rhs(op 1,( G)), op 1,( G)), 1, op [( assign(h = op 2,( eval(G))), [seq(rhs(h k[ ]), k = 1 .. nops(h))]])), S Matrix( ))))))) end proc |
При этом, следует отметить, что в нашей книге [12] (прилож. 1) представлен целый ряд особенностей выполнения конвертации выражений одного типа в другой посредством convert-функции, имеющих важное значение при практическом использовании данного средства. Там же приведены и другие полезные замечания относительно convert-функции, сохраняющие свою актуальность и для последующих релизова Maple.