Опубликован: 15.11.2010 | Уровень: для всех | Доступ: платный
Лекция 1:

Классификация ввода-вывода

Лекция 1: 12345678 || Лекция 2 >

1.5.2. Язык Python

  1. Язык Python является интерпретируемым императивным языком, команды которого выполняются в диалоговой оболочке. Для запуска интерпретатора необходимо в командной строке набрать команду [29, 48]:
    >python
    Листинг 1.3.
    и нажать клавишу "Enter" ;
  2. Команда Питона вводится после приглашения: ">>>" ;
  3. Для того чтобы выйти из Питона, необходимо нажать:
    • Ctrl+d - в UNIX и Linux;
    • Ctrl+z - в DOS и Windows;
    или набрать на клавиатуре:
    >>> import sys
    Листинг 1.4.
    >>> sys.exit()
    Листинг 1.5.
  4. Комментарии в Питоне обозначаются символом: "#". Всё, что расположено после этого символа, игнорируется до конца строки;
  5. Переменные в Питоне не требуют объявления, и могут первоначально содержать любые данные;
  6. В Питоне строки могут заключаться как в двойные, так и в одинарные кавычки. Если строка слишком длинная, то можно уместить в нескольких строках путём указания в конце символа "\" ;
  7. Для многократного использования функций в интерпретаторе у питона существуют модули. Модули Питона имеют расширение "*.py", и могут содержать только текст;
  8. Функции внутри модуля начинаются со слова def, после которого идут имя функции и её формальные параметры. Далее идёт блок с телом функции;
  9. Для вызова функции из модуля необходимо сделать следующие шаги:
    • импортировать модуль командой "import": ">>> import "имя модуля" ;
    • вызвать нужную функцию с синтаксисом:
      >>> "имя модуля"."имя функции"("фактические параметры");
      Листинг 1.6.
  10. Модули ни в коем случае не должны иметь одинаковые имена;
  11. Вместо открывающейся скобки блока операторов Питон использует окончание после команды: ":". Блоки операторов выделяются отступом. Окончание блока определяется отсутствием соответствующего отступа у следующего за блоком оператора;
  12. Символ "=" используется в качестве оператора присвоения значений переменным.

Это основные положения, необходимые для понимания программ на Питоне. Далее в текстах лекций будут приведены примеры модулей на Питоне. Здесь же мы рассмотрим простую программу.

Пример 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

  1. Язык Prolog является декларативным логическим языком программирования, команды которого выполняются либо в оболочке языка, либо компилируются в приложение командной строки [19];
  2. Для входа в оболочку программы Пролог необходимо в командной строке набрать команду: "> prolog". Для выхода из оболочки необходимо нажать сочетание клавиш "Alt+X". Оболочка работает в "псевдографическом режиме" (когда все графические элементы рисуются средствами текстового вывода);
  3. Исходный текст программы на языке Пролог расположен в файле с расширением "*.pro", и может содержать только текст;
  4. Комментарии на языке Пролог обозначаются скобками: "/* ... */" ;
  5. Любая программа на языке Пролог разбита на следующие секции: "global domains", "domains", "global predicates", "predicates", "databases", "clauses" и "goal" [51];
  6. В секции "domains" происходит объявление переменных указанного типа. Это объявление происходит следующим образом:
    "имя переменной"{,"имя переменной"}+ = "тип"
  7. Типы переменных на языке пролог могут быть следующими:
    • integer - целое число со знаком длиной 2 байта;
    • char - одиночный символ длиной 1 байт;
    • real - действительное число (с плавающей точкой);
    • string - тип данных "строка" (массив символов "char", оканчивающийся нулевым символом). Строки заключаются в двойные кавычки. Пример: "отец" ;
    • symbol - символьный тип данных, уникальный для языка Пролог. Он представляет собой последовательность литер в нижнем регистре. Значение этого типа не заключается в кавычки и не может изменяться. Пример: отец ;
    • file - символическое имя файла;
  8. Имена переменных всегда начинаются с заглавной, прописной буквы;
  9. Если описан какой-либо домен (состоящий из переменных), то для указания списка из таких объектов надо указать имя домена со знаком "*", например:
    domains
    Листинг 1.7.
    object = integer
    Листинг 1.8.
    object_list = object*
    Листинг 1.9.
  10. В секции "predicates" представлены объявления предикатов. Предикатом может быть факт, правило, а также имя функции на императивных языках. В данной секции предикаты объявляются, но не определяются. Новый предикат начинается с новой строки. Пример:
    predicates
    Листинг 1.10.
    predicate1( object, object )
    Листинг 1.11.
    predicate2(object, object_list )
    Листинг 1.12.
  11. Секция "databases" похожа на секцию "predicates", однако содержащиеся в ней предикаты могут создаваться и удаляться динамически, в процессе исполнения программы. Предикаты в секции "databases" могут быть только фактами. Базу данных можно сохранять в файл и загружать в оперативную память из файла;
  12. После описаний выражений в секциях "domains", "global domains", "predicates", "global predicates" и "databases" знак точка (или вообще какой-либо другой знак) в конце выражения не ставится. Выражения в секциях "clauses" и "goal" всегда оканчиваются точкой.
  13. В секции "clauses" (кляузы) записываются назначения фактов и определяются правила для предикатов, описанных в секциях "predicates" и "databases" ;
  14. Предикаты, присутствующие в правилах секции "кляузы" и в секции "goal" (цель), разделяются друг от друга запятыми, и могут располагаться в несколько строк;
  15. Левая часть правила отделяется от её правой части либо символом "if", либо сочетанием знаков ":-". Заканчиваться правило должно знаком ".", например:
    clauses
      grandfather( X, Y ) :- father( X, Z ), father (Z, Y).
    Листинг 1.13.
  16. В указанном выше примере переменную Z называют "связанной", а переменные X и Y - "свободными" переменными;
  17. Секция "цель" в программе на Turbo Prolog может быть только одна;
  18. В секции "цель" должны через запятую быть записаны предикаты в том порядке, в котором они вызываются на исполнение. Например:
    goal
    Листинг 1.14.
    write( "Первая строка" ), nl,
    Листинг 1.15.
    write( "Вторая строка" ).
    Листинг 1.16.
  19. Предикаты в прологе могут завершаться успешно (когда все действия, посылки и условия истины и правильны), и неудачно (в противном случае). Если хотя бы один предикат в правиле завершился неудачно, неудачей завершится и всё правило;
  20. Отличительной особенностью Пролога является широкое использование им рекурсии - предиката, встречающегося и в левой, и в правой части правил. Благодаря рекурсии система на Прологе может найти не одно, а несколько решений, удовлетворяющих заданным правилам и фактам. Количество найденных решений отображается в конце вывода результатов, например: "2 Solution". В случае отсутствия решения у задачи (например, цель завершилась неудачно) выдаётся сообщение: "No Solution" ;
  21. Чтобы рекурсия не была бесконечной, правила на языке Пролог записываются следующим способом:
    • Вначале записывают условия, завершающие рекурсию;
    • Потом записываются правила, начинающие или продолжающие рекурсию. Например:
    clauses
    Листинг 1.17.
    /* Вычисление факториала целого числа */
      factorial( 0, 1 ).
    Листинг 1.18.
    factorial( N, M ) :- M = N * M1, N1 = N - 1, factorial( N1, M1 ).
    Листинг 1.19.
  22. Символ "=" используется и как оператор присвоения значений переменным, и как оператор сравнения (эквивалентности) численных и символьных данных.

Это основные сведения, необходимые для программирования на языке 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( _ ).
Лекция 1: 12345678 || Лекция 2 >