Конспект лекций Рыбинск 2010





Скачать 450.1 Kb.
НазваниеКонспект лекций Рыбинск 2010
страница8/12
Дата публикации21.09.2013
Размер450.1 Kb.
ТипКонспект
100-bal.ru > Информатика > Конспект
1   ...   4   5   6   7   8   9   10   11   12

4.4Условные вычисления (ветвление)


В традиционных языках программирования основными способами организации ветвления являются условный оператор (if then else) и оператор выбора (case или switch). Кроме них в языке Haskell используется сопоставление с образцом в определениях функций и так называемые охраняющие выражения. Рассмотрим подробнее каждый из этих способов.

Конструкция if-then-else


Синтаксическая конструкция «if-then-else» позволяет вычислять различные выражения в зависимости от результатов некоторого условия:

if <условие> then <выражение1> else <выражение2>

Здесь <условие> — некоторое выражение, имеющее тип Bool. В отличие от императивных языков, в языке Haskell конструкция «if-then-else» является выражением, которое обязательно должно иметь какой-либо результат. В связи с этим ветка else является обязательной и типы выражений <выражение1> и <выражение2> должны совпадать.

Рассмотрим в качестве примера функцию вычисления максимального из двух чисел:

max a b = if a>b then a else b

Как уже было сказано, конструкция «if-then-else» является выражением, которое имеет результат. Следовательно, ее можно использовать как часть другого выражения:

*Main> 5 + if False then 1 else 0

5

*Main> (if True then 1 else 0) + 5

6

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

*Main> if True then 1 else 0 + 5

1

Все, что записано после слова «else» относится к выражению ветки else.

Конструкция case


Рассмотрим в качестве примера функцию вычисления заданного числа Фибоначчи:

fib n = case n of

1 -> 1

2 -> 1

_ -> fib (n-1) + fib (n-2)

Данную запись можно читать так: если n равняется 1 или 2, то результатом функции является 1, иначе результатом функции является сумма предыдущих чисел Фибоначчи.

Также как и условное выражение «if-then-else» выражение case имеет результат и, следовательно, может быть частью других выражений.

Рассмотрим case выражение в общем виде:

case <выражение0> of

<образец1> -> <выражение1>

<образец2> -> <выражение2>

...

<образецN> -> <выражениеN>

Здесь результат вычисления <выражение0> последовательно сопоставляется с образцами. При удачном сопоставлении с i-м образцом, результатом всего case будет являться результат i-го выражения. Подробнее сопоставление с образцом будет рассматриваться в соответствующем разделе, а пока его можно рассматривать как сравнение с заданными константами.

Обратим внимание, что каждый образец должен быть записан на новой строчке с отступом большим, чем отступ у зарезервированного слова case. Также отступы перед образцами должны быть равны между собой.

Кроме того, допустим альтернативный способ записи case-выражений без использования отступов:

fib n = case n of {1->1;2->1;_->fib (n-1) + fib (n-2)}

Такой способ более компактен, но менее нагляден. В общем виде:

case <выражение0> of { <образец1> -> <выражение1> ; <образец2> -> <выражение2> ; ... ; <образецN> -> <выражениеN> }

Определения функций


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

Рассмотрим в качестве примера функцию вычисления числа Фибоначчи.

fib 1 = 1

fib 2 = 1

fib n = fib (n-1) + fib (n-2)

При вычислении значения функции ее единственный аргумент сопоставляется с образцами ее определений сверху вниз. Если аргументом было число 2, то первое сопоставление окажется неудачным, а второе – удачным, и в результате функция примет значение 1. Если же аргумент не сопоставится с образцами в первых двух определениях, то он обязательно сопоставится с именем аргумента n (в данном случае n примет значение переданного аргумента), и будет вычислена сумма двух предыдущих чисел Фибоначчи.

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

Охраняющие выражения


Последним способом выбора альтернатив при вычислении результата функций является так называемые охраняющие выражения [3]. Они (в отличие от if-then-else и case-выражений) могут использоваться только в определениях функций:

<имя функции> <список аргументов функции>

|<условие1> = <выражение1>

|<условие2> = <выражение2>

...

|<условиеN> = <выражениеN>

Все символы “|” должны начинаться на своей строке и с одного отступа. При вычислении значения функции перебираются сверху вниз все условия, являющиеся выражениями типа Bool. Когда найдется i-е условие, результат которого равен True, вычисляется выражение i, результат которого будет результатом функции.

Например, запишем функцию нахождения числа Фибоначчи:

fib n

|n==1 = 1

|n==2 = 1

|otherwise = fib (n-1) + fib (n-2)

Здесь otherwise – это заведомо истинное условие, всегда равное True.
1   ...   4   5   6   7   8   9   10   11   12

Похожие:

Конспект лекций Рыбинск 2010 iconМестного самоуправления городского округа город рыбинск
В соответствии с Федеральным законом от 02. 03. 2007 n 25-фз "О муниципальной службе в Российской Федерации", законодательством о...
Конспект лекций Рыбинск 2010 iconОтчет главы городского округа город Рыбинск
«Об общих принципах организации местного самоуправления в Российской Федерации» на основе информации структурных подразделений и...
Конспект лекций Рыбинск 2010 iconКонспект лекций по курсу сд. Ф корпоративные информационные системы
Д. В. Колесов, Р. Д. Маш, И. Н. Беляев «Биология. Человек», Изд-во «Дрофа», Москва, 2010
Конспект лекций Рыбинск 2010 iconС. П. Филин Концепции современного естествознания: конспект лекций
Конспект лекций соответствует требованиям Государственного образовательного стандарта высшего профессионального образования РФ и...
Конспект лекций Рыбинск 2010 iconКонспект лекций раскрывает содержание и структуру учебной дисциплины...
Налоговое право : конспект лекций / сост доцент Р. В. Бобринев; Кузбасский институт экономики и права. – Кемерово, 2011 – 144 с
Конспект лекций Рыбинск 2010 iconКонспект лекций по дисциплине: теория систем и системный анализ санкт-Петербург...
Выбор показателя эффективности, математическая постановка задачи
Конспект лекций Рыбинск 2010 iconКонспект лекций по философии Часть 1 Античная философия Новосибирск...
Савостьянов А. Н. Конспект лекций по философии / Новосиб гос ун-т. Новосибирск, 2007. Ч. Античная философия. 68 с
Конспект лекций Рыбинск 2010 iconКонспект лекций по курсу хозяйственного права тема Понятие хозяйственного права
Кафедра Истории, социологии и права Назаров Андрей Александрович конспект лекций по курсу хозяйственного права
Конспект лекций Рыбинск 2010 iconКонспект лекций по высшей математике. В 2 частях. Часть М.: Айрис-пресс,...
Баранова Е. С., Васильева Н. В., Федотов В. Л. Практическое пособие по высшей математике. Типовые расчеты. Учебное пособие. — Спб:...
Конспект лекций Рыбинск 2010 iconОпорный конспект лекций Основные понятия, термины, законы, схемы...
Л. Н. Блинов, Н. Н. Ролле. Экология: опорный конспект лекций. Основные понятия, термины, законы, схемы. Спб.: Изд. Спбгпу. 2005....
Конспект лекций Рыбинск 2010 iconКонспект лекций Владимира Климентьева по истории философии, отредактированный...
Рекомендовано Министерством общего и профессионального образования Российской федерации в качестве учебника для студентов высших...
Конспект лекций Рыбинск 2010 iconТеория организации Конспект лекций для студентов специальности «Менеджмент организации»
Макарова н. Н. Теория организации. Конспект лекций с практическими заданиями для студентов специальности "Менеджмент организации....
Конспект лекций Рыбинск 2010 iconПисьменный Д. Т. Конспект лекций по теории вероятностей, математической...
Письменный Д. Т. Конспект лекций по теории вероятностей, математической статистике и случайным процессам. 3-е изд. М.: Айрис-пресс,...
Конспект лекций Рыбинск 2010 iconКонспект лекций

Конспект лекций Рыбинск 2010 iconКонспект лекций по дисциплине правовое регулирование маркетинговой деятельности
Опорный конспект лекций по дисциплине правовое регулирование маркетинговой деятельности
Конспект лекций Рыбинск 2010 iconКонспект лекций по дисциплине методика самостоятельной работы студента...
Отсутствие таких навыков приводит к тому, что учащиеся чувствуют беспомощность и растерянность при необходимости самостоятельно подготовить...


Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
100-bal.ru
Поиск