|
0 / 0 / 0
Регистрация: 17.03.2015
Сообщений: 14
|
|
Преобразование определения одной из функций в определение эквивалентной функции07.05.2015, 08:59. Показов 959. Ответов 5
Метки нет (Все метки)
Есть грамматика некоторого языка
функция ::= имя_функции "(" список_параметров ")" "=>" "{" выражение "}" список_параметров ::= параметр | параметр "," список_параметров выражение ::= терм | условный_оператор условный_оператор ::= условие "?" выражение ":" выражение условие ::= терм ( "<" | "=" | ">" ) терм терм ::= параметр | целое_число Имя функции и название параметра состоят из латинских символов. Обратите внимание, что количество параметров функции и глубина вложения условных операторов не ограничены. На языке, который описывается данной грамматикой, можно определять различные функции. Ваша задача состоит в том, что бы написать на языке Лисп программу, преобразующую определение одной из таких функций (заранее неизвестно, какой) в определение эквивалентной функции на языке Лисп. Результирующая функция для каждого набора аргументов должна выдавать тот же результат, что и исходная функция - в этом смысл эквивалентности. Например, для исходной функции f( x ) => {10} определение эквивалентной функции будем таким: (defun f (x) 10) . Определение исходной функции будет передано в виде списка, для вышеприведённого примера такого: ( f \( x \) => { 10 } ) . Каждая лексема будет представлять отдельный элемент списка, так что лексическим анализом заниматься не нужно. Для простоты давайте считать, что определение исходной функции не содержит ошибок и может быть успешно преобразовано в описание Лисп-функции. Примеры входных и выходных данных >>> (tt '( func \( x \, y \) => { x > y ? -1 \: 1 } ) ) ; "func(x, y) => { x>y ? -1 : 1 }" ( defun func ( x y ) ( if ( > x y ) -1 1 ) ) >>> ( tt '( max \( x \, y \, z \) => { x > y ? x > z ? x \: z \: y > z ? y \: z } ) ); "max( x, y, z ) => { x > y ? x > z ? x : z : y > z ? y : z }" ( defun max (x y z) ( if (> x y) (if ( > x z ) x z) ( if (> y z) y z) ))
0
|
|
| 07.05.2015, 08:59 | |
|
Ответы с готовыми решениями:
5
Исследовать область определения функции и построить график функций Исследовать область определения функции и построить график функций
|
|
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
|
|
| 07.05.2015, 13:36 | |
|
Hellner, что Вам непонятно? Никаких попыток решения не видно.
2
|
|
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|||||||||||
| 07.05.2015, 16:04 | |||||||||||
Сообщение было отмечено Памирыч как решение
Решение
Hellner, о, курсач что-ли?
Я бы взял yacc и красиво написал. Хотя можно и руками нисходящий парсер написать, благо грамматика тривиальная. Добавлено через 3 минуты Вот компилятор этого Blub-а. cl-ppcre и cl-yacc. Правда лексер велосипедный, но большего для этой задачи и не требуется.
Такой вот eDSL получился.
4
|
|||||||||||
|
505 / 511 / 42
Регистрация: 12.12.2013
Сообщений: 484
|
||||||
| 07.05.2015, 21:30 | ||||||
Сообщение было отмечено Памирыч как решение
Решение
Решил тоже попробовать набросать решение для себя, но т.к. в парсерах я полный 0 и даже не знаю с чего начать, то взял библиотеку instaparse для этого дела. Удивительно, но каким-то чудом это даже вроде работает
![]() Кликните здесь для просмотра всего текста
5
|
||||||
|
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|
| 07.05.2015, 23:59 | |
|
1
|
|
| 07.05.2015, 23:59 | |
|
Помогаю со студенческими работами здесь
6
Исследовать область определения функции и построить график функций: Найти область определения функции одной переменной Вызов функции до ее определения или область видимости функций в FireFox
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|