Как записываются арифметические выражения в информатике: Выражения — урок. Информатика, 8 класс.

7.20. Как записываются арифметические выражения?

Главная  > Справочник по образованию  > Энциклопедия де-факто  > Математика и компьютерные дисциплины  > Информатика  > Электронная версия учебника по информатике 10-11  > Глава 1.7. Алгоритмы. Алгоритмизация. Алгоритмические языки   > 7.20. Как записываются арифметические выражения?

Арифметические выражения записываются по следующим правилам:

  •  
    • Нельзя опускать знак умножения между сомножителями и ставить рядом два знака операций.
    • Индексы элементов массивов записываются в квадратных (школьный АЯ, Pascal) или круглых (Basic) скобках.
    • Для обозначения переменных используются буквы латинского алфавита.
    • Операции выполняются в порядке старшинства: сначала вычисление функций, затем возведение в степень, потом умножение и деление и в последнюю очередь — сложение и вычитание.
    • Операции одного старшинства выполняются слева направо
      . z как exp(exp(z*ln(y))*ln(x)).

Примеры записи арифметических выражений

Математическая запись Запись на школьном алгоритмическом языке
x*y/z
x/(y*z) или x/y/z
(a**3+b**3)/(b*c)
(a[i+1]+b[i-1])/(2*x*y)
(-b+sqrt(b*b-4*a*c))/(2*a)
(x<0) sign(x)*abs(x)**(1/5)
0.49*exp(a*a-b*b)+ln(cos(a*a))**3
x/(1+x*x/(3+(2*x)**3))

Типичные ошибки в записи выражений:

5x+1
a+sin x
((a+b)/c**3
Пропущен знак умножения между 5 и х
Аргумент x функции sin x не заключен в скобки
Не хватает закрывающей скобки

Другие записи

10. 06.2016. 7.11. Что такое вложенные циклы?

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

10.06.2016. 7.12. Чем отличается программный способ записи алгоритмов от других? 7.13.Что такое уровень языка программирования?

7.12. Чем отличается программный способ записи алгоритмов от других? При записи алгоритма в словесной форме, в виде блок-схемы или на псевдокоде допускается определенный произвол при изображении команд.…

10.06.2016. 7.14. Какие у машинных языков достоинства и недостатки? 7.15. Что такое язык ассемблера? 7.16. В чем преимущества алгоритмических языков перед машинными?

7.14. Какие у машинных языков достоинства и недостатки? Каждый компьютер имеет свой машинный язык, то есть свою совокупность машинных команд, которая отличается количеством адресов в команде, назначением…

10. 06.2016. 7.17. Какие компоненты образуют алгоритмический язык? 7.18. Какие понятия используют алгоритмические языки?

7.17. Какие компоненты образуют алгоритмический язык? Алгоритмический язык (как и любой другой язык) образуют три его составляющие: алфавит, синтаксис и семантика. Алфавит — это фиксированный…

10.06.2016. 7.19. Что такое стандартная функция?

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

значение, примеры / Справочник :: Бингоскул

Арифметические строковые и логические выражения: значение, примеры добавить в закладки удалить из закладок

Содержание:

Логический пример – выражение, состоящее из логических переменных, значений, операций и операторов, сравнивающих числа, строки. Арифметический конструктив всегда приводится к одному из двух значений – правда или ложь. Часто используется обозначение на английском языке – true, false.

Информатика использует конструкции логических операций из языков программирования. Для умножения необходимо указать And, сложение обозначается Or, операция отрицания – Not. Если структура сложная, разрешается пользоваться скобками. Пример логической конструкции:


5>3Anda=b=ложь;
5 Not5>3=ложь.

Что такое арифметическое выражение – теория, примеры

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

Как записываются арифметические выражения в информатике

В таблице представлены основные условия и форма их записи на языке алгоритма

УсловияПринцип записи на языке алгоритма
Значение дробной доли вещественного аргумента С=0int(с) = 0
Переменная является целым, четным числомmod(с,2) = 0
Переменная – целая, нечетная цифраmod(с,2) = 1
Значение числа С кратное 6mod(с,6) = 0
Присутствуют положительные аргументы а, са>0, (с>0)
Положительный аргумент а, с – отрицательное или равно 0((a>0) и (с
Один из показателей а,б,с – отрицательныйа
Числовое значение у находится между 2,5у≥2, (у
Коэффициент б соответствует а(б>=а), (б
Для цельных чисел а, с характерна идентичная четность((mod(a,2)=0),(mod(с,2)=0) или
((mod(a,2)=1), (mod(с,2)=1))
Координаты точки (б,к) соответствуют центру круга, имеющего радиус Р в точке (а,с)(б-a)**2+(к-с)**2*r

Правильная строковая запись выражения – что значит составить выражение

Арифметические строковые и логические выражения записываются в соответствии с рядом правил. Строковый пример предполагает использование строковых данных для определения операндов. В состав могут входить:

  • Переменные;
  • Константы;
  • Операционные обозначения;
  • Указатели функций.

Доступные операции – сложение, соотношение. Сложение позволяет объединить строки. Есть ограничение длины выражения – 255 символов. Сцепление является приоритетным перед операндами соотношения. 

Например, необходимо решить задачу. Выберите арифметическое выражение, значение которого максимально:

  • 318 + 1000002
  • 168 + 1011002
  • 418 + 11112
  • 448 + 110002 

Для расчета считаем сумму каждой конструкции: 

  • 318 + 1000002 = 1000320;
  • 168 + 1011002 = 1011170;
  • 418 + 11112 = 11530;
  • 448 + 110002 = 110450.

Ответ: максимальное значение второго выражения.

Поделитесь в социальных сетях:

27 мая 2021, 14:43

Информатика

Could not load xLike class!



Вычисление арифметического выражения — темы масштабирования

Обзор

Арифметические выражения могут быть записаны в 3 различных нотациях — инфиксной, префиксной и постфиксной. В префиксной нотации оператор записывается перед операндом в выражении. С другой стороны, в нотации Postfix оператор пишется после операнда. Выражения оцениваются с использованием стека.

Область применения

  • Порядок вычисления арифметических операторов.
  • Польская (префиксная) и обратная польская (постфиксная) нотация.
  • Преобразование из инфиксной нотации в префиксную и постфиксную.

Введение

Выражение, которое содержит только арифметические операнды и операторы, называется арифметическим выражением. Результаты этих выражений всегда представлены числовыми значениями. Арифметические выражения обычно представляются в так называемой инфиксной нотации. В этих обозначениях оператор находится между двумя операндами (пример: X + Y, где X и Y являются арифметическими операндами). Мы даже можем использовать круглые скобки в арифметических выражениях.

Любое арифметическое выражение, записанное в инфиксной нотации, оценивается по следующим правилам приоритета операторов.

Однако, если мы хотим оценить выражение без учета приоритета оператора, мы можем использовать польских (или префиксных) нотаций или обратных польских (или постфиксных) нотаций.

Типы вычисления выражения в C

В языке программирования C существует четыре типа вычисления выражения:

  1. Вычисление арифметических выражений — Арифметические выражения возвращают числовые значения. Например: 30/630/630/6.
  2. Вычисление реляционных выражений — Реляционные выражения используются для сравнения двух операндов. Например: (a+b)>=(c∗d)(a + b) >= (c * d)(a+b)>=(c∗d).
  3. Оценка логических выражений — Логические выражения возвращают значения true или false. Например: (a
  4. Вычисление условных выражений — Если условное выражение истинно, оно возвращает определенный оператор/выражение. Но если оно ложно, оно возвращает другой оператор/выражение.
    Например: (10 > 3)? «выражение истинно» : «выражение ложно». В этом примере, поскольку 10 > 3 истинно, будет возвращено утверждение «* выражение истинно». Если бы это было не так, то было бы напечатано утверждение «выражение ложно».

В этой статье мы узнаем о вычислении арифметических выражений.

Порядок вычисления арифметических выражений

Для вычисления арифметических выражений компилятор имеет предопределенный порядок, в котором он вычисляет любое выражение. Порядок оценки, которому следует компилятор:

  • Сначала вычисляются выражения со скобками. Если в выражении есть две или более круглых скобок, скобки оцениваются слева направо. В случае вложенных скобок самые внутренние скобки оцениваются первыми, а самые внешние — последними.

  • Если скобки отсутствуют, порядок вычисления выражения основан на приоритете оператора и ассоциативности:

    Приоритет Оператор Ассоциативность
    1 Унарный плюс, Унарный минус 9 0079 Слева направо
    1 Встроенные функции Слева направо
    2 Умножение и деление Слева направо
    3 Сложение и вычитание Слева направо

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

Давайте разберемся в этой теме на примере инфиксной записи:

 
 8 * sqrt(25) - -3
 

Ответ:

Шаги для вычисления приведенного выше выражения:

  1. В приведенном выше выражении унарный минус имеет наивысший приоритет. Значит, она будет решена в первую очередь. Выражение упростится до: 8 * sqrt(25) + 3.
  2. Поскольку sqrt(25) является встроенной функцией, она будет оцениваться следующей. Теперь выражение примет вид: 8∗5+38 * 5 + 38∗5+3.
  3. Далее будет выполнено умножение. Выражение станет 40 + 3.
  4. Наконец, будет выполнено добавление. Итак, ответ будет 43.

Возьмем другой пример:

 
 7 * (5 + 15) / (2 * 5) - 3;
 

Ответ:

Шаги для вычисления приведенного выше выражения:

  1. Скобки имеют наивысший приоритет. Таким образом, выражения внутри круглых скобок будут оцениваться первыми. После решения все выражение упрощается до: 7*20/10-37 * 20/10 — 37*20/10-3.
  2. Теперь умножение и деление имеют одинаковый приоритет. Поскольку умножение и деление имеют ассоциативность слева направо, умножение будет выполняться первым. Выражение теперь принимает вид: 140/10-3140 / 10 — 3140/10-3.
  3. Далее, подразделение имеет более высокий приоритет. Таким образом, выражение примет вид 14−314 — 314−3.
  4. Наконец, мы вычтем 3 из 14, чтобы получить 11 на выходе.

Польская (или префиксная) нотация

В польской или префиксной нотации оператор записывается перед операндом в выражении. Это обозначение не требует круглых скобок, потому что вычисление выражения выполняется в стеке. Таким образом, нам не нужно указывать порядок выполнения для вычисления арифметических выражений. Компилятор может обрабатывать префиксную нотацию быстрее, чем инфиксную, потому что ему не нужно обрабатывать какие-либо круглые скобки или следовать правилам приоритета.

Выражение в польской записи выглядит так:

Приведенное выше выражение эквивалентно X * Y в инфиксной нотации, где X и Y — два арифметических операнда, а * — оператор.

Шаги для вычисления префиксного выражения отличаются от шагов, которые мы обычно выполняем для вычисления инфиксного выражения. Мы можем вычислить значение арифметических операций, используя стек. Вот шагов для вычисления значения префиксного выражения:

  1. Поместите переменную var в последний элемент выражения.
  2. Если переменная var указывает на:
    • Операнд, поместите этот элемент в стек.
    • Оператор X извлекает два элемента (операнда) из стека и обрабатывает извлеченные операнды с помощью оператора X . После выполнения операции поместите вычисленное значение обратно в стек.
  3. Уменьшить значение переменной на 1.
  4. Повторять шаги 2 и 3 до тех пор, пока не будут пройдены все элементы.
  5. Возвращает единственное значение, присутствующее в стеке в конце.

Давайте теперь возьмем пример, чтобы понять, как вычисляются арифметические выражения с использованием префиксной записи.

 
 * / + 9 7 8 2
 

Ответ:

Используя описанные выше шаги, мы вычислим значение этого выражения.

Шаг 1: Поместите указатель на последний элемент, т. е. на 2 в этом примере.

Шаг 2: Поскольку 2 является операндом, мы поместим его в стек. Стек будет выглядеть так:

Шаг 3: Теперь мы уменьшаем значение указателя на 1, чтобы он указывал на последнее число, равное 8. И снова 8 является операндом, поэтому мы помещаем его в стек. Точно так же эти шаги будут повторяться до тех пор, пока стек не станет таким:

Шаг 4: Еще раз уменьшая значение указателя на 1, мы столкнемся с оператором, т. е. +. Итак, мы удалим из стека два верхних элемента (9и 7) и добавьте их. 16 ( 9 + 7 ) будет добавлено в стек. Теперь стек выглядит так:

Шаг 5: Еще раз уменьшите значение указателя и повторите шаги. В итоге, проведя все расчеты, получим:

Шаг 6: Верните значение, присутствующее в стеке, чтобы получить окончательный ответ. Следовательно, ответ равен 4.

Обратная польская (или постфиксная) нотация

В обратной польской или постфиксной нотации оператор записывается после операнда в выражении. В этой нотации скобки не нужны, потому что порядок выполнения выражения уже определен в стеке. Выражение в постфиксной записи выглядит так:

Приведенное выше выражение эквивалентно X + Y , где X и Y — два арифметических операнда, а + — оператор.

Вычисление арифметических выражений в постфиксной записи аналогично вычислению арифметических выражений в префиксной записи. Мы также можем вычислить значение арифметических операций, используя стек. Вот шагов для вычисления значения постфиксного выражения:

  1. Поместите указатель на первый элемент строки.
  2. Если указатель указывает на:
  • Оператор X извлекает два верхних элемента (операнда) из стека и работает с оператором X .
  • Операнд, поместите этот элемент в стек.
  1. Увеличить значение указателя на 1.
  2. Перейти к шагу 2, если в выражении остались элементы для просмотра.
  3. Вернуть результат, хранящийся в стеке.

Давайте рассмотрим пример, чтобы понять, как вычислять арифметические выражения:

 
 5 3 7 * + 4 -
 

Ответ:

Используя шаги, описанные выше, вычислим значение этого выражения.

Шаг 1: Поместите указатель на первый элемент, 5.

Шаг 2: Поскольку 5 является операндом, поместите его в стек. Стек теперь содержит — [5].

Шаг 3: Теперь увеличьте значение указателя на 1. Теперь указатель будет указывать на второй элемент, 3. Опять же, поскольку 3 является операндом, поместите его в стек. Стек теперь содержит — [5 3] (снизу вверх).

Шаг 4: Повторите процесс шага 3. Теперь стек содержит — [5 3 7]

Шаг 5: Еще раз увеличьте значение указателя. Указатель теперь указывает на оператора * . Итак, вынимаем из стека два верхних операнда (7, 3) и выполняем над ними операцию умножения. Затем поместите вычисленное значение обратно в стек. Стек теперь содержит — [5 21].

Шаг 6: Повторите вышеуказанные шаги, чтобы стек содержал — [4 26].

Шаг 7 : Увеличьте значение указателя для выполнения последней операции. Теперь в выражении больше не осталось элементов, и [22] — единственный элемент, оставшийся в стеке. Следовательно, ответ равен 22.

Таблица для преобразования инфиксной нотации в префиксную и постфиксную нотацию

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

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

9 90 078 Сложение и вычитание
Серийный номер Инфиксная нотация Префиксная нотация Постфиксная нотация
1 м + н + м н м н +
2 м * (н + о) * м + н о м н о + *
3 (м + n) ∗ o ∗ + m n o m n + o ∗
4 (m + n) ∗ (o + p) ∗ + m n + o p m n + o p + ∗
5 м/н + о/р +/м н/о р м н/о р/+
Слева направо
2 Деление и умножение / \* Слева направо
3 + — Слева направо

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

Резюме

  • Арифметические выражения могут быть записаны в 3-х различных нотациях — инфиксной, префиксной и постфиксной.
  • В префиксной нотации оператор записывается перед операндом в выражении. С другой стороны, в нотации Postfix оператор пишется после операнда.
  • Префиксные и постфиксные нотации быстрее, чем инфиксные.
  • Мы можем преобразовывать инфиксные нотации в префиксные или постфиксные и наоборот.

Введение в информатику, глава 3: Выражения

следующий.
Схема Simply: Введение в информатику, глава 3: Выражения
Схема Simple: Введение в информатику 2/e Copyright (C) 1999 MIT

Глава 3

Брайан Харви
Калифорнийский университет, Беркли
Мэтью Райт
Калифорнийский университет, Санта-Барбара

Скачать PDF версию
Назад к содержанию
ЗАДНЯЯ ЧАСТЬ резьба главы СЛЕДУЮЩАЯ
Массачусетский технологический институт Пресс-страница для Просто схема

Взаимодействие между вами и Scheme называется «цикл чтения-оценки-печати». Схема читает то, что вы печатаете, оценивает это и печатает ответ, а затем делает то же самое снова. Были подчеркивая слово «оценивает», потому что сущность понимания Схема знает, что значит оценивать что-то.

Каждый вводимый вопрос называется выражением . [1] выражение может быть одним значением, например 26 или чем-то большим сложные в скобках, например (+ 14 7) . Первый вид выражение называется атомом (или атомарное выражение ), а второй тип выражения называется составным выражением , , потому что оно составлено из меньшие выражения + , 14 и 7 . Метафора из химия, где атомы отдельных элементов объединяются в химические соединения. Иногда мы называем выражения внутри составного выражения его подвыражений.

Составные выражения указывают Scheme «выполнить» процедуру. Эта идея настолько важно, чтобы у него было много названий. Вы можете вызов процедуры; ты может вызвать процедуру; или вы можете применить процедуру к некоторым числа или другие значения. Все это означает одно и то же.

Если вы раньше программировали на каком-то другом языке, вы, вероятно, привыкли к идее нескольких различных типов утверждений для разные цели. Например, «оператор печати» может выглядеть очень отличается от «оператора присваивания». На схеме все делается вызов процедур, как мы делали здесь. Что бы вы ни хотели делать, есть только одно обозначение: составное выражение.

Обратите внимание, мы сказали, что составное выражение содержит выражения. Это означает что вы не можете понять, что такое выражение, пока не поймете что такое выражение. Этот вид цикличности возникает снова и снова и снова и снова[2] в программировании схемы. Как Вы когда-нибудь сталкивались с этой самореферентной идеей? Секрет в том, что должно быть какое-то простое выражение, которого у нет у меньшие выражения внутри него — атомарные выражения.

Легко понять выражение, которое содержит только одно число. Цифры самооценки; , то есть когда вы оцениваете номер, вы просто получите тот же номер обратно.

Как только вы поймете чисел, вы сможете понять выражений которые в сумме составляют чисел. И как только вы поймете этих выражений, вы можете использовать эти знания, чтобы вычислить выражений, которые в сумме дают выражения-которые-складывают-числа. Потом и так далее. На практике вы обычно не думают обо всех этих уровнях сложности по отдельности. Ты просто подумайте: «Я знаю, что такое число, и я знаю, что значит сложить любые выражений.»

Так, например, чтобы понять выражение

 (+ (+ 2 3) (+ 4 5))
 

вы должны сначала понять 2 и 3 как самооценку числа, то поймите (+ 2 3) как выражение, которое складывает эти числа, а затем понять, как сумма, 5, способствует общему выражение.

Между прочим, в обычной арифметике вы привыкли к мысли, что скобки могут быть необязательными; 3+4×5 означает то же, что и 3+(4×5). Но на схеме круглых скобок 9.0019 никогда опционально. Каждый вызов процедуры должны быть заключены в круглые скобки.

Маленькие люди

Возможно, вы этого не осознавали, но внутри вашего компьютера тысячи маленьких людей. Каждый из них является специалистом в какой-то одной Процедура схемы. Главный маленький человек, Алонзо, отвечает за цикл чтения-оценки-печати.

Когда вы вводите выражение, например

 (- (+ 5 8) (+ 2 4))
 

Алонзо читает его, нанимает других маленьких людей, чтобы помочь ему оценить это и, наконец, печатает 7 , его стоимость. Мы собираемся сосредоточиться на шаг оценки.

Три маленьких человечка работают вместе, чтобы оценить выражение: минус человек и два плюс человек. (Чтобы упростить чтение этой записи, мы используем обычные английские слова «минус» и «плюс» для обозначения процедур чьи имена схем - и + . Не путайте это и попробуйте ввести минус в схему.)

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

     Алиса хочет получить несколько чисел, поэтому, прежде чем она сможет выполнить какую-либо работу, она жалуется Алонзо, что хочет знать, какие числа нужно вычесть.
     Алонзо просматривает подвыражения, которые должны предоставить Алисе аргументы, а именно (+ 5 8) и (+ 2 4) . Поскольку оба эти Помимо проблем, Алонзо нанимает еще двух специалистов, Берни и Корделию, и говорит им сообщить свои результаты Алисе.
     Первый плюс, Берни, тоже хочет какие-то цифры, поэтому он спрашивает Алонзо для них.
     Алонзо просматривает подвыражения (+ 5 8) , которые должны обеспечить аргументы Берни, а именно 5 и 8 . Так как это оба атомные, Алонзо может передать их непосредственно Берни.
     Берни складывает свои аргументы, 5 и 8 , чтобы получить 13 . Он делает это в уме — нам не нужно беспокоиться о том, откуда он знает, как добавлять; это его работа.
     Второй человек, Корделия, хочет аргументов; Алонзо смотрит на подвыражения (+ 2 4) и дает 2 и 4 для Корделия. Она складывает их, получая 6 .
     Берни и Корделия передают свои результаты ожидающей Алисе, которая теперь может вычтите их, чтобы получить 7 . Она передает этот результат Алонзо, который печатает это.

Откуда Алонзо знает, что к чему аргумент? Вот что такое группировка подвыражений со скобками — это о. Поскольку плюсовые выражения внутри выражения «минус» люди «плюс» должны отдавать свои результаты минус человек.

Мы создали впечатление, что Берни делает свою работу раньше, чем Корделия. В факт, порядок оценки подвыражений аргумента на схеме не указано; разные реализации могут делать это по-разному заказы. В частности, Корделия могла сделать свою работу раньше Берни, или они могут даже выполнять свою работу одновременно, если мы используем параллельный обработка комп. Однако важно, чтобы оба Берни и Корделия заканчивают свою работу раньше, чем Алиса успевает сделать свою.

Весь вызов - сам по себе является одним выражением; это может быть часть еще большего выражения:

 > (* (- (+ 5 8) (+ 2 4))
     (/ 10 2))
35
 

Здесь говорится о перемножении чисел 7 и 5, за исключением того, что вместо говоря 7 и 5 явно, мы написали выражения, значения которых равны 7 и 5. (Кстати, мы бы сказали, что приведенное выше выражение имеет три подвыражения, * и два аргумента. Аргумент подвыражения, в свою очередь, имеют свои подвыражения. Однако эти подвыражения, такие как (+ 5 8) , не считается подвыражения всего этого.)

Можно выразить эту организацию маленьких людей более формально. Если выражение является атомарным, Scheme просто знает значение.[3] В противном случае это соединение выражение, поэтому Scheme сначала вычисляет все подвыражения (в некоторых неуказанный порядок), а затем применяет значение первого, что лучше было бы процедурой, к значениям остальных из них. Эти другие подвыражения являются аргументами.

Мы можем использовать это правило для вычисления произвольно сложных выражений и Схема не запутается. Каким бы длинным ни было выражение, оно сделано набор меньших подвыражений, к которым применяется то же правило. Посмотрите на этот длинный, запутанный пример:

 > (+ (* 2 (/ 14 7) 3)
     (/ (* (- (* 3 5) 3) (+ 1 1))
        (- (* 4 3) (* 3 2)))
     (- 15 18))
13
 

Схема понимает это, ища подвыражения общего выражение, подобное этому:

 (+ ()
   ( ; Один из них занимает две строки, но это видно по
      ) ; соответствующие круглые скобки, что они являются одним выражением. 
   ())
 

(Схема игнорирует все, что находится справа от точки с запятой, поэтому точки с запятой можно использовать для обозначения комментариев, как указано выше.)

Обратите внимание, что в приведенном выше примере мы попросили + добавить к трем . числа. В программе functions главы 2 мы сделал вид, что каждая функция Scheme принимает фиксированное количество аргументов, но на самом деле некоторые функции могут принимать любое число. К ним относятся + , * , слов и предложений .

Результат Замена

Так как маленький человек не может выполнять свою работу, пока не будут созданы все необходимые подвыражения были оценены другими маленькими людьми, мы можем «быстро вперед» этот процесс, пропустив части о «Алиса ждет Берни и Корделии» и начиная с выполнения более мелких задач меньшие маленькие люди.

Чтобы отслеживать, какой результат входит в какое большее вычисление, вы можете запишите сложное выражение, а затем перепишите его несколько раз, каждый раз заменяя какое-то маленькое выражение более простым выражением что имеет такое же значение.

 (+ (*  (- 10 7)  (+ 4 1)) (- 15 (/ 12 3)) 17)
(+ (* 3  (+ 4 1)  ) (- 15 (/ 12 3)) 17)
(+  (* 3 5 )  (- 15 (/ 12 3)) 17)
(+ 15 (- 15  (/ 12 3)  ) 17)
(+ 15  (- 15 4 )  17)
  (+ 15 11 17) 
43
 

В каждой строке диаграммы заключенное в рамку выражение это тот, который будет заменен его значением в следующей строке.

Если хотите, вы можете сэкономить несколько шагов, вычислив несколько маленьких выражения из одной строки в другую:

 (+ (*  (- 10 7)   (+ 4 1)  ) (- 15  (/ 12 3)  ) 17)
(+  (* 3 5 )   (- 15 4 )  17)
  (+ 15 11 17) 
43
 

Сантехнические схемы

Некоторым людям полезно посмотреть на графическую форму соединений среди подвыражений. Вы можете думать о каждой процедуре как о машине, такой как те, что они рисовали на доске в младших классах средней школы.

Каждая машина имеет некоторое количество входных бункеров сверху и один желоб снизу. нижний. Вы кладете что-то в каждый бункер, поворачиваете рукоятку и что-то еще выходит снизу. Для сложного выражения вы подключаете вывод желоб одной машины в приемный бункер другой. Эти комбинации так называемые «сантехнические схемы». Смотрим на схему сантехники на (- (+ 5 8) (+ 2 4)) :

Вы можете аннотировать диаграмму, указав фактическую информацию, которая течет через каждую трубу. Вот как это будет выглядеть для этого выражения:

Ловушки

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

 (квадратный (cos 3))
 

не означает, что означает «три в квадрате, затем возьми косинус числа ответ, который вы получите». Вместо этого, как вы знаете, это означает, что аргумент в квадрате — это возвращаемое значение из (cos 3) .

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

 (+ (* 2 (/ 14 7) 3) (/ (* (- (* 3 5) 3) (+ 1
1)) (- (* 4 3) (* 3 2))) (- 15 18))
 

означает то же самое, что и

 (+ (* 2 (/ 14 7) 3)
   (/ (* (- (* 3 5) 3) (+ 1 1))
      (- (* 4 3) (* 3 2)))
   (- 15 18))
 

Итак, в этом выражении:

 (+ (* 3 (sqrt 49) ;; странный формат
   (/ 12 4)))
 

нет двух аргументов для + , хотя выглядит так путь, если вы думаете об отступах. Что Scheme делает, так это смотрит на скобки, и если вы внимательно изучите их, вы увидите, что есть три аргумента до * : атом 3 , составное выражение (sqrt 49) и составное выражение (/ 12 4) . (И есть только один аргумент + .)

Следствием того, что Scheme не заботятся о пробелах, является то, что когда вы нажмите клавишу возврата, схема может ничего не сделать. Если вы находитесь в середине выражения, Scheme ждет, пока вы не закончите вводить все это прежде чем он оценит то, что вы набрали. Это нормально, если ваша программа правильно, но если вы наберете это:

 (+ (* 3 4)
   (/ 8 2) ; обратите внимание на отсутствие правой скобки
 

потом ничего не произойдет. Даже если вы будете печатать вечно, пока вы закроете открытую скобку рядом со знаком + , схема все равно останется читать выражение. Поэтому, если Scheme игнорирует вас, попробуйте ввести миллион закрывающих скобок. (Возможно, вы получите сообщение об ошибке слишком много круглых скобок, но после этого Scheme должен начать обращать внимание снова.)

Вы можете столкнуться с такими же проблемами, если у вас есть двойные кавычки отметьте ( " ) в вашей программе. Все, что заключено в пару кавычек обрабатывается как одна строка . Мы объясним больше о струны позже. На данный момент, если в вашей программе есть случайная кавычка, например этот:

 (+ (* 3 " 4) ; обратите внимание на дополнительные кавычки
   (/ 8 2))
 

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

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

Сверлильные упражнения

3.1   Переведите арифметические выражения (3+4)×5 и 3+(4×5) в выражения Scheme и в сантехнические схемы.

3.2   Сколько маленьких людей нанимает Алонзо для оценки каждого из следующих выражений:

 (+ 3 (* 4 5) (- 10 4))
 
(+ (* (- (/ 8 2) 1) 5) 2)
 
(* (+ (- 3 (/ 4 2))
      (грех (* 3 2))
      (- 8 (кв. 5)))
   (- (/ 2 3)
      4))
 

3.3   Каждое из выражений в предыдущем упражнении является составным. Сколько подвыражения (не включая подвыражения подвыражений) делает каждое один есть?

Например,

 (* (- 1 (+ 3 4)) 8)
 

имеет три подвыражения; вы бы не считали (+ 3 4) .

3.4   Пять маленьких людей наняты для вычисления следующего выражения:

 (+ (* 3 (- 4 7))
   (- 8 (- 3 5)))
 
Дайте каждому маленькому человеку имя и перечислите его специальность, значения аргументов. она получает, ее возвращаемое значение и имя маленького человека, которому она сообщает свой результат.

3.5   Вычислите каждое из следующих выражений, используя замену результата техника:

 (кв (+ 6 (* 5 2)))
(+ (+ (+ 1 2) 3) 4)
 

3. 6   Нарисуйте сантехнику для каждого из следующих выражений:

 (+ 3 4 5 6 7)
 
(+ (+ 3 4) (+ 5 6 7))
 
(+ (+ 3 (+ 4 5) 6) 7)
 

3.7   Какое значение возвращает (/ 1 3) в вашей версии Схема? (Некоторые схемы возвращают десятичную дробь, например 0,33333 , а другие имеют точные дробные значения, такие как 1/3 .)

3.8   Какие функции, рассмотренные в главе 2, принимать переменное количество аргументов?

Реальные упражнения

3,9   Выражение (+ 8 2) имеет значение 10 . это соединение выражение, состоящее из трех атомов. Для этой задачи напишите пять других Выражения схемы, значения которых также являются числом десять:

     Атом
     Другое составное выражение, состоящее из трех атомов
     Составное выражение, состоящее из четырех атомов
     Составное выражение, состоящее из атома и двух составных подвыражений.
Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

© 2019 Штирлиц Сеть печатных салонов в Перми

Цифровая печать, цветное и черно-белое копирование документов, сканирование документов, ризография в Перми.