LINUX.ORG.RU

Common Lisp и деньги


0

2

Ищется либа для вычислений над денежными суммами. Требования:
1. Денежная сумма должна быть представлена типом, с возможностью ввода-вывода через print/read.
2. Должна быть возможность вычислений сразу с округлением.
Можно написать самому, конечно, но интереснее использовать готовое.
Ваши советы.

★★★★★
Ответ на: комментарий от archimag

Это да, это вещи несовместные.

anonymous
()

Многообещающий заголовок.

power
()

Эх, а я уж думал тут лиспо-срач назревает...

Kosyak ★★★★
()

Можно написать самому, конечно, но интереснее использовать готовое.

Почему бы просто не создать класс money, определить метод print-object? Тут же делов на пару строк. Или я чего-то не понимаю :)

power
()
Ответ на: комментарий от Harald

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

anonymous
()
Ответ на: комментарий от anonymous

ну мало ли, вдруг по собственной инициативе, да еще как free software

Harald ★★★★★
()

Не понимаю, в чём проблема?

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

anonymous
()
Ответ на: комментарий от anonymous

да все проще можно, на целых числах с фиксированной точкой ) Так бабло и считается обычно

Harald ★★★★★
()
Ответ на: комментарий от archimag

Совсем не в тему. Решил тут поиграться с примером pastebin на LW под виндой. В ответ на (ql:quickload :restas-colorize) получил такое:

[package restas]......
Error: Reader cannot find package CFFI-SYS.
dave ★★★★★
()

Вычисления, округления, ввод-вывод, денежные суммы... экая дурнопахнущая куча баззвордов! Да всё это ненужно.

Ты не понимаешь, Лисп не предназначен для таких «задач». Он работает по-другому.

anonymous
()
Ответ на: комментарий от anonymous

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

Intuit на лиспобухгалтерии составы денег сделала.

mv ★★★★★
()
Ответ на: комментарий от archimag

Да, и CCL на pastebin дает крякозябры, что на винде, что на линуксе.

dave ★★★★★
()
Ответ на: комментарий от dave

Reader cannot find package CFFI-SYS

Я х.з., quicklisp не использую. restas-colorize непосредственно от CFFI не зависит, только может быть через Hunchentoot или Drakma, надо их проверять.

archimag ★★★
()
Ответ на: комментарий от mv

Intuit на лиспобухгалтерии составы денег сделала.

Так это они не благодаря лишпу, а вопреки. А уж если вспомнить, сколько мегатонн бабла сделано на коболобухгалтерии... уууу!

Кстати, не соизволит ли благородный дон накидать пруфлинков? А то гугль что-то как-то очень подозрительно молчит на эту тему. Забросили совсем направление поисковых технологий, понимаешь. Не иначе, все силы брошены на переписывание QPX на нормальном языке.

anonymous
()

2. Должна быть возможность вычислений сразу с округлением.
округлением

Мне кажется, или здесь что-то не так?

Tark ★★
()
Ответ на: комментарий от anonymous

Так это они не благодаря лишпу, а вопреки.

Ну да, конечно. (with-troll-mode Особенно, если учесть, что 10-15-20 лет назад нормальных языков, кроме CL и Smalltalk не было).

Кстати, не соизволит ли благородный дон накидать пруфлинков?

VP software, сидящий за соседним столом, работавший в Интуите, и получивший свой вагон денег, слишком для меня тяжёлый, чтобы к вам забрасывать.

mv ★★★★★
()
Ответ на: комментарий от mv
(deftype money (&optional exp)
  `(and (satisfies consp) (satisfies is-money)))

(defun is-money (x)
  (and (integerp (car x))
       (integerp (cdr x))))

(typep '(1012 . 2) 'money) => T

(defun get-real-value (x)
  (cl:/ (car x) (expt 10 (cdr x))))

(defun make-money (val exp)
  `(,(round (cl:* val (expt 10 exp))) . ,exp))

(make-money 10.12 2) => (1012 . 2)

(set-macro-character #\$
 (lambda (s disp)
   (declare (ignore disp))
   (let ((*readtable* (copy-readtable)))
     (set-macro-character #\'
              (lambda (foo bar)
                (declare (ignore bar))
                (read foo)))
     `(make-money ,(read s) ,(read s)))))

(equal $10.12'2 '(1012 . 2)) => T

(typep $10.12'2 'money) => T

(defun * (&rest args)
  (reduce
   (lambda (&rest args)
     (when args
       (apply #'make-money
          (case (length args)
        (1
         (destructuring-bind (v1 e1)
             (normalize-value (car args))
           (list v1 e1)))
        (2
         (destructuring-bind ((v1 . e1) (v2 . e2))
             (list (normalize-value (car args))
               (normalize-value (cadr args)))
           (list (cl:* v1 v2) (max e1 e2))))))))
   args))

(defun normalize-value (x)
  (if (typep x 'money)
      (cons (get-real-value x) (cdr x))
      (cons x 0)))


OH SHI~!!! Куча овсянки обрезков ногтей скобчатого говнокода вместо java.math.BigDecimal и java.util.Currency.

anonymous
()
Ответ на: комментарий от mv

Я подозревал, что тут нужно не округление, а выбор куда класть остаток.

Tark ★★
()
Ответ на: комментарий от anonymous

java.math.BigDecimal

Встроено в CL by default.

и java.util.Currency.

Там внутри говнокода ещё больше. И не добавляет в язык синтаксическую конструкцию для представления типа.

mv ★★★★★
()
Ответ на: комментарий от mv

10-15-20 лет назад нормальных языков, кроме CL и Smalltalk не было

Но если они были единственными нормальными языками, то почему на них не писали операционные системы, системы управления базами данных, сервера приложений, почтовые сервера, веб-сервера, сервера обмена мгновенными сообщениями, игры, браузеры, почтовые клиенты, клиенты обмена мгновенными сообщениями, CAD'ы, CASE'ы, CAM'ы, компиляторы, среды разработки, системы обработки аудио, системы обработки графики, системы обработки видео, системы 3D-моделирования и так далее?

VP software, сидящий за соседним столом, работавший в Интуите, и получивший свой вагон денег, слишком для меня тяжёлый, чтобы к вам забрасывать.

Понятно. Так я и думал — пруфов не будет.

anonymous
()
Ответ на: комментарий от anonymous

Но если они были единственными нормальными языками, то почему на них не писали операционные системы, системы управления базами данных, сервера приложений, почтовые сервера, веб-сервера, сервера обмена мгновенными сообщениями, игры, браузеры, почтовые клиенты, клиенты обмена мгновенными сообщениями, CAD'ы, CASE'ы, CAM'ы, компиляторы, среды разработки, системы обработки аудио, системы обработки графики, системы обработки видео, системы 3D-моделирования и так далее?

на них все это и писали :)

psv1967 ★★★★★
()
Ответ на: комментарий от anonymous

Но если они были единственными нормальными языками, то почему на них не писали операционные системы, системы управления базами данных, сервера приложений, почтовые сервера, веб-сервера, сервера обмена мгновенными сообщениями, игры, браузеры, почтовые клиенты, клиенты обмена мгновенными сообщениями, CAD'ы, CASE'ы, CAM'ы, компиляторы, среды разработки, системы обработки аудио, системы обработки графики, системы обработки видео, системы 3D-моделирования и так далее?

Дак, писались же. Этот же товарищ до интуита работал в дженсим, который писал софт управление технологическими процессами предприятий (больших заводов). Просто тот софт и те платформы ушли в небытие, а ваше восприятие сейчас затемнено победившим микрософтом и технологиями, которые они тащат.

Понятно. Так я и думал — пруфов не будет.

Сложно найти ссылки на специфический материал из доинтернетных времён.

mv ★★★★★
()
Ответ на: комментарий от mv

Там внутри говнокода ещё больше.

Просто ты не владеешь Java. Там обоснована каждая строчка, каждый символ.
И да, считать всё непонятное лично тебе «говнокодом» — признак недалёкого ума. И это явно не то, что следует выпячивать напоказ.

И не добавляет в язык синтаксическую конструкцию для представления типа.

Но ведь в ЛИШПе нет синтаксиса!!!1111адинадин (в отличие, кстати, от языков с существующим и по-настоящему расширяемым синтаксисом — например, Scala)
Не соблаговолит ли благородный дон указать, что именно он тут называет «новой синтаксической конструкцией»?

anonymous
()
Ответ на: комментарий от psv1967

на них все это и писали :)

И где оно всё теперь?
(Домашнее задание: понять, почему именно оно там.)

anonymous
()
Ответ на: комментарий от anonymous

И да, считать всё непонятное лично тебе «говнокодом» — признак недалёкого ума. И это явно не то, что следует выпячивать напоказ.

Я говорю с тобой на твоём языке. Ты ввёл практику называния кода программы на незнакомом языке говнокодом, а я всего лишь твоей терминологии придерживаюсь.

Но ведь в ЛИШПе нет синтаксиса!!!1111адинадин

Конечно, гомоиконность, readtable, макросы, наличие полновесного конпелятора в рантайме...

(в отличие, кстати, от языков с существующим и по-настоящему расширяемым синтаксисом — например, Scala)

Там readtable есть?

Не соблаговолит ли благородный дон указать, что именно он тут называет «новой синтаксической конструкцией»?

Конструкция, которую лисп без загруженной библиотеки признает за невалидную.

mv ★★★★★
()
Ответ на: комментарий от mv

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

А мой троюродный дедушка 30 лет назад писал софт для управления полётами грузовой и гражданской авиации на Коболе. А четвероюродный дядя — для военных, на Ada. И что?

Просто тот софт и те платформы ушли в небытие

Присоединяйся к psv1967, он только что получил интересное домашнее задание.

ваше восприятие сейчас затемнено победившим микрософтом и технологиями, которые они тащат

Пожалуйста, не надо проецировать на окружающих свои комплексы, баттхёрты и ночные кошмары. Или это ты применил «тонкий» демагогический приём? «Микрософт победил лишп, Микрософт — плохо, следовательно, лишп — хорошо». Спешу огорчить тебя: твой приём невообразимо толст. Лишп и прочие маргинальные течения в IT были побеждены не какими-то отдельными мальчишами-плохишами, а Историей, Развитием и Прогрессом.

Сложно найти ссылки на специфический материал из доинтернетных времён.

Тогда, может, не стоит столь безапелляционно разбрасываться громкими фразами, подтверждение которым ты не в состоянии привести в принципе?

anonymous
()

все, лиспосрач начался, предрекаю мин. 15 страниц

Harald ★★★★★
()
Ответ на: комментарий от mv

Я говорю с тобой на твоём языке.

Это неверно.

Ты ввёл практику называния кода программы на незнакомом языке говнокодом

Я называю говнокод говнокодом потому, что он — говнокод, а не потому, что он мне непонятен. В отличие от тебя.

Там readtable есть?

Необходимость readtable для расширяемости синтаксиса — розовый сон ограниченных, безнадёжно застрявших в 70-ых лисперов. Добро пожаловать в XXI век.

Конструкция, которую лисп без загруженной библиотеки признает за невалидную.

Какая-такая конструкция? Ты не ходи вокруг да около, а просто пальцем её покажи.

anonymous
()
Ответ на: комментарий от anonymous

IT были побеждены не какими-то отдельными мальчишами-плохишами,
а Историей, Развитием и Прогрессом

НАШИсткая стилистика как бы намекает на соответствующий уровень развития сознания, доставляет.

archimag ★★★
()
Ответ на: комментарий от anonymous

Я называю говнокод говнокодом потому, что он — говнокод, а не потому, что он мне непонятен. В отличие от тебя.

Ну если он тебе понятен, то ответь на этот свой вопрос сам:

Какая-такая конструкция? Ты не ходи вокруг да около, а просто пальцем её покажи.

mv ★★★★★
()
Ответ на: комментарий от archimag

«Если нечего сказать по теме, попытайся всеми средствами очернить оппонента» — это какое у нас по счёту «правило демагога»?

anonymous
()
Ответ на: комментарий от anonymous

«Если нечего сказать по теме, попытайся всеми средствами очернить оппонента» — это какое у нас по счёту «правило демагога»?

У тебя у самого приличная часть списка демагога набирается...

mv ★★★★★
()
Ответ на: комментарий от mv

Ну если он тебе понятен, то ответь на этот свой вопрос сам

Т.е. ты признаёшь, что не в состоянии на него ответить?

anonymous
()
Ответ на: комментарий от anonymous

И где оно всё теперь?
(Домашнее задание: понять, почему именно оно там.)

Исторические аналогии допускаются? Вот, скажем, была Римская цивилизация, с охренительно высоким уровнем развития культуры, технологий, военного дела и т.п. Но так случилось, что мимо бежала ну очень большая толпа варваров и затоптала. Затоптала, вероятно, тоже искренне веря в развитие, прогресс, каких-то своих богов и хрен знает что ещё. И этим варварам потребовалось более 1000 лет на то, что бы осознать величие разрушенной цивилизации.

Как бы примеров в истории цивилизации достаточно таких, когда необразованная толпа уничтожает технологии, культуру и вообще всё, что не способна понять. Так какой вывод предлагается сделать?

archimag ★★★
()
Ответ на: комментарий от anonymous

где лисп машины до уровня которых писюки дотянули ближе к середине 90?

или где емакс который практически повторил их функциональность? ему фактически только запуска в качестве шела не хватает :)

или в автокаде уже перестали писать расширения на лиспе?

не позорь звание анонимуса, ибо очевидно что _любое_ приложение спроектированное и реализованное на лиспе (по крайней мере его устоявшееся ядро) рано или поздно какая то галера с неграми монетизирует. просто для прибыли.

какой только херни не делают за деньги в этом мире.

psv1967 ★★★★★
()
Ответ на: комментарий от anonymous

Прогрессом

Да здравствует 25 версия редактора Ворд! Ура прогрессу товарищи. теснее сплотим и уплотним продвигая!

на юх с таким прогрессом, ок?

psv1967 ★★★★★
()
Ответ на: комментарий от mv

Intuit на лиспобухгалтерии составы денег сделала.

а я-то думаю, нафига в GNU Cash guile прикрутили...

anonymous
()
Ответ на: комментарий от mv

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

на лишпе? жёсткое реальное время?
OH SHI~...

а GC какой, ephmereal?

anonymous
()
Ответ на: комментарий от anonymous

на лишпе? жёсткое реальное время?

Жёсткое реальное время уровнем ниже.

а GC какой, ephmereal?

Обычный, но софт писался без генерации мусора, поэтому до GC дело вообще не доходило.

mv ★★★★★
()
Ответ на: комментарий от archimag

Вот, скажем, была Римская цивилизация, с охренительно высоким уровнем развития культуры, технологий, военного дела и т.п.

технологий

лулзы, однако.. все её «технологии» — это компилятивная вырезка из древних греков

Так какой вывод предлагается сделать?

туда ей и дорога

anonymous
()
Ответ на: комментарий от archimag

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

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.