Форум программистов, компьютерный форум, киберфорум
Священные войны
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
Другие темы раздела
Священные войны Публичное покаяние Я тут (в основном в этом разделе, потому сюда и пишу) много писал против лиспа изображая зоологического антилиспера. Я писал что лисп разрушает этику и мораль, способствует войнам, коррупции, раку и подобное. Разумеется, это не всерьёз. Собственно, начальной причиной было пресечение настойчивых попыток некоторых агрессивно настроенных лисперов втянуть меня в их сообщество, а при любой... https://www.cyberforum.ru/ holywars/ thread1945686.html Священные войны Сталин vs Python?
С одной стороны Сталин - жесткий авторитарный стиль с централизованным управлением, строгая статическая типизация, строгая семантика с вызовом по значению и отправкой по ссылке... С другой стороны Python - слабая динамическая типизация, интерпретируемая сущность, несовместимость версий... В общем, прошу голосовать :)
Священные войны C, C++, C# или Python? Здравствуйте. У меня есть такой вопрос: Какой язык программирования лучше мне изучить? Под мои задачи? Цели: Прикладное программирование. В особенности хочу заниматься разработкой MUD при помощи MUD движков таких как circle, ROM и так далее, помимо этого разрабатывать другого рода приложения прикладного уровня. Требование: Понятный высокоуровневый код, который не загоняет в непонимание;... https://www.cyberforum.ru/ holywars/ thread1944402.html Священные войны Плагиат в физмате Предлагаю в этой теме постить факты плагиата в математике и смежных с ней областях. Начну я. Хаскел Карри украл у российского ученого Моисея Шонфенкеля идею каррирования. Тьюринг украл у выдающегося ученого Эмиля Поста Машину Поста Оба перечисленных случая являются примерами вопиющей наглости, потому что в обоих случаях было не только присвоено изобретение, но и названо именем плагиатора.... https://www.cyberforum.ru/ holywars/ thread1941804.html
Питон vs Io(iolanguage) Священные войны
Ходят слухи, что питон, якобы, мощный язык, с хорошей поддержкой ООП. Однако это не совсем так. Или совсем не так. Например, я переписал питонячюю версию паттерна visitor с википедии, практически один в один, и получилось примерно в 2 раза короче: decrement := method( msg := call argAt(0) sender := call sender self value := sender doMessage(msg) if(value > 0, sender...
Священные войны Возможен ли иск к изобретателям платформы сети Интернет и платформ сетевых соединений на базе сети Интернет? В связи с мировым обнародованием фактов шпионажа через всемирную сеть Интернет, возможен ли гражданский иск к изобретателям платформы сети Интернет и изобретателям платформ сетевых соединений на базе платформы сети Интернет по причине их аппаратной небезопасности? https://www.cyberforum.ru/ holywars/ thread1937048.html
Священные войны Что лучше использовать: IDE или Far https://www.cyberforum.ru/ holywars/ thread1935535.html
использую far manager + mingw makefile, вполне удобно и не нужна громоздкая ide, которая запускается по 10 мин. Что не так с путями и как их настроить? Вынесено в отдельную тему отсюда: https://www.cyberforum.ru/cpp-beginners/thread1935224.html
Священные войны Рассуждения на тему ИИ
Тут на форуме многие пытаются перепрыгнуть МО и сразу "заняться" ИИ - над этими товарищами можно смеяться бесконечно. с условием, что абстрактное мышление - феномен. а оно - не феномен. так, что смех не совсем здоровый будет. обучение нужно только для развития, поднятия уровня, увеличения,через анализ, приобретённого опыта . Тема вынесена из другого обсуждения:...
Священные войны А вы верите в особую айтишную ауру? https://www.cyberforum.ru/ holywars/ thread1931865.html
Товарищи айтишники, все мы часом бываем эникейщиками - знакомые там обратятся, друзья: "Вот тут у меня винда не загружается, приди посмотри!" или ещё что-нибудь в этом роде. Кто-то из нас этим занимается профессионально, кто-то "по совместительству", бывают вообще случаи "Сделай чайник, а то он не работает. Тыжпрограммист!" В общем, вопрос в чём. В интернетах часто ходят байки, что де "пришёл...
Священные войны Новая сокрушительная победа человеческого разума над неприкосновенностью частной жизни) https://www.cyberforum.ru/ holywars/ thread1930463.html
Собственно, сабж: http://www.theverge.com/2017/3/1/14775534/microsoft-windows-10-update-reboot-snooze-schedule-features Гип-гип ура! :)
Священные войны История дизайна языка Haskell
Haskell is a wonderful programming language - I'm surprised it's not used more in psychology as it'd make for some really great case studies in Stockholm Syndrome. Here's a stylized history of Haskell design, in which they've been digging themselves deeper and deeper with each decision: Traditional static typing doesn't handle high level functions well, so let's add a really sophisticated...
Священные войны Мультидиспетчеризация в Лиспе https://www.cyberforum.ru/ holywars/ thread1922989.html
Допустим, имеем иерархию Животное Млекопитающее Собака Кошка Земноводное Лягушка Змея
2304 / 1063 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
0

C++ vs Common Lisp: кодогенерация, метапрограммирование - - Ответ 10254674

25.03.2017, 11:14. Показов 5213. Ответов 64
Метки (Все метки)

Author24 — интернет-сервис помощи студентам
Дано описание произвольного математических выражений на XML вида:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<calc>
  <mul>
    <var>k</var>
    <plus>
      <var>foo</var>
      <var>bar</var>
      <var>baz</var>
      <mul>
        <raw>100</raw>
        <var>xyz</var>
      </mul>
    </plus>
  </mul>
</calc>
Для простоты положим, что у нас есть только сложение и умножение. var - символьное название переменной, raw - литерал целого числа.

Задача: в compile time сгенерировать функцию, аргументами которой будут все var имена переменных из xml. Функция должна вычислять выражение описанное в xml.
Такой простой eDSL.

У нас есть 2 стула: Common Lisp и "всемогущий" C++. Я сажусь на первый стул.

Беру первый попавшийся xml parser - xmls.
Долблю на коленке кодогенератор.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
(eval-when (:compile-toplevel :load-toplevel :execute)
  (defparameter *op-table*
    '(("mul"  . *)
      ("plus" . +)
      ("raw"  . raw)
      ("var"  . var)))
 
  (defparameter *var-names* nil)
  
  (defun genexpr (x)
    (typecase x
      (cons
       (let ((op (cdr (assoc (car x) *op-table* :test 'string=))))
         (case op
           (raw (parse-integer (third x)))
           (var (let ((s (intern (string-upcase (third x)))))
                  (push s *var-names*)
                  s))
           (otherwise `(,op ,@(mapcar #'genexpr (cddr x)))))))
      (string
       (parse-integer x)))))
Пишу макрос define-xml-function на вход принимающий xml строчный литерал.
Lisp
1
2
3
4
5
(defmacro define-xml-function (name xml-string)
  (let (*var-names*)
    (let ((body (genexpr (third (xmls:parse xml-string)))))
      `(defun ,name (&key ,@*var-names*)
         ,body))))
Всё. Десяток строк, пол часа времени с перекурами - eDSL готов.

Использую.
Lisp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(define-xml-function foo
 "
<calc>
  <mul>
    <var>k</var>
    <plus>
      <var>foo</var>
      <var>bar</var>
      <var>baz</var>
      <mul>
        <raw>100</raw>
        <var>xyz</var>
      </mul>
    </plus>
  </mul>
</calc>
 ")
 
(foo :k 2 :foo 100 :bar 200 :baz 300 :xyz 4)
;; 2000
Приведеный пример define-xml-function раскрывается в:
Lisp
1
2
(DEFUN FOO (&KEY XYZ BAZ BAR FOO K)
  (* K (+ FOO BAR BAZ (* 100 XYZ))))
define-xml-function в compile time генерирует lisp функцию, которая в свою очередь компилируется в native.

Но подождите? Ведь есть второй кошерный стул - кресты. Темплейты, туда сюда. Что же мне делать? Как решить задачу?

Добавлено через 2 минуты
hoggy, есть чё на лурке по этому поводу?

Добавлено через 5 часов 28 минут
Цитата Сообщение от nullxdth Посмотреть сообщение
Долблю на коленке кодогенератор
Фикс. Лишка написал.
Lisp
1
2
3
4
5
6
7
8
9
(defun genexpr (x)
  (when x
    (let ((op (cdr (assoc (car x) *op-table* :test 'string=))))
      (case op
        (raw (parse-integer (third x)))
        (var (let ((s (intern (string-upcase (third x)))))
               (push s *var-names*)
               s))
        (otherwise `(,op ,@(mapcar #'genexpr (cddr x))))))))


Вернуться к обсуждению:
C++ vs Common Lisp: кодогенерация, метапрограммирование Священные войны
0
Заказать работу у эксперта
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.03.2017, 11:14
Готовые ответы и решения:

Common Lisp vs D
Может быть, попробуем затеять холиварчик. Чтобы было менее честно, можно противопоставлять языку D...

Common Lisp vs D (2)
Продолжение темы.

Книги или другой источник, где описана история версий Lisp и Common Lisp
Доброго времени суток.Такой вопрос,знаете какой-нибудь источник,где описана история версий Lisp и...

Common Lisp
Подскажите пожалуйста, а может Common Lisp формировать списки из функций, и (если вдруг может) как?

64
25.03.2017, 11:14
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.03.2017, 11:14
Помогаю со студенческими работами здесь

Common lisp
Есть фрагмент программы: (defun game(x y) (cond (( &lt; x y)(print &quot;menshe&quot;)(setq y (read))) (( &gt;...

Common lisp
кто поможет решить эти задачи? Перечитайте правила форума. Один вопрос - одна тема. Заголовок...

ООП Common Lisp
Помогите пожалуйста! Реализовать класс: Программа (название, тип, сфера применения, язык...

Вопрос по common lisp
Подскажите пожалуйста как выполнить лисп-программу из txt или какого другого файла?

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru