![]() |
|
|
![]()
|
|
| luser78 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 12.1.2010 Репутация: нет Всего: нет |
Помогите решить, не знаю с чего и начать, пожалуйста.
Опpеделите на языке ЛИСП и проверьте работу функции, пpеобpазующей инфиксную запись опеpаций выpажения в пpединфиксную и возвpащающую значение выpажения. Hапpимеp, для списка ((-8 + 10) * (1 + 2) функция должна вернуть 6. Указание: Для вычисления значения выражения используйте функцию EVAL. |
|||
|
||||
| VH_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 10 Всего: 11 |
|
|||
|
||||
| VH_ |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 182 Регистрация: 31.10.2006 Репутация: 10 Всего: 11 |
По просьбам радиослушателей предоставляются пояснения.
Прежде всего, выражения считаются составленными правильно, то есть по правилам записи математических выражений, но при этом приоритет операций не учитывается и должен явно обозначаться расстановкой скобок. Выражение с инфиксной записью операций могут быть следующих разновидностей: 1) число 2) унарная операция вида (операция число) 3) последовательность операций вида (число1 операция1 число2 операция2 число3 операция3 число4 ...) при этом на месте любого числа может быть разновидность типа 2) или 3) Соответственно, обработка выражения expr в функции (F) происходит по нескольким вариантам: 1. Если выражение представляет собой пустой список, то возвращается nil. 2. Если выражение представляет собой атом (например, число), то возвращается его значение. 3. Если выражение представляет собой список с одним элементом, то возвращается вычисленное <с помощью той же функции (F)> значение выражения, представленного этим элементом (Примечание: это для случая, когда находятся любители заключать выражения в лишние скобки) 4. Если в выражении более одного элемента, для его вычисления вызывается безымянная функция с тремя параметрами. С первым параметром e1 связывается первый элемент выражения expr, со вторым e2 - второй элемент, с параметром tail - «остаток» выражения, то есть список из всех остальных элементов выражения. 4.1. Если «остаток» выражения tail пуст - выражение содержит унарную операцию и вычисляется применением операции e1 к значению e2, которое также предварительно подлежит вычислению <с помощью той же функции (F)>. 4.2. Если в «остатке» tail есть элементы - выражение содержит по крайней мере три элемента и операция связана с параметром e2. Эта операция применяется к <предварительно вычисленным с помощью той же функции (F)> значениям элементов e1 и первого элемента «остатка» tail, вычисленная величина присоединяется спереди к укороченному «остатку» и результат снова "направляется на вычисление" в функцию (F). Получается как в школьной математике - если действий несколько, то они выполняются по одному слева, вместо двух чисел (или выражений в скобках) и знака операции в исходное выражение подставляется результат, и вычисления продолжаются. Правда, функции (eval) здесь места как-то не находится. С учетом примечания в п.3 определение функции изменяется:
|
|||
|
||||
| _sg |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 119 Регистрация: 16.5.2007 Репутация: 2 Всего: 2 |
как вариант:
--------------------
vk.com/ansicommonlisp |
|||
|
||||
![]()
|
| Правила форума LISP | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | LISP | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |