14731

Определение функций. Функции ввода-вывода. Вычисления, изменяющие структуру

Лабораторная работа

Информатика, кибернетика и программирование

Лабораторная работа №2. Тема: Определение функций. Функции вводавывода. Вычисления изменяющие структуру. Цель: Получить навыки в написании функций. Изучить функции вводавывода. Функции определяемые пользователем. Функция ввода. Функции вывода. Вы...

Русский

2013-06-09

53 KB

6 чел.

Лабораторная работа №2.

Тема: Определение функций. Функции ввода-вывода. Вычисления, изменяющие структуру.

Цель: Получить навыки в написании функций. Изучить функции ввода-вывода.

  1.  Функции, определяемые пользователем.
  2.  Функция ввода.
  3.  Функции вывода.
  4.  Вычисления, изменяющие структуру.
  5.  Задание к лабораторной работе.
  6.  Вопросы.

  1.  Функции, определяемые пользователем.

Определение функций и их вычисление в Лиспе основано на лямбда-исчислении Черча.

В Лиспе лямбда-выражение имеет вид

(LAMBDA (x1 x2 ... xn) fn)

Символ LAMBDA означает, что мы имеем дело с определением функции. Символы xi являются формальными параметрами определения, которые имеют аргументы в описывающем вычисления теле функции fn. Входящий в состав формы список, образованный из параметров, называют лямбда-списком.

Телом функции является произвольная форма, значение которой может вычислить интерпретатор Лиспа.

_(lambda (x y) (+ x y))

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

Лямбда-выражение - это определение вычислений и параметров функции в чистом виде без фактических параметров, или аргументов. Для того, чтобы  применить такую функцию к некоторым аргументам, нужно в вызове функции поставить лямбда-определение на место имени функции:

(лямбда-выражение а1 а2 ... аn)

Здесь ai - формы, задающие фактические параметры, которые вычисляются как обычно.

_((lambda (x y) (+ x y)) 1 2) 3

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

_((lambda (x)                                                    ;Тело лямбда-вызова -

               ((lambda (y) (list x y)) ‘b)) ‘a) (a b)          лямбда-вызов.

Записывать вызовы функций полностью с помощью лямбда-вызовов не разумно, поскольку очень скоро выражения в вызове пришлось бы повторять, хотя разные вызовы одной функции отличаются лишь в части фактических параметров. Проблема разрешима путем именования лямбда-выражений и использования в вызове лишь имени.

Дать имя и определить новую функцию можно с помощью функции DEFUN:

(DEFUN имя лямбда-список тело)

DEFUN соединяет символ с лямбда-выражением, и символ начинает представлять определенные этим лямбда-выражением вычисления. Значением этой формы является имя новой функции.

После именования функции  ее вызов осуществляется по имени и параметрам.

_(defun list1 (x  y)

            (cons x (cons y nil))) list1

_(list1 ‘cn) (c n)

(eval <выражение>)

Функция возвращает результат выражения <выражение>, где <выражение> - любое выражение языка LISP. Например, дано:

(setq a 123)

(setq b 'a)

(eval 4.0) 4.000000

(eval (abs -10)) 10

(eval a) 123

(eval b) 123

2. Функция ввода.

Лисповская функция чтения READ обрабатывает выражение целиком. Вызов функции осуществляется в виде

_(READ)

(Вводимое выражение)              ;выражение пользователя

(ВВОДИМОЕ ВЫРАЖЕНИЕ)      ;значение функции READ

...

Функция не показывает, что она ждет ввода выражения. Она лишь читает выражение и возвращает в качестве значения само это выражение, после чего вычисления продолжаются.

Если прочитанное выражение необходимо сохранить для дальнейшего использования, то вызов READ должен быть аргументом какой-нибудь формы, например присваивания (SETQ), которая свяжет полученное выражение:

_(SETQ input (READ))

(+ 1 2)                                                ;введенное выражение

(+ 1 2)                                                ;значение

_input  (+1 2)

3. Функции вывода.

Для вывода выражений используют несколько функций: PRINT, PRIN1, PRINC.

Функция PRINT.

Это функция с одним аргументом, которая сначала вычисляет значение аргумента, а затем выводит это значение. Функция PRINT перед выводом аргумента переходит на новую строку, а после него выводит пробел. Таким образом, значение выводится всегда на новую строку.

_(PRINT (+ 1 2))

3                                                         ;вывод

3                                                         ;значение

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

Функции PRIN1 и PRINC.

Эти функции работают так же, как PRINT, но не переходят на новую строку и не выводят пробел:

(PRIN1 5) 55

(PRINC 4) 44

Обеими функциями можно выводить кроме атомов и списков и другие типы данных которые мы рассмотрим позже:

_(PRIN1 «CHG») «CHG»«CHG»

_(PRINC «tfd»)  tfd«tfd»              ;вывод без кавычек,

                                                       ;результат - значение аргумента                                       

                                                        

С помощью функция PRINC можно получить более приятный вид. Она выводит лисповские объекты в том же виде, как и PRIN1, но преобразует некоторые типы данных в более простую форму.

Функция TERPRI.

Эта функция переводит строку. У функции TERPRI нет аргументов и в качестве значения она возвращает NIL:

_(DEFUN out (x y)

               (PRIN1 x) (PRINC y)

               (TERPRI) (PRINC (LIST ‘x ‘y)) out

_(out 1 2) 12

                    (1 2)

4. Вычисления, изменяющие структуру.

Основными функциями, изменяющими физическую структуру списков, являются RPLACA и RPLACD, которые уничтожают прежние и записывают новые значения в поля CAR и CDR списочной ячейки:

(RPLACA ячейка значение-поля)                 ;поле CAR 

(RPLACD ячейка значение-поля)                 ;поле CDR

Первым аргументом является указатель на списочную ячейку, вторым - записываемое в нее новое значение поля CAR или CDR. Обе функции возвращают в качестве результата указатель на измененную списочную ячейку:

_(SETQ a ‘(b c d)) (b c d)

_(RPLACA a ‘d) (d c d)

_(RPLACD a ‘(o n m)) (d o n m)

_a  (d o n m)

5. Задания к лабораторной работе.

1. Определите с помощью лямбда-выражения функцию, вычисляющую:

  1.  +y-x*y;
  2.  x*x+y*y;
  3.  x*y/(x+y)-5*y;

2. Определите функции (NULL x), (CADDR x) и (LIST x1 x2 x3) с помощью базовых функций. (Используйте имена NULL1, CADDR1 и LIST1, чтобы не переопределять одноименные встроенные функции системы.

3. Используя композицию, напишите функции, которые осуществляют обращение списка из 2, 3, ... , n элементов.

4. Используя композицию описанных выше предикатов и логических связок, постройте функцию, которая проверяет, является ли ее аргумент:

a) списком из 2, 3, ... элементов;

b)списком из 2, 3, ... атомов;

5. Напишите функцию:

  1.  такую, что P(n) для произвольного целого n есть список из трех элементов, а именно: квадрата, куба и четвертой степени числа n;

для двух аргументов значением которой является список из двух элементов (разности и остатка от деления);

  1.  такую, что A(n) есть список (The answer is n). Так, значением (A 12) будет (The answer is 12);
  2.  семи аргументов, значением которой служит сумма всех семи аргументов.

6. Для каждого из следующих условий определить функцию одного аргумента L , которая имеет значение T, если условие удовлетворяется, и NIL в противном случае:

  1.  n-ый элемент L  есть 12;
  2.  n-ый элемент L есть атом;
  3.  L имеет не более n элементов (атомов или подсписков).

7. Напишите функцию, которая вводит фразу на естественном языке и преобразует ее в список.

8. Напишите функцию, которая спрашивает у пользователя ФИО студента из группы (список группы составлен раньше) и выдает следующие данные о нем:

  1.  год рождения;
  2.  средний бал;
  3.  родителей;
  4.  списки свойств, присвоенные ему раньше.    

9. Напишите функцию:

  1.  от одного аргумента (ФИО любого студента), замещающую в списке с данными о нем (написанном раньше) подсписки со средними балами на списки свойств;
  2.  вычисляющую средние балы, беря данные из списков свойств.

10. Каковы будут значения выражений (RPLACA x x) и (RPLACD x x), если:

  1.  x = ’(a b);
  2.  x = ’(a);

11. Вычислите значение следующих выражений:

  1.  (RPLACD ‘(a) ‘b);
  2.  (RPLACA ‘(a) ‘b);
  3.  (RPLACD (CDDR ‘(a b x)) ‘c);
  4.  (RPLACD ‘(nil) nil)

6. Вопросы.

1. Что такое лямбда-выражение?

2. Для чего используется функция DEFUN?

3. Чем различаются основные функции вывода?

4. Что возвращает в качестве значения функция READ?

5. Особенности функций, изменяющих структуру?


 

А также другие работы, которые могут Вас заинтересовать

32150. Базовые элементы построения стратегии по Портеру 24.5 KB
  Портер 1985 выделяет три ключевые общие стратегии: лидерство по затратам ндивидуализация и фокусирование. Лидерство по затратам. Жесткий контроль над затратами и накладными расходами сведение до минимума расходов в таких областях как исследования и разработки реклама и т. Стратегия лидерства по затратам часто создает прочную основу для конкуренции в отрасли.
32151. Стратегический переход от экономики производства к экономике знаний 28 KB
  Превращение науки в непосредственную производительную силу отмеченное в начале 1960х гг. На смену экономики фабричных труб когда преобладало массовое производство пришла экономика основанная на интеллектуальном труде человеческом капитале. Появление всемирной электронной рулетки когда реальные инвестиции подменяются спекуляцией когда человеческие ресурсы отвлекаются на бесплодные биржевые игры не может позитивно влиять на развитие мировой экономики. Касаясь вопросов связанных с...
32152. СУ в системе менеджмента 100.5 KB
  Конечная цель системы менеджмента выполнение миссии организации. Миссия это наиболее общая цель организации как конкурентоспособной структуры представленная в наиболее общей форме и четко выражающая основную причину существования организации. Стратегия корпорации это деловая концепция организации на заданную стратегическую перспективу представленная в виде долгосрочной программы конкретных действий которые способны реализовать данную концепцию и обеспечить организации конкурентные преимущества в достижении целей.
32153. Конкурентные преимущества. Базовые конкурентные стратегии 32.5 KB
  Конкурентные преимущества. Базовые конкурентные стратегии Конкретную рыночную позицию организации определяет ее конкурентные преимущества. Портеру конкурентные преимущества делятся на два основных вида: дифференциация продуктовтоваров и более низкие издержки на создание и реализацию товаров. Организации добиваются конкурентного преимущества находя новые способы конкуренции в своей отрасли и выходя с ними на рынок что можно назвать одним словом нововведение.
32154. Цепочка стоимости и система стоимости 24 KB
  Цепочка стоимости и система стоимости Виды деятельности при конкуренции в какойлибо конкретной отрасли можно разделить на категории. Они объединены в так называемую цепочку стоимости. Все виды деятельности входящие в цепочку стоимости вносят свой вклад в конечную потребительскую стоимость продуктатовара. Выбранная конкурентная стратегия определяет способ которым организация выполняет отдельные виды своей деятельности а также всю цепочку стоимости в целом.
32155. Переход от стратегического планирования к стратегическому менеджменту 36.5 KB
  Переход от стратегического планирования к стратегическому менеджменту Предшественником стратегического планирования была система долгосрочного планирования longrnge plnning. В арсенал новых методов используемых стратегическим планированием входят: модели анализа инвестиционных портфелей компаний разработка ситуационных планов развития применение сценарного планирования использование систем экспертных оценок применение различных аналитических матриц для исследования альтернатив возможного стратегического развития и т. Некоторые...
32156. Модели стратегического менеджмента 27 KB
  Модели стратегического менеджмента Одно из классических образных представлений о стратегическом мышлении в отличие от других видов мышления сделано К. В соответствии с моделью укрупненными являются следующие три этапа или фазы стратегического цикла организации: 1 стратегический анализ; 2 разработка стратегии стратегический синтезразвитие; 3 реализация стратегии. Отметим что рассматриваемая модель характеризует стратегическое управление организации и как органичную систему. В рамках предлагаемой модели стратегический...
32157. Анализ внешней среды организации. SWOT-анализ и PEST 38 KB
  Анализ внешней среды организации. К особенностям целевого SWOТ анализа при исследовании внешней среды организации относятся следующие. Вовторых анализ сильных и слабых сторон организации на втором этапе желательно увязывать с соответствующими результатами которые были выявлены и зафиксированы на первом этапе. Но и ценность любого тщательно просчитанного оптимального решения если оно появляется слишком поздно становится равной нулю На основании последовательного рассмотрения этих факторов принимаются решения по корректировке целей и...
32158. Анализ внутренней среды организации. SNW-анализ 26.5 KB
  Анализ внутренней среды организации. SNWанализ Исследование внутренней среды организации как части стратегического анализа представляет отдельный блок. Анализ внутренней среды организации осуществляемый во имя ее стратегических целей так же как и стратегический анализ внешней среды должен быть системным и многофакторным. При стратегическом анализе вся внутренняя среда организации и ее отдельные подсистемы и компоненты рассматриваются как стратегический ресурс развития организации.