Ложные и истинные высказывания информатика: Высказывания — урок. Информатика, 8 класс.
Урок «Высказывания. Истинные и ложные высказывания»
Тема: Высказывания. Истинные и ложные высказывания.
Класс: 4
Цель:
учебная: ознакомить обучающихся с высказываниями и логическими структурами;
развивающая: развивать навыки работы за компьютером, с помощью компьютерного тренажера и манипулятора «мышь»;
воспитательная: воспитывать чувство ответственности за порученное дело, исполнительности, аккуратности, добросовестности, чувства долга.
Тип урока: усвоение и закрепление новых знаний
Методы и приемы: слово учителя, беседа, работа за компьютерами.
ХОД УРОКА
І. ОРГАНИЗАЦИЯ КЛАССА
Приветствие. Проверить присутствие учеников, отметить отсутствующих. Проверить готовность учеников к уроку (наличие рабочих тетрадей, шариковых ручек). Проверить домашнее задание.
ІІ. СООБЩЕНИЕ ТЕМЫ, ЦЕЛИ И ЗАДАЧ УРОКА
Тема сегодняшнего нашего урока: Высказывания. Истинные и ложные высказывания.
Задачи:
Образовательные: изучить логические структуры;
Развивающие: развивать познавательные интересы, навыки работы с мышью и клавиатурой, самоконтроль, умение конспектировать.
Воспитательные: воспитание упорства, ответственности и настойчивости учащихся; развитие аккуратности, внимательности.
ІІІ. АКТУАЛИЗАЦИЯ ОПОРНЫХ ЗНАНИЙ, УМЕНИЙ, НАВЫКОВ
Беседа:
Каким символом обозначается вставка текста в Paint?
Возможно ли выбрать цвет вставленного текста?
Какие вы знаете примитивы в Paint?
Возможно ли выбрать размер вставленного текста?
Как создать новый рисунок в Paint?
ІV. ВОСПРИЯТИЕ И УСВОЕНИЕ НОВОГО МАТЕРИАЛА
Информатика имеет дело с предложениями. Но только мы будем говорить не о вопросительных или восклицательных предложениях. Нас будут интересовать повествовательные предложения. И такие предложения мы будем называть высказываниями. Например, «Сегодня – первый день зимы», «Идет дождь».
ВЫСКАЗЫВАНИЕ — предложение на любом языке, содержание которого можно однозначно определить, как истинное или ложное.
Высказывания может быть истинным (1) или ложным (0).
Истинное – то, что соответствует действительности.
Ложное — то. что действительности не соответствует.
Примеры высказываний:
После объяснения материала, обучающиеся выполняют задания на карточках. ПРИЛОЖЕНИЕ А.
V. ФИЗКУЛЬТМИНУТКА
Просмотр видеоролика (ПРИЛОЖЕНИЕ Б). Обучающиеся смотрят как выполняет преподаватель и повторяют.
VI. ПРАКТИЧЕСКАЯ РАБОТА
Задание:
Обведи истинное утверждение красным, а ложное – синим цветом.
Есть трубка
Есть диск с цифрами
Носят в сумке
Аппарат для разговора
VII. СИСТЕМАТИЗАЦИЯ МАТЕРИАЛА
Беседа:
Высказывание — это?
Приведите пример истинного высказывания?
Ложное высказывание — это?
VIII. ДОМАШНЕЕ ЗАДАНИЕ И ИНСТРУКТАЖ ЕГО ВЫПОЛНЕНИЯ
Конспект учить, записать в тетради 5 истинных и 5 ложных высказываний.
ПРИЛОЖЕНИЕ А
1. Определите, какие высказывания истинные, а какие – ложные.
Если в городе идет дождь, то асфальт мокрый. Истинное
Люди всегда говорят только правду. Ложное
Все дети любят пить молоко. Ложное
Если у ребенка ангина, то у него болит горло. Истинное
Слоны машут ушами, чтобы взлететь. Ложное
У колобка есть голова и хвост. Ложное
У лягушки нет рогов. Истинное
2. Дополните высказывания словами «все», «некоторые» так, чтобы получились истинные высказывания.
НЕКОТОРЫЕ дети знают математику на пять.
НЕКОТОРЫЕ фигуры треугольники.
ВСЕ квадраты четырёхугольники;
ВСЕ отрезки ограничены с двух сторон;
НЕКОТОРЫЕ числа складываются
НЕКОТОРЫЕ числа двузначные
ПРИЛОЖЕНИЕ А
DOCX / 73.03 Кб
https://www.youtube.com/watch ?v=mH5AMd5xs-Y
Высказывания. Истинные и ложные высказывания. Логические структуры «если- то- иначе»
Похожие презентации:
Пиксельная картинка
Информационная безопасность. Методы защиты информации
Электронная цифровая подпись (ЭЦП)
Этапы доказательной медицины в работе с Pico. Первый этап
История развития компьютерной техники
От печатной книги до интернет-книги
Краткая инструкция по CIS – 10 шагов
Информационные технологии в медицине
Информационные войны
Моя будущая профессия. Программист
Высказывания.
Истинные и ложные
высказывания.
Логические структуры
«если- то- иначе».
4
Урок 20
7 февраля 2022 г.
Классная работа
Логические высказывания
Урок 20
Сегодня вы:
4
выясните, что
такое
высказывание и
отрицание
высказывания
узнаете,
какие
высказывания
являются
истинными, а
научитесь
решать
задачи,
анализируя
высказывания
Высказывания
4
Вы уже встречались с логическими задачами
на
уроках
математики
и
информатики,
например,
работая
с
учебными
онлайнпрограммами.
Высказывания
4
Основным
понятием
логики
являются
высказывания — предложения, в которых что-то
утверждается или отрицается. Высказывание
может
быть
только
повествовательным
предложением.
Какие из приведенных предложений
являются высказываниями, а какие — нет?
Река Кальмиус протекает
в Донецке.
Какая сегодня погода?
Закрой окно.
Высказывание –
предложение, о котором
можно точно сказать ложное
оно или истинное.
Любое другое предложение
высказыванием не является.
Истинные и ложные
высказывания
4
Высказывания
могут
быть
истинными
(правильными) и ложными (неправильными).
Истинным называют
правильное
высказывание.
Ложным
называют
неправильное
высказывание.
Истинные и ложные
высказывания
Например:
«цветы растут на
клумбе»
4
«рыбы живут в
воде»
Истинные и ложные
высказывания
Например:
«над Кальмиусом
ночью ярко светит
солнце»
4
«на яблоне растут
бананы»
Игра «Истина – Ложь»
1. Все животные – домашние.
2. Все животные имеют уши.
3. Некоторые животные могут
перевозить грузы.
4. Есть животное с копытами.
5. Не умеют плавать.
6. Нет диких животных.
Истинные и ложные
высказывания
4
Некоторые
высказывания
являются
истинными или ложными в зависимости от
определенного условия.
Рассмотрите рисунки. Когда одни и те
а когда — ложными?
Тут была
птица!
Тут был
заец!
Тут был
заец!
Тут была
птица!
Одно и то же высказывание может быть
истинным при одних условиях и ложным —
Истинные и ложные
высказывания
4
Решите задачу.
Саша
произнес
истинное
высказывание. Наташа его повторила и
высказывание оказалось ложным.
Может ли такое быть?
Приведите свои примеры таких высказываний.
Я – мальчик.
Справочник юного
исследователя
4
В математической логике ошибочность и
истинность высказываний обозначают числами
0 и 1 соответственно.
1
0
Отрицание высказываний
4
Вы, наверное, неоднократно слышали, как
маленькие дети отрицают своим родителям:
«ешь, это вкусная каша». — «Нет, это
безвкусная каша»; «На улице холодно». — «На
улице не холодно».
Отрицание высказываний
4
Высказывания, в котором отрицается
смысл того, о чем говорилось в исходном
высказывании, называют отрицанием.
Отрицание высказываний
4
Если
исходное
высказывание
является
истинным, то его отрицание является ложным,
и наоборот. Например, высказывание «У
квадрата
все
стороны
равны»
является
истинным, а его отрицание «У квадрата не все
стороны равны» является ложным.
Отрицание высказываний
4
Определите по рисунку, высказывания
являются истинными, а какие — ложными.
Найдите
высказывания,
к
которому
построено возражения.
1) На улице льет дождь.
2) Под
дождем
девочка
идет
3) На улице сияет солнце
4) На
улице
дождь.
не
льет
Отрицание высказываний
4
Высказывание и его отрицание не
могут быть одновременно истинными
Истинные и ложные
высказывания
4
Если высказывания истинно, то его
отрицание ложно; и наоборот, если
высказывания ложное, его отрицание
истинно.
Истинные и ложные
высказывания
4
Рассмотрим высказывание:
Рыбы живут на деревьях.
Это высказывание ложно. Его
можно создать, добавив частицу НЕ:
отрицание
Рыбы не живут на деревьях.
Теперь мы получили
истинное высказывание.
Интересности
4
Логика (от греч. Logos — слово, мысль,
размышление, понятие) — древнейшая наука о
мышлении. Родилась логика еще в середине IV
в. до н.э. «Отцом логики» считают великого
древнегреческого
ученого
и
философа
Аристотеля
Вопросы и задания
4
1. Как вы понимаете, что такое высказывание?
2. Какие бывают высказывания?
3. Что такое отрицание? Составьте по рисунку
высказывание и его отрицание.
Вопросы и задания
4
1. Найди среди этих высказываний истинные и
ложные.
Яблоки растут на деревьях.
Весной в Донецке цветут каштаны.
Шкаф можно
«Мебель».
купить
в
магазине
Лампочку, ручку, учебник, тетрадь
следует носить в портфеле.
Соловей умеет петь.
В Кальмиусе есть дельфины.
1. Найди на рисунке лишний предмет. Обоснуй
Розділ 6
свой выбор. Запиши о нем два истинные
§ 22
высказывания.
4
Рукавички греют зимой.
Эти рукавички красные с коричневым.
Задание 2
4
Соедини изображения персонажей одной
сказки.
Запиши
о
них
два
ложных
высказывания.
Буратино создал Карло из камня.
Лисичка хотела подружиться с колобком.
Задание 3
4
Создайте в тетради рисунок, для которого все
перечисленные
высказывания
были
бы
истинными.
1)
2)
3)
4)
На рисунке 4 квадрата.
Зеленый квадрат левее желтого.
Синий квадрат левее зеленого.
3.Розділ
Какие
из представленных высказываний
6
§ 22
истинные, а какие — ложные? Поставь
отметки в соответствующих квадратиках.
4
Высказывания
Все компьютеры умеют вычислять
Все ягоды сладкие
Осенью опадают листья
Все медведи белые
Некоторые девочки увлекаются
танцами
Все мальчики любят играть в
футбол
Истина
Ложь
Задание 4
4
Рассмотри
рисунок,
раскрась
его.
Что
перепутал художник? Придумай и запиши
несколько
истинных
высказываний
с
отрицательной частицей НЕ.
Задание 5
4
Даны числа: 324, 11, 456, 6, 478, 30, 999.
Обозначьте истинное высказывание.
4
Урок 20
English Русский Правила
True и False в логике
Узнайте больше о True и False в логике и о том, как они обозначаются как сигналы 1 и 0.
Просмотреть расшифровку
3.4
Вы узнаете этот символ по переключателям включения/выключения электрических устройств в компьютерах. Похоже на единицу и ноль. Этот символ также показывает, как работают компьютеры, задавая вопрос «Правда или ложь». Один означает «Правда». Он символизирует ток, протекающий через выключатель, когда он включен. Ноль означает «ложь». Ноль представляет собой отсутствие тока, когда переключатель выключен. Объединив миллионы этих переключателей вместе, компьютер может выполнять сложные вычисления. Вы можете изучить основную теорию этих вычислений, используя логические вентили для представления потока электричества через транзистор. Логический элемент представляет собой электрическую схему с входами и выходами.
46.2
Он получает входящие электрические токи, определяет, являются ли они «Истинными» или «Ложными», включенными или выключенными, и посылает новый исходящий электрический ток в зависимости от того, что он находит. Итак, прежде всего, вам нужно зайти на Circuitverse.org в своем браузере, и вы получите страницу, которая выглядит примерно так. А затем, если вы нажмете кнопку «Запустить симулятор» прямо здесь, посередине, вы попадете на страницу.
83.4
Я возьму здесь еще один выход и размещу его сбоку, оставив немного места для моего логического элемента, и я собираюсь использовать здесь элемент И. Давайте добавим мой логический элемент AND. Затем нам просто нужно соединить их, чтобы вы могли использовать эти маленькие зеленые точки, чтобы соединить свои логические элементы. Ну вот. Я тоже присоединюсь к своим отзывам. Вы можете использовать более одной строки, если хотите сделать ее немного аккуратнее. И тогда вы можете видеть, что, поскольку оба моих входа равны нулю, мой выход здесь также равен нулю. Если я включу один из входов, мой выход по-прежнему будет равен нулю.
124
И мы просто покажем вам другой, просто для демонстрации. Это не имеет значения. Любой из них по-прежнему приводит к тому, что выход равен нулю, поэтому вам нужно включить оба входа, чтобы получить выход, равный единице. Но что произойдет, если вы замените вентиль И вентилем ИЛИ? Я позволю вам исследовать и выяснить.
На этом шаге мы познакомим вас с понятиями «Истина» и «Ложь» в логике и объясним, как они обозначаются как сигналы 1 и 0. Мы также попробуем построить простые версии двух самых простых логических элементов, И и ИЛИ.
Правда и Ложь
Вы уже знаете, что компьютеры очень хорошо выполняют миллионы вычислений очень быстро, но знаете ли вы, что они всегда имеют дело с одним основным вопросом: Верно или Ложно (что по сути означает включено или выключено)? Вы видели символ на выключателе большинства электрических приборов и компьютеров, который выглядит следующим образом:
Этот базовый символ переключателя, который выглядит как 1 и 0, стал обозначать включение/выключение и может быть интерпретирован как представление всего способа работы компьютеров. 1 означает True (или включено), а 0 означает False (или выключено). Если мы вернемся к физическому способу работы компьютеров, то 1 представляет собой высокое напряжение, а 0 — низкое. Эти напряжения управляют транзисторами — электрическими компонентами, которые действуют как электрически управляемый переключатель.
Прежде чем мы начнем рассматривать то, как мы выражаем это, может быть полезно рассмотреть эту таблицу, в которой перечислены четыре способа, которыми ученые-компьютерщики и преподаватели выражают одно и то же понятие.
Правда | Ложь |
---|---|
На | Выкл. |
Текущий ток | Ток не течет |
1 | 0 |
В программировании мы ссылаемся на переменные, которые могут иметь только два возможных состояния, True
или False
, поскольку имеет тип данных Boolean .
Комбинируя миллионы этих переключателей, компьютер может обрабатывать очень сложные условия для выполнения очень сложных вычислений. Но давайте начнем с самого начала, с рассмотрения того, как мы справляемся с одним условием.
Логические вентили
Мы можем представить этот процесс в виде схемы, используя логические вентили для представления потока электричества через транзистор. Логический элемент представляет собой электрическую схему, обычно с двумя входами и выходом. Он получает два входящих электрических тока, определяет, являются ли они истинными или ложными (включены или выключены), и отправляет новый исходящий электрический ток в зависимости от того, что он находит. Процесс определения результата на основе таких входных данных известен как 9.0071 Булева логика .
Логический элемент И
Это логический элемент И, который представляет собой небольшую схему, сконфигурированную определенным образом для получения определенного результата. Вы можете видеть входы слева, представленные линиями, входящими в символ логического вентиля И. что ты думаешь это значит?
Логический элемент И имеет два входа и один выход. Оба должны быть True (или включены), чтобы на выходе было True. В приведенном выше примере оба входа установлены на True, что приводит к True на выходе.
Что, если бы только одно было правдой? Как это:
Как вы думаете, каким будет результат (обозначенный здесь X) на этот раз?
В случае вентиля И, если только один из входов был включен, то выход равен 0. И если ни один из входов не включен, вы были бы правы, предполагая, что на выходе снова есть 0. Оба входа первый вход и второй вход должен быть 1, чтобы получить выход True (или 1, или on).
Ворота операционной
Таким образом, логический элемент И включается только тогда, когда оба входа включены. А если мы хотим, чтобы выход был включен, когда включен хотя бы один из входов? Это называется воротами ИЛИ. Чтобы вентиль выдавал на выходе True, должен быть ток хотя бы с одного входа. Можете ли вы предсказать, каким будет результат, если входными данными будут 0 и 1 в схеме ИЛИ?
Почему бы не использовать Circuitverse для проверки правильности ваших прогнозов? Circuitverse — очень полезный и бесплатный онлайн-инструмент, моделирующий логические схемы. Перейдите в Circuitverse и начните с нажатия «Запустить симулятор». Выберите два входа, один выход и вентиль ИЛИ, а затем попробуйте переключать различные параметры, чтобы включать и выключать два входа. Нажав на точки сбоку от символов и перетащив мышь, вы можете соединить входы с символом логического элемента и символом логического элемента с выходом, чтобы имитировать протекание тока в цепи. Вы увидите, что выходные данные меняются в зависимости от вашего выбора входных данных.
Ваш логический элемент ИЛИ с входами 1 и 0 должен выглядеть так:
Символ, соединенные вместе. Входные данные (две линии, идущие слева) установлены на 1 и 0. Выходные данные (строка, исходящая от кончика > ) равны 1.»>
На следующем шаге мы рассмотрим таблицы истинности, представляющие собой таблицы, предоставляющие полные сводки входов и выходов логических вентилей и схем.
Простая схема: введение в информатику, глава 6: правда и ложь
Простая схема: Введение в информатику 2/e Copyright (C) 1999 MIT
Глава 6
|
Нам нужно еще кое-что, прежде чем мы сможем писать более интересные программы: способность принимать решения. У схемы есть способ сказать: «Если это правда, затем сделай это, иначе сделай что-нибудь другое».
Вот процедура, которая приветствует человека:
(определить (приветствовать имя) (если (равно? (имя) 'профессор) (se '(надеюсь, я вас не беспокою) 'профессор (фамилия)) (se '(рад тебя видеть) (имя)))) > (приветствовать (Мэтт Райт)) (РАД ВИДЕТЬ ТЕБЯ, МЭТТ) > (приветствовать '(профессора Гарольда Абельсона)) (НАДЕЮСЬ, Я НЕ ОБЕСПЕЧИВАЮ ВАС, ПРОФЕССОР АБЕЛЬСОН)
Программа приветствует человека, проверяя, является ли этот человек профессор. Если это так, он говорит: «Надеюсь, я вас не беспокою», а затем имя профессора. Но если это обычный человек, программа просто говорит: «Рад тебя видеть», а затем имя человека.
Если
принимает три аргумента. Первое должно быть либо истинным, либо
ЛОЖЬ.
(Сейчас мы поговорим о том, как именно истина и ложь выглядят для
Схема.) В приведенном выше примере первое слово имени человека может или
может не совпадать со словом «профессор». Второй и третий аргументы
являются выражениями; тот или иной из них оценивается в зависимости от
первый аргумент. Значение всего выражения , если
является значением
либо второй, либо третий аргумент.
В главе 2 вы узнали, что Scheme включает в себя специальный тип данных.
вызывается Booleans для представления истинного или ложного
значения. Их всего два: #t
для «правда» и #f
для «ложь».[1]
Мы сказали, что первый аргумент , если
должен быть истинным или ложным. Из
конечно, глупо было бы говорить
> (если #t (+ 4 5) (* 2 7)) 9
потому что какой смысл использовать , если
, если мы уже знаем
какая ветвь будет следовать? Вместо этого, как и в приветствуем
например, звоним
некоторая процедура, возвращаемое значение которой будет либо истинным, либо ложным, в зависимости от
конкретные аргументы, которые мы ему приводим.
Предикаты
Функция, возвращающая либо #t
, либо #f
, называется предикатом . [2] Вы
уже видели равные ?
предикат. Он принимает два аргумента, которые
может быть любого типа и возвращает #t
, если два аргумента совпадают
значение или #f
, если они разные. Это соглашение в Схеме, которое
имена предикатов заканчиваются знаком вопроса, но это всего лишь
соглашение. Вот еще несколько полезных предикатов:
> (участник? 'Мик' (Дэйв Ди Дози Клювовидный Мик и Тич)) #Т > (член? 'Мик' (Джон Пол Джордж Ринго)) #F > (Член?'e' действительно) #F
> (член? действительно) #Т > (= 3 4) #F > (= 67 67) #Т > (> 98 97) #Т > (до? 'Цорн' Коулман) #F > (до? Пит Ринго) #Т > (пусто? '(аббатская дорога)) #F > (пусто? '()) #Т > (пусто? 'привет) #F > (пусто? (бф (бф привет))) #Т > (пусто? "") #Т
Участник?
принимает два аргумента; он проверяет, является ли первый
один является членом второго. =
, >
, <
,
Функции >=
и <=
принимают два числа в качестве аргументов и выполняют
очевидные сравнения. (Кстати, это исключения из соглашения о
вопросительные знаки.) Раньше?
похоже на <
, но сравнивает два слова
по алфавиту. Пусто?
проверяет, является ли его аргумент
либо пустое слово, либо пустое предложение.
Почему у нас оба равны?
и =
на схеме? Первый из них
работает с любым типом данных Scheme, в то время как второй определен только для
числа. Вы могли бы всегда использовать равных?
, но больше
конкретная форма делает вашу программу более понятной; люди читают
программа сразу узнает, что вы сравниваете числа.
Есть также несколько предикатов, которые можно использовать для проверки типа их аргумент:
> (число? 'три) #F > (число? 74) #Т > (логическое значение? #f) #Т > (логическое значение? '(Битлз)) #F
> (логическое значение? 234) #F > (логическое значение? #t) #Т > (слово? «летать») #Т > (слово? '(копать)) #F > (слово? 87) #Т > (предложение? 'Подождите) #F > (предложение? '(что происходит)) #Т
Конечно, мы также можем определить новые предикаты:
(определить (гласная? буква) (член? буква 'aeiou)) (определить (положительное? число) (> номер 0))
Использование предикатов
Вот процедура, которая возвращает абсолютное значение числа:
(определение (абс. число) (если (< число 0) (- число) число))
(Если вы вызываете -
только с одним аргументом, он возвращает
отрицание этого аргумента.) Схема фактически обеспечивает абс.
в качестве
примитивная процедура, но мы можем ее переопределить.
Ты помнишь, как играть в жужжание? Вы все сидите у костра и ты идешь по кругу считая от единицы. Каждый человек говорит количество. Если ваше число делится на семь или если одна из его цифр семь, то вместо того, чтобы назвать свой номер, вы говорите "жужжание".
(определить (номер гудка) (если (или (делимый? число 7) (член? 7 число)) 'гул число)) (определить (делимый? большой маленький) (= (остаток большой маленький) 0))
или
может принимать любое количество аргументов, каждый из которых должен быть
правда или ложь. Он возвращает true, если хотя бы один из его аргументов истинен, т. е. если
первый аргумент верен или второй аргумент верен или &hellip ( Остаток
, как вы знаете, принимает два целых числа и сообщает
вы, что остаток, когда вы делите первое на второе. Если
остаток равен нулю, первое число делится на второе.)
Или
— одна из трех функций в схеме, которые сочетают в себе истинное или ложное значение.
значения для получения другого истинного или ложного значения. И
возвращает true, если
все его аргументы верны, то есть первые и второй и &hellip Наконец, есть функция , а не
, которая
принимает ровно один аргумент, возвращая true, если этот аргумент ложен и
наоборот.
В последнем примере мы действительно хотели написать процедуру buzz
,
но мы сочли полезным определить делимым?
тоже. это довольно часто
что самый простой способ решить какую-то проблему — написать хелпер процедура для выполнения части работы. В этом случае вспомогательная процедура
вычисляет функцию, которая имеет смысл сама по себе, но иногда вам может понадобиться
писать процедуры с именами вроде buzz-helper
, которые полезны только
в контексте одной конкретной проблемы.
Давайте напишем программу, которая принимает слово в качестве аргумента и возвращает множественное число этого слова. Наша первая версия просто поставит «s» в конце:
(определение (множественное число wd) (слово wd's)) > (множественное число «битл») БИТЛЗ > (множественное число «компьютер») КОМПЬЮТЕРЫ > (множественное число «летать») МУХИ
Это работает для большинства слов, но не для тех, которые заканчиваются на "у". Вот версия вторая:
(определить (множественное число) (если (равно? (последнее wd) 'y) (слово (bl wd) 'ы) (слово wd's)))
Это тоже не совсем верно; думает, что множественное число "мальчик" - это "мальчики". Мы попросим вас добавить еще несколько правил в Упражнение. 6.12.
Если
является специальной формой Есть несколько тонкостей, о которых мы еще не рассказали. Первый из
all, , если
является специальной формой. Помните, что мы собираемся
необходимо значение только одного из двух последних аргументов. это было бы расточительно
для Схемы, чтобы оценить другой. Итак, если вы скажете
(если (= 3 3) 'Конечно (факториал 1000))
, если
не будет вычислять факториал 1000 перед возвратом обязательно
.
Правило таково, что , если
всегда оценивает свой первый аргумент. Если значение
этого аргумента истинно, то , если
оценивает свой второй аргумент и
возвращает свое значение. Если значение первого аргумента ложно, то , если
оценивает свой третий аргумент и возвращает это значение.
Аналогично
,
и или
И
и или
тоже специальные формы. Они оценивают
свои аргументы в порядке слева направо[3] и останавливаются, как только могут. Для или
, это означает
возвращает истину, как только любой из аргументов истинен. и
возвращает
false, как только любой аргумент является ложным. Это оказывается полезным в
случаи, подобные следующим:
(определить (делимый? большой маленький) (= (остаток большой маленький) 0)) (определить (число, делимое на 4? x) (и (число? х) (делимое? х 4))) > (число делится на 4? 16) #Т > (число делится на 4? 6) #F > (число делится на 4? трубкозуб) #F > (делимый? 'трубкозуб 4) ОШИБКА: ААРДВАРК ЭТО НЕ ЧИСЛО
Мы хотим проверить, является ли x
числом, и если да, то
делится на 4
. Было бы ошибкой применять делимых?
к
не число. Если бы и
были обычной процедурой, два теста ( число?
и делимое?
) были бы оценены до того, как мы
есть шанс обратить внимание на результат первого. Вместо этого, если x
оказывается не числом, наша процедура вернет #f
не пытаясь разделить на 4
.
Все, что не является ложью, является правдой
#T
— не единственное верное значение. На самом деле каждое значение равно
считается верным, за исключением #f
.
> (если (+ 3 4) «да» нет) ДА
Это позволяет нам иметь полупредикатов , которые дают
немного больше информации, чем просто правда или ложь. Например, мы можем
написать процедуру целочисленного частного. То есть наша процедура будет
разделить его первый аргумент на второй, но только если первый поровну
делится на секунду. Если нет, наша процедура вернет #ф
.
(определить (целочастное большое маленькое) (если (делимый? большой маленький) (/ большой маленький) #ф)) > (целое частное 27 3) 9 > (целочастное 12 5) #F
И
и или
также являются полупредикатами. мы уже объяснили
что или
возвращает истинный результат, как только он оценивает истинный
аргумент. Конкретное истинное значение, которое возвращает или
, является значением
первый верный аргумент:
> (или #f 3 #f 4) 3
И
возвращает истинное значение, только если все его аргументы
истинный. В этом случае он возвращает значение последнего аргумента:
> (и 1 2 3 4 5) 5
В качестве примера, в котором это поведение полезно, мы можем переписать целое-частное
короче:
(определить (целочастное большое маленькое) ;; альтернативная версия (и (делимый? большой маленький) (/ большой маленький)))
Решения, Решения, Решения
Если
отлично подходит для выбора "или-или". Но иногда их несколько
возможности рассмотреть:
(определить (латинская буква) (если (равно? буква 'i) 1 (если (равно? буква 'v) 5 (если (равно? буква 'х) 10 (если (равно? буква 'л) 50 (если (равно? буква 'с) 100 (если (равно? буква 'd) 500 (если (равно? буква м) 1000 'хм?))))))))
Это довольно отвратительно. Схема обеспечивает сокращенное обозначение для
подобных ситуациях, в которых вам приходится выбирать из нескольких
возможности: спецформа конд
.
(определить (латинская буква) (cond ((равно? букве 'i) 1) ((равно? буква 'v) 5) ((равно? буква 'х) 10) ((равно? букве 'l) 50) ((равно? буква 'с) 100) ((равно? букве d) 500) ((равно? букве м) 1000) (иначе а?)))
Хитрость про cond
заключается в том, что в нем совсем не используются круглые скобки. так же, как и остальные
схемы. Обычно скобки означают вызов процедуры. В cond
, большинство скобок по-прежнему означают это, но некоторые из
они используются для группировки пар тестов и результатов. Мы воспроизвели
то же выражение cond
ниже, выделенное жирным шрифтом.
(определить (латинская буква) (состояние ( (равно? букве 'i) 1 ) ( (равно? буква 'v) 5 ) ( (равно? букве 'х) 10 ) ( (равно? букве 'l) 50 ) ( (равно? буква 'с) 100 ) ( (равно? букве d) 500 ) ( (равно? буква м) 1000 ) ( еще 'а? ) ))
Cond
принимает любое количество аргументов, каждый из которых равен два
выражения внутри пары круглых скобок. Каждый аргумент называется условием . В приведенном выше примере одним типичным предложением является
( (равно? буква 'l) 50 )
В крайних скобках этой строки заключены два выражения.
Первое из двух выражений (условие ) принимается как
true или false, как и первый аргумент , если
. Второй
выражение каждой пары ( консеквента ) является кандидатом на
возвращаемое значение всего вызова cond
.
Cond
проверяет свои аргументы слева направо. Помните, что с тех пор cond
— это специальная форма, ее аргументы не оцениваются заранее.
Для каждого аргумента условие
вычисляет первое из двух выражений.
внутри аргумента. Если это значение окажется истинным, то условие
оценивает второе выражение в том же аргументе и возвращает это значение
без рассмотрения каких-либо дополнительных аргументов. Но если значение ложно, то cond
вычисляет ли , а не второе выражение; вместо этого идет
к следующему аргументу.
По соглашению последний аргумент всегда начинается со слова , иначе
вместо выражения. Вы можете думать об этом как об истинном
value, но , иначе
не означает true ни в каком другом контексте; ты всего лишь
разрешено использовать его как условие последнего пункта соглашения cond
.[4]
Не приобретайте вредных привычек думать о внешнем виде cond
условий с точки зрения «двух скобок подряд».
Так бывает часто, но не всегда. Например, вот процедура, которая
переводит значения схемы true или false ( #t
и #f
)
в более удобочитаемые слова true
и false
.
(определить (истинно-ложное значение) (cond (значение 'истина) (иначе "ложь") > (верноложно (= 2 (+ 1 1))) ПРАВДА > (верноложно (= 5 (+ 2 2))) ЛОЖНЫЙ
Когда условие
проверяет несколько возможных условий, они могут не
быть взаимоисключающими.[5] Это может быть либо источником ошибки, либо преимуществом в
написание эффективных программ. Хитрость заключается в том, чтобы сделать большинство
сначала ограничительный тест . Например, было бы ошибкой сказать
(cond ((номер? (первый отправлен)) &hellip) ;; неправильно ((пусто? отправлено) &hellip) &hellip)
, потому что первый тест имеет смысл, только если вы уже установлено, что там есть первое слово предложения. С другой стороны, вам не нужно говорить
(состояние ((пусто? отправлено) &hellip) ((и (не (пусто? отправлено)) (номер? (первый отправлено))) &hellip) &hellip)
, потому что вы уже установили, что предложение непустое если вы дойдете до второго пункта.
Если
является составным Предположим, мы хотим написать процедуру приветствия
, которая работает следующим образом:
> (приветствовать (Брайан Эпштейн)) (РАД ВСТРЕТИТЬСЯ, БРАЙАН - КАК ТЫ?) > (приветствовать '(профессора Дональда Кнута)) (РАД ВСТРЕТИТЬСЯ С ВАМИ, ПРОФЕССОР КНУТ - КАК ТЫ?)
Реакция программы в этих двух случаях почти одинакова; разница только в форме имени человека.
Эту процедуру можно записать двумя способами:
(определить (приветствовать имя) (если (равно? (имя) 'профессор) (se '(приятно познакомиться) 'профессор (фамилия) '(- как дела?)) (se '(приятно познакомиться) (имя) '(- как дела?)))) (определить (приветствовать имя) (se '(приятно познакомиться) (если (равно? (имя) 'профессор) (se 'профессор (фамилия)) (имя)) '(- как дела?)))
Вторая версия избегает повторения общих частей
ответ с помощью , если
в большем выражении.
Некоторые люди считают нелогичным использовать вместо
, как мы делали во втором случае.
версия. Возможно, причина в том, что в некоторых других языках программирования , если
является «командой», а не функцией, как любая другая. Механизм
который выбирает одну часть программы для запуска и пропускает другую часть, может
кажутся слишком важными, чтобы быть простым подвыражением аргумента. Но в Схеме
значение, возвращаемое , каждая функция может использоваться как часть более крупного
выражение. [6]
Мы не говорим здесь ничего нового. Мы уже объясняли идею
композицию функций, и мы снова повторяем то же самое о если
. Но мы узнали, что многие студенты ожидают , если
будет
исключением, поэтому мы пользуемся случаем, чтобы подчеркнуть: есть
никаких исключений из этого правила.
Ловушки
Самой большой ловушкой в этой главе является необычная запись cond
. Отслеживание скобок, означающих вызов функции, как
обычно, а скобки, которые просто группируют части числа условие
пункт
сложно, пока не привыкнешь.
Многие люди также имеют проблемы с асимметрией члена ?
предикат. Первый аргумент — что-то маленькое; второе это что-то
большой. (Порядок аргументов такой же, как в обычном английском
предложение о членстве: «Является ли Мик участником The Beatles?»)
Это кажется довольно очевидным, когда вы смотрите на пример, в котором оба
аргументы являются постоянными значениями в кавычках, но у вас могут возникнуть проблемы, когда вы
определить процедуру и использовать ее параметры в качестве аргументов для 9Член 0067? . Сравните написание процедуры, которая говорит: «Появляется ли буква E в этом
слово?» с тем, который говорит: «эта буква гласная?»
Многие люди пытаются использовать и
и или
с полной гибкостью
соответствующих английских слов. Увы, Scheme не английский. За
Например, предположим, что вы хотите знать, является ли аргумент процедуры
либо слово да
, либо слово нет
. Вы не можете сказать
(равно? аргумент (или "да" нет) ); неправильный!
Звучит многообещающе: «Является ли аргумент
равным
слово да
или
слово нет
?" Но аргументы для или
должны быть значениями "истина-ложь", а не теми вещами, которые вы хотите проверить на равенство
с чем-то другим. Вы должны сделать два отдельных теста на равенство:
(или (равно? аргумент 'да) (равно? аргумент 'нет))
В этом конкретном случае вы также можете решить проблему, сказав
(член? аргумент' (да нет))
, но вопрос о попытке использовать или
, как если бы это был английский
возникает в других случаях, для которых членов?
не поможет.
Это не совсем ловушка, потому что это не остановит вашу программу от работает, но программы нравятся
(определить (нечетное? п) (если (не (даже? н)) #t #f))
являются избыточными. Вместо этого вы могли бы просто сказать
(определить (нечетное? п) (не (даже? н)))
, так как значение (не (четное? п))
уже равно #т
или #ф
.
Сверлильные упражнения
6.1 Какие значения выводятся, когда вы вводите эти выражения в Scheme? (Фигура прокручивайте в голове, прежде чем попробовать на компьютере.)
(состояние ((= 3 4) '(этот мальчик)) ((< 2 5) '(нигде человек)) (иначе '(нас двое))) (конд (пусто? 3) (квадрат 7) (еще 9)) (определить (глагол в третьем лице единственного числа) (состояние ((равно? глагол 'быть) 'есть) ((равно? (последний глагол) 'o) (словесный глагол 'es)) (иначе (глагол слова)))) (от третьего лица единственного числа «идти»)
6. 2 Какие значения выводятся при вводе этих выражений в Scheme? (Фигура прокручивайте в голове, прежде чем попробовать на компьютере.)
(или #f #f #f #t) (и #f #f #f #t) (или (= 2 3) (= 4 3)) (не #f) (или (не (= 2 3)) (= 4 3)) (или (и (= 2 3) (= 3 3)) (и (< 2 3) (< 3 4)))
6.3 Перепишите следующую процедуру, используя cond
вместо if
s:
(определить (номер знака) (если (< число 0) отрицательный (если (= число 0) 'нуль позитив)))
6.4 Перепишите следующую процедуру, используя if
вместо cond
:
(определить (посуда) (конд ((равно? еда 'китайский) 'палочки для еды) (иначе "вилка"))
Реальные упражнения
Примечание. Написание вспомогательных процедур может быть полезным при решении некоторых из этих проблем. проблемы.
6.5 Напишите процедуру европейское время
для преобразования времени из американского
Обозначение AM/PM в европейском 24-часовом формате. Также
написать американское время
, что делает обратное:
> (европейское время '(8 утра)) 8 > (европейское время '(16:00)) 16 > (американское время 21) (21:00) > (американское время 12) (12 часов) > (европейское время '(12 утра)) 24
Точно определить полдень и полночь сложно.
6.6 Напишите предикат teen?
, который возвращает true, если его аргумент находится между
13 и 19.
6.7 Напишите процедуру типа
, которая принимает что угодно в качестве аргумента и
возвращает одно из слов слово
, предложение
, число
или логическое значение
:
> (тип '(улучшается)) ПРИГОВОР > (тип "революции") СЛОВО > (тип-из (= 3 3)) логическое значение
(Несмотря на то, что числа являются словами, ваша процедура должна возвращать число
, если ее аргумент является числом.)
Не стесняйтесь проверять более конкретные типы, такие как «целое положительное число», если вы так склонны.
6.8 Напишите процедуру в статье
, который работает следующим образом:
> (indef-артикул «битл») (БИТЛ) > (indef-статья 'альбом) (АЛЬБОМ)
Не беспокойтесь о тихих начальных согласных, таких как h
в час
.
6.9 Иногда вы должны выбрать единственное или множественное число слова: 1 книга
но 2 книги
. Напишите процедуру thismany
, которая принимает
два аргумента, число и существительное в единственном числе, и соответствующим образом их комбинирует:
> (это много 1 куропатка) (1 КУРОПАТКА) > (thismany 3 'французская курица) (3 ФРАНЦУЗСКИХ КУРИЦЫ)
6.10 Напишите процедуру sort2
, которая принимает в качестве аргумента предложение
содержащий два числа. Он должен вернуть предложение, содержащее те же два
числа, но в порядке возрастания:
> (сорт2 '(5 7)) (5 7) > (сорт2 '(7 5)) (5 7)
6. 11 Написать предикат допустимая дата?
, который принимает три числа в качестве аргументов,
представляющие месяц, день месяца и год. Ваша процедура должна
вернуть #t
, если числа представляют правильную дату (например, это не
31 сентября). В феврале 29 дней, если год делится на 4,
за исключением того, что если год делится на 100, он также должен делиться на 400.
> (дата действия? 10 4 1949) #Т > (дата действия? 20 4 1776) #F > (дата действия? 5 0 1992) #F > (дата действия? 2 29 1900) #F > (дата действия? 29 2000 г.) #Т
6.12 Заставить множественное число
правильно обрабатывать слова, оканчивающиеся на y
но есть
гласная перед y
, например мальчик
. Затем научите его словам, которые
заканчиваются на x
(коробка). Какие еще особые случаи вы можете найти?
6.13 Напишите лучшую процедуру приветствия
, которая понимает как можно больше разных
виды имен, которые вы можете придумать:
> (приветствовать (Джон Леннон)) (ПРИВЕТ ДЖОН) > (приветствовать '(доктор Мари Кюри)) (Здравствуйте, доктор Кюри) > (приветствовать '(доктор Мартин Лютер Кинг младший)) (Здравствуйте, доктор Кинг) > (приветствовать '(королеву Елизавету)) (ЗДРАВСТВУЙТЕ, ВАШЕ ВЕЛИЧЕСТВО) > (приветствовать '(Дэвид Ливингстон)) (Доктор Ливингстон, я полагаю?)
6. 14 Напишите процедуру описать-время
, которая принимает несколько секунд в качестве своего
аргумент и возвращает более полезное описание этого количества времени:
> (время описания 45) (45 СЕКУНД) > (описать-время 930) (15,5 МИНУТ) > (опишите-время 30000000000) (9,506426344208686 ВЕКОВ)
[1] В некоторые версиях Scheme пустое предложение считается ложным. Который то есть
()
и #f
могут быть одним и тем же. Причина, по которой мы не можем
быть уверенным в этом моменте является то, что более старые версии Scheme следуют
традиционное использование Лиспа, в котором пустое предложение является ложным, но с тех пор
появился комитет по стандартизации и настоял на том, чтобы два значения
должно быть другим. В этой книге мы будем рассматривать их как разные, но
мы постараемся избегать примеров, в которых это имеет значение. Главное, что вы
не удивлюсь, если увидишь что-то вроде этого:> (= 3 4) ()
в конкретной реализации схемы, которую вы используете.
[2] Почему он так называется? Подумайте об английском предложение, например «Ринго — барабанщик». Как вы помните из элементарного школе, "Ринго" является субъектом этого предложения, и "является барабанщик" является предикатом . Этот предикат может быть привязаны к одним предметам, но не к другим. Например, это верно для «Нейл Пирт", но не "Джордж Харрисон". Таким образом, предикат "является барабанщиком" можно рассматривать как функцию, значение которой истинно или ложно.
[3] Так как вы может начинать новую строку в середине выражения, в некоторых случаях аргументы будут «сверху вниз», а не «слева направо», но не забудьте, что Scheme не заботится о разрывах строк. Вот почему Лисп программисты всегда говорят так, как будто их программы написаны на одной огромной длинная линия.
[4] Что делать, если вы не используете вместо
оговорка вообще? Если ни одно из предложений не имеет истинного условия, то возврат
значение не указано.