| Россия | 
                Опубликован: 15.11.2010 | Уровень: для всех | Доступ: платный    
            
                  
        
        Лекция 1: 
                  
          Классификация ввода-вывода
1.5.2. Язык Python
- Язык Python является интерпретируемым императивным языком, команды которого выполняются в диалоговой оболочке. Для запуска интерпретатора необходимо в командной строке набрать команду [29, 48]:и нажать клавишу "Enter" ;>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( _ ). 
                             
