Опубликован: 15.11.2010 | Уровень: для всех | Доступ: платный
Лекция 1:
Классификация ввода-вывода
1.5.2. Язык Python
- Язык Python является интерпретируемым императивным языком, команды которого выполняются в диалоговой оболочке. Для запуска интерпретатора необходимо в командной строке набрать команду [29, 48]:
>python
Листинг 1.3. - Команда Питона вводится после приглашения: ">>>" ;
- Для того чтобы выйти из Питона, необходимо нажать:
- Ctrl+d - в UNIX и Linux;
- Ctrl+z - в DOS и Windows;
>>> import sys
Листинг 1.4.>>> sys.exit()
Листинг 1.5. - Комментарии в Питоне обозначаются символом: "#". Всё, что расположено после этого символа, игнорируется до конца строки;
- Переменные в Питоне не требуют объявления, и могут первоначально содержать любые данные;
- В Питоне строки могут заключаться как в двойные, так и в одинарные кавычки. Если строка слишком длинная, то можно уместить в нескольких строках путём указания в конце символа "\" ;
- Для многократного использования функций в интерпретаторе у питона существуют модули. Модули Питона имеют расширение "*.py", и могут содержать только текст;
- Функции внутри модуля начинаются со слова def, после которого идут имя функции и её формальные параметры. Далее идёт блок с телом функции;
- Для вызова функции из модуля необходимо сделать следующие шаги:
- Модули ни в коем случае не должны иметь одинаковые имена;
- Вместо открывающейся скобки блока операторов Питон использует окончание после команды: ":". Блоки операторов выделяются отступом. Окончание блока определяется отсутствием соответствующего отступа у следующего за блоком оператора;
- Символ "=" используется в качестве оператора присвоения значений переменным.
Это основные положения, необходимые для понимания программ на Питоне. Далее в текстах лекций будут приведены примеры модулей на Питоне. Здесь же мы рассмотрим простую программу.
Пример 1.2.
#! %PYTHON%/python # -*- coding: cp866 -*- # Файл ex01002.py def Hello_World(): print "Hello, World!\n" print "Не желаете ли поговорить? " print "Введите 'y' или 'Y' для Да или другую букву для нет.\n" cAnswer = raw_input() if( cAnswer == "Y" or cAnswer == "y" ): print "Прекрасная погода, не так ли?\n" print "До свидания!\n" print "Press key Enter to exit..." junk = raw_input()
1.5.3. Язык Prolog
- Язык Prolog является декларативным логическим языком программирования, команды которого выполняются либо в оболочке языка, либо компилируются в приложение командной строки [19];
- Для входа в оболочку программы Пролог необходимо в командной строке набрать команду: "> prolog". Для выхода из оболочки необходимо нажать сочетание клавиш "Alt+X". Оболочка работает в "псевдографическом режиме" (когда все графические элементы рисуются средствами текстового вывода);
- Исходный текст программы на языке Пролог расположен в файле с расширением "*.pro", и может содержать только текст;
- Комментарии на языке Пролог обозначаются скобками: "/* ... */" ;
- Любая программа на языке Пролог разбита на следующие секции: "global domains", "domains", "global predicates", "predicates", "databases", "clauses" и "goal" [51];
- В секции "domains" происходит объявление переменных указанного типа. Это объявление происходит следующим образом:
"имя переменной"{,"имя переменной"}+ = "тип"
- Типы переменных на языке пролог могут быть следующими:
- integer - целое число со знаком длиной 2 байта;
- char - одиночный символ длиной 1 байт;
- real - действительное число (с плавающей точкой);
- string - тип данных "строка" (массив символов "char", оканчивающийся нулевым символом). Строки заключаются в двойные кавычки. Пример: "отец" ;
- symbol - символьный тип данных, уникальный для языка Пролог. Он представляет собой последовательность литер в нижнем регистре. Значение этого типа не заключается в кавычки и не может изменяться. Пример: отец ;
- file - символическое имя файла;
- Имена переменных всегда начинаются с заглавной, прописной буквы;
- Если описан какой-либо домен (состоящий из переменных), то для указания списка из таких объектов надо указать имя домена со знаком "*", например:
domains
Листинг 1.7.object = integer
Листинг 1.8.object_list = object*
Листинг 1.9. - В секции "predicates" представлены объявления предикатов. Предикатом может быть факт, правило, а также имя функции на императивных языках. В данной секции предикаты объявляются, но не определяются. Новый предикат начинается с новой строки. Пример:
predicates
Листинг 1.10.predicate1( object, object )
Листинг 1.11.predicate2(object, object_list )
Листинг 1.12. - Секция "databases" похожа на секцию "predicates", однако содержащиеся в ней предикаты могут создаваться и удаляться динамически, в процессе исполнения программы. Предикаты в секции "databases" могут быть только фактами. Базу данных можно сохранять в файл и загружать в оперативную память из файла;
- После описаний выражений в секциях "domains", "global domains", "predicates", "global predicates" и "databases" знак точка (или вообще какой-либо другой знак) в конце выражения не ставится. Выражения в секциях "clauses" и "goal" всегда оканчиваются точкой.
- В секции "clauses" (кляузы) записываются назначения фактов и определяются правила для предикатов, описанных в секциях "predicates" и "databases" ;
- Предикаты, присутствующие в правилах секции "кляузы" и в секции "goal" (цель), разделяются друг от друга запятыми, и могут располагаться в несколько строк;
- Левая часть правила отделяется от её правой части либо символом "if", либо сочетанием знаков ":-". Заканчиваться правило должно знаком ".", например:
clauses grandfather( X, Y ) :- father( X, Z ), father (Z, Y).
Листинг 1.13. - В указанном выше примере переменную Z называют "связанной", а переменные X и Y - "свободными" переменными;
- Секция "цель" в программе на Turbo Prolog может быть только одна;
- В секции "цель" должны через запятую быть записаны предикаты в том порядке, в котором они вызываются на исполнение. Например:
goal
Листинг 1.14.write( "Первая строка" ), nl,
Листинг 1.15.write( "Вторая строка" ).
Листинг 1.16. - Предикаты в прологе могут завершаться успешно (когда все действия, посылки и условия истины и правильны), и неудачно (в противном случае). Если хотя бы один предикат в правиле завершился неудачно, неудачей завершится и всё правило;
- Отличительной особенностью Пролога является широкое использование им рекурсии - предиката, встречающегося и в левой, и в правой части правил. Благодаря рекурсии система на Прологе может найти не одно, а несколько решений, удовлетворяющих заданным правилам и фактам. Количество найденных решений отображается в конце вывода результатов, например: "2 Solution". В случае отсутствия решения у задачи (например, цель завершилась неудачно) выдаётся сообщение: "No Solution" ;
- Чтобы рекурсия не была бесконечной, правила на языке Пролог записываются следующим способом:
- Вначале записывают условия, завершающие рекурсию;
- Потом записываются правила, начинающие или продолжающие рекурсию. Например:
clauses
Листинг 1.17./* Вычисление факториала целого числа */ factorial( 0, 1 ).
Листинг 1.18.factorial( N, M ) :- M = N * M1, N1 = N - 1, factorial( N1, M1 ).
Листинг 1.19. - Символ "=" используется и как оператор присвоения значений переменным, и как оператор сравнения (эквивалентности) численных и символьных данных.
Это основные сведения, необходимые для программирования на языке Prolog. Ниже приведена программа для иллюстрации ввода-вывода текста:
Пример 1.3.
/* Файл ex01003.pro */ domains /* Описываем переменные */ CAnswer = char predicates answer clauses /* Определяем правило answer */ answer :- readchar( CAnswer ), CAnswer = 'y', write( "Прекрасная погода, не так ли?"),nl,!. answer :- readchar( CAnswer ), CAnswer = 'Y', write( "Прекрасная погода, не так ли?"),nl,!. answer :- readchar( CAnswer ), CAnswer <> 'Y', CAnswer <> 'y'. goal write( "Hello, World!" ),nl, write( "Не желаете ли поговорить? " ), write( "Введите 'y' или 'Y' для Да или другую букву для нет." ),nl, answer, write( "До свидания!" ),nl, write( "Press key Enter to exit..." ), readchar( _ ).