Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Упростить выражение, упростить арифметическое выражение 
:(
    Опции темы
integral
Дата 11.11.2006, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.7.2006
Где: Dnipropetrovs' ;k, Ukraine

Репутация: нет
Всего: нет



Я вообще новичок в ФП, поэтому не знаю на сколько это реально: Нада написать ф-цию или их набор, которые упрощают алгебраическое выражение одной переменой записаное в польской нотации. Т. е. упрощать нужно что-то типа (+ (+ x 1) (- x 1)) получится (* 2 x), ну или что-то подобное. Хорошо-бы примерчик кода


--------------------
import my.opinion.*;
жж
PM ICQ   Вверх
Lisp2D
Дата 12.11.2006, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 8.6.2006

Репутация: нет
Всего: нет



Данная задача попахивает искуственным интеллектом, точного алгоритма нет.
Можно просто попробовать различные методы практические из жизни.

- Учиться программировать нужно от более простых задач.

Это сообщение отредактировал(а) Lisp2D - 12.11.2006, 23:49
PM MAIL   Вверх
adejneka
Дата 13.11.2006, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 105
Регистрация: 8.7.2005
Где: Москва, Россия

Репутация: 9
Всего: 11



Сначала стоит определиться с тем, что такое "алгебраическое выражение". Например, можно считать, что в нем используются операции сложения, вычитания, умножения и деления. Тогда упрощением можно попробовать считать приведение к форме отношения двух многочленов. Соответственно, нужно определить четыре операции над такими выражениями. Многочлены можно представить либо как список коэффициентов при последовательных степенях X, либо как список пар (степень коэф), дроби - как пары взаимно простых многочленов. Дальше определяете алгебраические операции над дробями и пишете рекурсивный вычислитель:
Код

(defun ratio-eval (exp)
  (if (atom exp)
      (encode-ratio exp)
      (destructuring-bind (oper arg1 arg2) exp
        (let ((rarg1 (ratio-eval arg1))
              (rarg2 (ratio-eval arg2)))
          (ecase oper
            (+ (ratio+ rarg1 rarg2))
            (- (ratio- rarg1 rarg2))
            (* (ratio* rarg1 rarg2))
            (/ (ratio/ rarg1 rarg2)))))))

После этого, осталось только перевести результат в красивый вид.
PM MAIL   Вверх
Void
Дата 13.11.2006, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: нет
Всего: 173



Помимо книг по компьютерной алгебре (например, на русском языке доступен одноимённый сборник под редакцией Бухбергера), возможно, стоит заглянуть в исходники Maxima — CAS, написанной большей частью на Лиспе.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
integral
Дата 14.11.2006, 22:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 278
Регистрация: 3.7.2006
Где: Dnipropetrovs' ;k, Ukraine

Репутация: нет
Всего: нет



Ага, ясна, щас гляну. 


--------------------
import my.opinion.*;
жж
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0672 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.