Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Краткие теоретические сведения. Написание функций пользователя на Лиспе




Написание функций пользователя на Лиспе

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

Цель работы: изучение правил создания и вызова пользовательских функций на Лиспе.

Определение функций

Функцию можно определить самим и использовать как встроенную. Для определения функции необходимо:

1) дать имя функции;

2) определить параметры функции;

3) определить действия, выполняемые функцией.

Для задания новых функций в Лиспе используется специальная форма defun:

(defun < имя функции > < параметры > < тело функции >)

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

Пример 1. Написать функцию, складывающую сумму двух чисел.

(defun sum (a b) (+ a b))

Ответ интерпретатора: sum

В рассмотренном примере: sum – имя функции, a и b – ее параметры, (+ a b) – тело функции.

Вызов функции sum для параметров 1 и 2 осуществляется следующим образом:

(sum 1 2)

Ответ интерпретатора: 3

Пример 2. Вызвать функцию sum для вычисления суммы чисел x и y.

(setq x 4)

Ответ интерпретатора: 4

(setq y 5)

Ответ интерпретатора: 5

(sum x y)

Ответ интерпретатора: 9

Передача параметров. Глобальные и локальные переменные

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

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

Пример 3.

(defun f (x) (setq x 'new))

Ответ интерпретатора: f

(setq x ‘old)

Ответ интерпретатора: old

x

Ответ интерпретатора: old

(f x)

Ответ интерпретатора: new

Пример 4.

(defun double (num) (* num 2)

Ответ интерпретатора: double

(setq num 5)

Ответ интерпретатора: 5

(double 2)

Ответ интерпретатора: 4

num

Ответ интерпретатора: 5

Свободные переменные

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

Пример 5.

(defun f1 (y) (setq x 3))

Ответ интерпретатора: f1

(f1 5)

Ответ интерпретатора: 3

x

Ответ интерпретатора: 3

Пример выполнения задания

Вычислить зависимость на основе функции . Значение переменной x задать при помощи SET или SETQ.

Программа на Лиспе приняла вид:

(defun cub(a) (* a a a))

Ответ интерпретатора: defun

(setq x 1)

Ответ интерпретатора: 1

(setq y (/ (+ (cub x) (cub (+ x 1))) (cub (+ 1 (* 2 x) (* x x)))))

Ответ интерпретатора: 9/64

y

Ответ интерпретатора: 9/64

Варианты заданий

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

Номер варианта Зависимость Функция
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Пример операции с вещественными числами:

(setq x 0.2)

Ответ интерпретатора: 0.2

Пример операции вычисления синуса:

(sin 1.5)

Ответ интерпретатора: 0.997495

Контрольные вопросы

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

2. Передача параметров в функцию.

3. Свободные переменные.

4. По заданию преподавателя написать функцию и вызвать ее для вычисления требуемого выражения.




Поделиться с друзьями:


Дата добавления: 2015-06-28; Просмотров: 335; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.013 сек.