Главная Длительная эволюция [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [ 48 ] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] ?Ivanov GlobaVIvanov age[IvanovY = 30 sex[IvanovY = muse occupation[IvanovY = engineer Как уже отмечалось, локальным аналогом глобального правила подстановки, определяемого с помощью функции Set, является Ки1е[ехрг1,ехрг2], или в инфиксной форме expriехргг-Для функции SetDelayed аналогичное ей локальное правило задается с помощью функции RuleDelayed[expri,ехргг], или во входном формате expri ехргг- Оба вида локальных правил применяются с помощью функции ReplaceAlI. rll = х-г -> -2 {h[x]/.rll,hh[x]/.rll} {1-уМ-уП В обоих случаях правило, или подстановка, гИ применяется к уже вычисленным выражениям h[x] и hh[x], поэтому результаты вычислений совпадают. Оба типа локальных правил могут быть использованы с любыми шаблонами. Пусть в процессе вычислений встретилось выражение exl = x-((n-l-l)/n-l/n) п п, которое после приведения выражения в показателе к общему знаменателю равно х. „Математика" сама по себе этого преобразования не выполняет, поэтому попытаемся заставить ее выполнить преобразование с помощью локальных правил: {г12 = хк-- x-TogetherM.rla = х"к :> xTogether[k]} {ех1/.г12,ех1/.г13} {x("+i)/"-i/",i} В этом случае, как и следовало ожидать, эффективным оказалось правило г13. 6.2. Шаблоны Именованные шаблоны вида х- использовались нами при определении новых функций. Начнем систематическое знакомство с этим понятием. В принципе шаблоны используются для выделения классов выражений „Математики". Самый общий шаблон имеет вид , соответствующий класс состоит из всех выражений „Математики". Конкретные выражения A[ei,...,e„] являются самыми узкими шаблонами, выделяя классы, состоящие из одного выражения. Остальные шаблоны по степени общности занимают промежуточное положение. Рассмотрим, например, выражение х, или в полной форме Power[x,3]. Ясно, что оно является единственным элементом класса, выделяемого этим же выражением, и входит в класс выражений, определяемых шаблоном -. Кроме того, оно входит в класс выражений вида х"., который можно описать как „х в любой степени". Классы выражений *3, „нечто в третьей степени", и „нечто в любой степени" также содержат х. Будем говорить, что некоторое выражение отвечает шаблону, если оно входит в определяемый этим шаблоном класс. Шаблон можно снабдить именем, которое должно быть символом. Именованный шаблон имеет вид symbol.. Имя шаблона не влияет на класс! в1лражений, им выделяемых. Кроме того, можно указать заголовок шаблона в форме .head. Заголовок существенно сужает класс выражений. Так, шаблон .Integer выделяет класс атомарных выражений, являющихся целыми числами. Рассматриваемое нами выражение х отвечает шаблону у-З и не отвечает шаблону x-.Real. Имеется встроенная функция MatchQ, проверяющая соответствие выражений шаблонам. Выражение MatchQ[expr, pattern] принимает значение True, если выражение ехрг отвечает шаблону pattern, и принимает значение False - в противном случае. {MatchQ[x"3, Symbol Integer], MatchQ[x"3,x~ (-Integer + .Integer)]} {True, False} Последний пример достаточно поучителен. С точки зрения обычной математики любое целое число всегда можно представить в виде суммы двух других целых чисел, и сумма целых чисел есть снова целое число. Поэтому можно было бы ожидать, то х отвечает шаблону x"{-Integer-\- .Integer). На самом деле это не так, потому что „Математика" сравнивает внутренние полные формы выражения и шаблона, а не устанавливает их математическую эквивалентность. Кроме шаблонов, основу которых составляет подчеркивание (В1апк[]), имеются шаблоны вида - двойное подчеркивание (BlankSequence[]) и тройное подчеркивание (BlankNullSequence[ ]). Двойное подчеркивание выделяет класс выражений, состоящих из одного или из нескольких выражений „Математики", разделенных запятыми. Например, выражение Ь[е1,е2,ез] отвечает шаблону h[x.-]. Тройное подчеркивание выделяет класс, состоящий из нуля или из нескольких выражений, разделенных запятыми. MatchQ[{a,b,c},{a,. ,b, }] True Аналогично шаблону эти последние шаблоны можно снабжать именами. Шаблоны ..head и ...head предполагают, что все выражения последовательности имеют одинаковый заголовок. [0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [ 48 ] [49] [50] [51] [52] [53] [54] [55] [56] [57] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86] 0.0013 |