Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2015, 21:02   #1
KirilkaPl
Новичок
Джуниор
 
Регистрация: 12.05.2015
Сообщений: 2
Восклицание Очень нужна помощь!

Есть грамматика некоторого языка

функция ::= имя_функции "(" список_параметров ")" "=>" "{" выражение "}"
список_параметров ::= параметр | параметр "," список_параметров
выражение ::= терм | условный_оператор
условный_оператор ::= условие "?" выражение ":" выражение
условие ::= терм ( "<" | "=" | ">" ) терм
терм ::= параметр | целое_число

Имя функции и название параметра состоят из латинских символов.
Обратите внимание, что количество параметров функции и глубина вложения условных операторов не ограничены.

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

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

Например, для исходной функции 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) ))

Помогите пожалуйста если не сложно! Я новичок.
KirilkaPl вне форума Ответить с цитированием
Старый 12.05.2015, 21:11   #2
KirilkaPl
Новичок
Джуниор
 
Регистрация: 12.05.2015
Сообщений: 2
По умолчанию

забыл добавить язык программирования - LISP !
KirilkaPl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Очень нужна помощь! Нужно найти ошибку в очень простой программе. Lex55555777 Помощь студентам 3 07.12.2008 20:32
Нужна помощь в Паскале. Очень-очень срочно. !!! Помощь студентам 2 09.02.2007 15:12