В.Н. Пильщиков - Язык Плэнер, страница 4
Описание файла
DJVU-файл из архива "В.Н. Пильщиков - Язык Плэнер", который расположен в категории "". Всё это находится в предмете "искусственный интеллект" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр DJVU-файла онлайн
Распознанный текст из DJVU-файла, 4 - страница
Значением первого из них должно быть число (которое мы обозначаем )У), а аначением второго— список (Ь). Любые другие аиачения аргументов недопустимы и ведут к ошибке. Гь Как указано выше, аначеииями аргументов, обозначенных символом' и, могут быть как целые, так и вещественные числа. Однако иногда значение такого аргумента по смыслу обязано быть целым числом. Напрнмер, указанная выше функция ЕЬЕМ выделяет У-й элемент иэ описка Ь; ясно, что число У должно быть целым. В подобкых ситуациях, если в результате вычипйения аргумента получилось все же вещественное число, то оно автоматически округляется до ближайшего целого числае), которое уже и используется функцией.
Так, при вычисленви (ВЬЕМ 2.6 (А В СЦ число 2.6 будет преобразовано в целое 3, поэтому иэ списка (А В С) выделяется третий элемент, В дальнейшем подобные преобразования будут подрааумеваться неявно. ' 5. При обращении к некоторым встроенным функциям можно задавать равное количество аргументов: какие-то ив аргументов можно опускать.
Обозначения таких факультативных аргументов мы будем снабжать вопросительным знаком. Например, запись [Р в П П) означает, что допустимо любое из следующих обращений: (Р в), (Р и ~), (Р п )), (Р в э ()ээ). Порядок присутствующих аргументов должен соответствовать порядку, укававиому в списании функции, в связи с чем обрицение (Р в ( ~) недопустимо. В тех же случаях, когда при обра1цении к функции можно задавать любое' количество однотипных аргументов, но не менее р, мы будем испольаовать запись вида (Р е~ ез ... еь), й ) р. э) Под «округлением числа э до ближайшего целогоэ понимается ваятие целой части числа з + 0.5.
ээ) Отметим, что в пленере нет встроенных функций типа (Р в7 ву), у которых отсутствие фаиультативных аргументов вызывало бы аатрудиевие в определении того, какие из аргументов присутствуют, а какие — нет. э8 1.4. Операции пад спискамы Списки являются наиболее важным типом выражений явыка, к первыми будут рассмотрены встроенные функции, определяю- щие основные операции над списками. К таким операциям отно- сятся: выделение отдельных частей списка, удаление алемеитов иа списка, построение новых списков. Функция Е1ЕМ: [ЕКЕМ л 1], ЯЮВК, Значением данной функции является (У)-й елемент списка Х, отсчитанный от начала списка, если )у ) О, или от конца списка, если У ( О.
Если число У равно кулю или по абсолютной величине больше длины списка Ь, то значение функции не определенб Примеры: [ЕЕЕМ 2 (А В С П)] -~. В [ЕЕЕМ вЂ” 1 (А В С Р)] — ~ 0 [ЕЕЕМ 5 (А В С О)] — ошибка [кккм [кккм т ( — 3 — 2)] [ОПОТЕ ((А) (В) -(С) (Р) )]] -~ (В) Поскольку функция ЕьЕМ относится к классу БПВК, то во всех этих примерах прежде всего. вычисляются аргументы.
Но еслк в первых трех примерах таких вычислений фактически иет, так как аргументы совпадают со своими значениями, то в последнем примере аргументы действительно вычисляются. Вычисление в этом примере происходит так: сначала вычисляется первый аргумент: [ЕЕЕМ 1 ( — 3 — 2)] -~- — 3 (]ПОТЕ А (В С В ) -~ ( А В С Р ) далее вычисляется второи аргумент [ <() )()()] ()()()() и лишь затем начинает работать собственно функция ЕВШЕМ, которан иа списка <(А) (В) (С) (Р)> выбирает третий элемент от конца, т.
е. влемент (В), и выдает его в качестве своего аначения. Отметим, что для планера характерна вложенность. одних обращений к функциям в другие обращения. И поскольку до вычислення собственно функции должны быть вычислены ее аргументы, то в первую очередь всегда вычисляются внутренние обращения и лишь аатем вычисляются внешние обращения. Функция ЕКЕМ вЂ” одна ив наиболее часто испольауемых функций явыка. При этом комер выделяемого элемента обычно либо известен вараиее, либо является вначением какой-то переменной или константы.
Для сокращения ааписи в подобных ситуациях раврешается применять упрощенную форму обращения к функции ЕВШЕМ: если первый аргумент является числом, илк;переменной, 2е 19 мли:-переменной, то при обращении к функции можно не указывать ее нмя. Например, если значением переменной 1 является число 2, а значением константы К вЂ” число — 3, то имеем [.1 (1 2, 3 4 5)] — 2 [1 [:К ((А В) С Р)]] -~- А При любом другом первом аргументе использовать сокращенный внд обращения к функции ВЬЕМ нельая.
Например, аапись [[1 .Ь] (А В С)] ошибочна. Функция ЕЬЕМ выделяет элементы верхнего уровня списка. Чтобы выделить подвыражения с более глубоких уровней, надо применить композицию функций ЕЬЕМ. Однако более удобной в таком случае является Функция 1ЕРЕХз [15)РЕХ 1 в, лз ... вь], ЯПВК, й ) Ь Действие этой функции эквивалентно вычислению выражения [ЕЬЕМ вз [... [Е1ЕМ вз [ЕЬЕМ вз 1]] ...]] Следовательно, функция ПЧРЕХ выделяет из списка 5 его [Л~]-й элемент (отсчитанный от начала или конца списка в зависимости .от знака числа Уг), ватам из атого элемента, который должен быть списком, выделяет ]11з]-й элемент, иа которого выделяет ]Уз]-й элемент и т.
д. Например: [111РЕХ ((1 2 3) (4 5) (6)) 2 — 1] -ч- 5 [1г(РЕХ (АВ ВА) 1 2] — ошибка Во втором из этих примеров предпринята попытка выделить элемент не из агиска, а ив атома, что и привело к ошибке. Функция ВЕБТз [КЕБТ и 1], Я()ВК. Значением этой функции является список, полученный из списка Ь отбрасыванием )у первых элементов, если )у ) О, или ]Ж[ последних элементов, если У ( О. Если число У по абсолютной величине превосходит длину списка Ь, то аначенне функции не определено. Примеры: [КЕЯТ 1 (А В С Р)] -~- (В С Р) [КЕЯТ вЂ” 2 [ОПОТЕ <А В С Р)1! -~ (А В) [КЕЯТ 0 (А В)] -~ (А В) Читатели, знакомые с языком лисп, легко догадаются, что лисповскому выражению (САК Х) соответствует плэнерскан форма [1 .Х], а (СРК Х) — форма [КЕЯТ 1 .Х]. Плэнерские функции Е1.ЕМ и КЕЯТ обобщают действия лисповских функций САК и СРК, онн позволяют выделять или отбрасывать из списка любые элементы с любого его конца.
Фушщия НКАП: [НЕАР и 1], БУВВ. 20 Данная функция противоположна функции ВЕБТ: те элементы списка, которые функция ВЕЯТ отбрасывает„функция НЕАВ как рав оставляет. Точнее, значением функции НЕАП является список, составленный из )у первых элементов списка Ь, если у ) О, или иэ ]У( последних элементов, если У( О. Значение функции не определено, если ]Ж( больше длины списка Ь.
Примеры: [НЕАВ 1 (А В С П)] -~- (А) [НЕАП вЂ” 2 [О()ОТЕ (А В С' ПУ]] -~ ' (С ВУ [НЕАВ О (А В)] -~ () Отметим, что функция НЕАО, как и функция ВЕБТ, сохраняет скобки исходного списка. С помощью этих функций можно выделить нз списка любую группу соседних элементов. Например, выделить с третьего по пятый элементы списка, являющегося значением переменной Х,можно вычислением выражения [ВЕБТ 2 [НЕАВ 5 .Х]] Действительно, сначала вычисляется выражение [НЕАВ б .Х], которое в качестве своего аначения выдает список иа пяти первых влементов списка Х, а затем из этого списка функция КЕБТ отбрасывает два первых влемента. В реаультате получается список, составленный из третьего, четвертого и пятого элементов исходио. го списка. (Отметим, что фразу «отбросить элементы спискаэ ие следует понимать как иаменеиие списка.
Функции ВЕБТ и НЕАВ яе портят исходный список, а создают новый список.) Все описанные выше функции выделяли фрагменты списков. Рассмотрим теперь обратиую операцию — построение новых списков из имеющихся частей. В отличие от языка лисп, где для этого используется десколько встроенных функций (СОНЯ, ЫБТ, АРРЕНО), в планере построение любых новых функций осуществляется с помощью единственной, ио более мощной функции РОЕМ. Функции РОЕМ: [РОЕМ [ет е ... еа]~, РБОВВ,/с~О. Здесь под фигурными скобками понимаются любые плэиерские скобки (круглые, квадратные или угловые), а под з; — любые формы, простые или сегментные.
Функция РОЕМ по очереди (сле- Р на направо) вычисляет формы ее и из нх значений строит список с теми же скобками, что и у исходного списка. Полученный таким обрааом список объявляется значением функции. Ф Р Если через Е~ .обозначить значение формы иы то действие функции РОЕМ можно изобразить так: [РОЕМ [е е ... еь]] -э [Е Е ... Ка[ Пусть, например, значением переменной Х является число 1, а вначением переменной У вЂ” спнсок (А В С). Тогда [РОЕМ [КЕБТ .Х «')) -«- [КЕЯТ 1 (А В С)] [РОЕМ (5 !.г' .У)) — ~ (5 А В С (А В С)) Отметим, что в первом на этих примеров эначением функции РОВМ является именно список [КЕЯТ 1 (А В С)), а не аначеиие этого списка, рассматриваемого как обращение к функции КЕЯТ.
Во втором примере влемент !.У исходного списка «поставляетз в список-реаультат ораву три элемента А, В и С, так как аначением 'сегментного обращения к переменной У является последовательность из этих трех влементов. В то же время выражение г' имеет своим значением список (А В С), который и попадает в таком виде в список-результат. Функцию РОЕМ можно применять и для построения списков с круглыми скобками, например: [РОВМ ([2 У) .Х)) -«- (В 1) однако в этом случае обращение к функции РОЕМ излишне, поскольку, как было указано в т 1.2, верно следующее: [е е ...