Опубликован: 03.12.2012 | Доступ: свободный | Студентов: 1102 / 247 | Длительность: 16:43:00
Лекция 11:

Программирование, основанное на правилах преобразований

Вопросы

  1. Какие преобразования называются в Mathematica глобальными? Каким образом задаются глобальные правила преобразований?
  2. Для каких целей выражения снабжаются атрибутом Protected? Каким образом атрибут Protected можно убрать из списка атрибутов выражения? Добавить в список?
  3. Что такое верхнее значение выражения? Каким образом осуществляется присвоение выражениям верхних значений?
  4. Что такое нижнее значение выражения? Каким образом осуществляется присвоение выражениям нижних значений?
  5. Какие преобразования называются в Mathematica локальными? Каким образом задаются локальные правила преобразований?
  6. Какие выражения в Mathematica называются шаблонами?
  7. Чем отличаются друг от друга шаблоны _h и h_?
  8. Какие классы выражений выделяют шаблоны с двумя и тремя символами подчёркивания? При работе с каким классом данных их целесообразно использовать?
  9. В каких случаях используются шаблоны с условиями? Каким образом они задаются?
  10. В каких случаях используются шаблоны-альтернативы? Каким образом они задаются?

Упражнения

  1. Опишите процесс вычисления следующих наборов выражений (в скобках для проверки указан результат каждого вычисления).
    • x=a;

      y=b;

      x+10/.x->6

      (результат: 16)

    • a=5;

      x:=a;

      y=b;

      a=10;

      x+10/.x->y

      (результат: 20)

    • a=5;

      x=a;

      y=b;

      a=10;

      x+10/.x->y

      (результат: 15)

    • a=c;

      x=a;

      y=b;

      a=10;

      x+10/.x->y

      (результат: 10+b)

    • Set[k,10];

      SetDelayed[l,u];

      ReplaceAll[l^2-k,Rule[k,l]]

      (результат: -10+u^2)

    • Set[n,5];

      SetDelayed[k,n];

      SetDelayed[l,u];

      Set[n,10];

      ReplaceAll[l^2-k,Rule[k,l]]

      (результат: -10+u^2)

    • SetDelayed[n,5];

      Set[k,n];

      Set[l,u];

      Set[n,10];

      ReplaceAll[l^2-k,Rule[k,l]]

      (результат: -5+u^2)

    • SetDelayed[n,v];

      Set[k,n];

      Set[l,u];

      ReplaceAll[l^2-k,Rule[k,l^2]]

      (результат: 0)

    • SetDelayed[n,v];

      Set[k,n];

      SetDelayed[l,u];

      ReplaceAll[l^2-k,Rule[l,k]]

      (результат: -v+v^2)

  2. Присвойте выражениям, записанным слева, значения, указанные справа. Для выполнения задания используйте присвоение верхних значений и управление атрибутом Protected.

    k^l 3

    m^2 n^3

    x+y z

    x+y^2 z^2

    Cos[f] g+h

    Cos[f]+g h

    u^Sqrt[v] w

    u^Sqrt[3] w

    Sqrt[3]^u v

  3. При помощи задания нижних значений создайте простейшую базу данных, содержащую информацию о сотрудниках вашего отдела/ студентах вашей академической группы/ членах вашей семьи. Занесите в базу следующие сведения: фамилия, имя, отчество, пол, день, месяц и год рождения.
  4. Задайте пользовательскую функцию, которая преобразует строку, содержащую только буквы латинского алфавита, в список, элементами которого являются номера этих букв в алфавите. Для выполнения задания используйте функцию Characters, с которой мы познакомились в лекции 3 сего курса, и локальные правила преобразования.
  5. Задайте пользовательскую функцию, дублирующую действие встроенной функции Abs. Используйте при задании шаблоны с условиями.
  6. Найдите как можно больше шаблонов, которым соответствуют заданные ниже выражения. Проверьте соответствие при помощи функций MatchQ и Cases.

    a^b+2*c

    a^2+b^2

    a^b+b^a

    1+2*I

    {a,b,c}

    {a,{},b,{},c}

    x[t]^y

    x[t]*y[t]

    a^(2*a+3*b)