LINUX.ORG.RU

 //       File isomorph.cpp
 #include <intelib/lisp/lisp.hpp>
 #include <intelib/lisp/lsymbol.hpp>
 #include <intelib/lfun_std.hpp>
 #include <intelib/lfun_sel.hpp>


 LSymbol ISOMORPHIC("ISOMORPHIC");

 static LFunctionalSymbol<LFunctionDefun> DEFUN("DEFUN");
 static LFunctionalSymbol<LFunctionCond> COND("COND");
 static LFunctionalSymbol<LFunctionAtom> ATOM("ATOM");
 static LFunctionalSymbol<LFunctionAnd> AND("AND");
 static LFunctionalSymbol<LFunctionCar> CAR("CAR");
 static LFunctionalSymbol<LFunctionCdr> CDR("CDR");

 static LListConstructor L;

 void LispInit_isomorphic() {
   static LSymbol TREE1("TREE1");
   static LSymbol TREE2("TREE2");
   ////////////////////////////////////////////////
   //
   (L|DEFUN, ISOMORPHIC, (L|TREE1, TREE2),
     (L|COND, 
       (L|(L|ATOM, TREE1), (L|ATOM, TREE2)),
       (L|(L|ATOM, TREE2), NIL),
       (L|T, (L|AND,
         (L|ISOMORPHIC, (L|CAR, TREE1), 
                        (L|CAR, TREE2)),
         (L|ISOMORPHIC, (L|CDR, TREE1), 
                        (L|CDR, TREE2))
   )))).Evaluate();
   //
   ////////////////////////////////////////////////
 } 
 //      end of file

ненужная херня какая-то

x4DA ★★★★★
()

Лучше уж писать на лиспообразном языке прямо в коде программы на лиспе. Очень страшный код. Уродливый. Лисп красивее, чем это.

Weres ★★★
()

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

staseg ★★★★★
()
Последнее исправление: staseg (всего исправлений: 1)

ужасно и ненужно

wota ★★
()

бугага, сначала подумал, что Intel имеет к этому какое-то отношение

hvatitbanit
()

писать на Lisp-подобном языке прямо в коде программы на C++

Зачем в программе на нормальном языке могут понадобиться вставки на архаичном, маргинальном языке 50-летней давности?

anonymous
()

Вот уж воистину: «любая достаточно сложная программа на C или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp».

Nebuchadnezzar ★★★★
()

Хотел было оставить своё авторитетное мнение по этому поводу , но ... я просто оставлю это здесь http://goo.gl/9am3YI И вообще Last updated October 17, 2009

anonymous
()

ололо, тред будет про то, что в нашем C++ есть Lisp, а есть ли C++ в вашем Lisp? :3

dib2 ★★★★★
()

Борщ с веществами?

anonymous
()

Зачем? Зачем это нужно?

Aswed ★★★★★
()

надеюсь это никому не прийдется юзать

Boy_from_Jungle ★★★★
()

To give you the essential feeling, the following example is provided.

Как будто без лиспа деревьев не бывает.

#include <boost/variant.hpp>

template <typename T>
struct Pair;

template <typename T>
using Tree = boost::variant<T, boost::recursive_wrapper<Pair<T>>>;

template <typename T>
struct Pair {
    Tree<T> l, r;
    Pair(Tree<T> const& l, Tree<T> const& r) : l(l), r(r) {}
};

template <typename T>
struct Iso : public boost::static_visitor<bool> {
    bool operator()(T const&, T const&) const { return true; }
    bool operator()(Pair<T> const& x, Pair<T> const& y) const {
        return boost::apply_visitor(Iso(), x.l, y.l) && boost::apply_visitor(Iso(), x.r, y.r); }
    bool operator()(T const&, Pair<T> const&) const { return false; }
    bool operator()(Pair<T> const&, T const&) const { return false; }
};
quasimoto ★★★★
()
Ответ на: комментарий от Nebuchadnezzar

«любая достаточно сложная программа на C или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp

...как и любой компилятор Common Lisp"

Уж цитировать, так полностью.

Miguel ★★★★★
()

Вы не понимаете, это наука. Да, можно встроить существующую реализацию лиспа, да, возможно, это будет практично; но пусть этим занимаются инженеры, а не учёные. Автор, между прочим, получил учёную степень за сабж.

NeXTSTEP ★★
()

Даёшь компайл-тайм лисп на шаблонах. Пьюр фанкшнал, чо!

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

Да, но без уточнения не смотрится.

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

Фу. Одну ООП/императивщину встроили в другую ООП/императивщину.

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

Оно интерпретируется. Лишп не может компилироваться.

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

Автор, между прочим, получил учёную степень за сабж.

Вот потому отечественная «наука» и смешит весь остальной мир корчевателями, что у нас такие «ученые».

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

Так называемая «computer science» вообще бред редкостный везде в мире, но у нас маразм просто зашкаливает. Бред этого типа «ученого» от корчевателя недалеко ушел.

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

Ок. Аи , базы данных , эффективные алгоритмы , сеть , благодаря которой ты сейчас ты высказал здесь своё авторитетное™ мнение , всё это маразм.

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

Это binary static visitor.

Non-nested pattern matching это что-то вроде (C++14)

template <typename R, typename T, typename F>
R match(std::pair<Pair<T>, Pair<T>> const& x, F const& f) {
    return f(x.first.l, x.first.r, x.second.l, x.second.r);
}

// ... other match'es

    bool operator()(Pair<T> const& x, Pair<T> const& y) const {
        return match<bool>(
            std::make_pair(x, y),
            [=](auto xl, auto xr, auto yl, auto yr) {
            // ^ pattern
                return boost::apply_visitor(Iso(), xl, yl) && boost::apply_visitor(Iso(), xr, yr);
            });
    }

А nested pattern matching — уже вряд ли (ниже есть в «Похожих темах»).

Хотя можно любую вложенную структуру таким match разобрать и закинуть все связи в лямбду (там и переменные можно пропускать), но неудобно и бойлерплейт в виде написания этих match.

quasimoto ★★★★
()
Последнее исправление: quasimoto (всего исправлений: 4)
Ответ на: комментарий от anonymous

Это все практика, к которой яйцеголовые говнари не имеют вообще никакого отношения.

anonymous
()

позволяющую писать на Lisp-подобном языке прямо в коде программы на C++

Это как насрать на тарелку, и сказать что это шоколадный торт

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

Вы не понимаете, это наука. Да, можно встроить существующую реализацию лиспа, да, возможно, это будет практично; но пусть этим занимаются инженеры, а не учёные. Автор, между прочим, получил учёную степень за сабж.

Это не повод размахивать своей наукой перед посторонними людьми. В приличном обществе свою науку без дела не достают

vasily_pupkin ★★★★★
()

Я не специалист, но на лисп внутри спп писать и то красивее. Извените.

jori
()

ты так и не ответил «зачем»? Выкопал какое-то УГ пятилетнее, зарелизил... Это ты писал с целью доказать, что ты ещё и программист? Ну годно, но зачем ты ЭТО всем показываешь? Показывай только своим студентам, пусть зачёты на ЭТОМ получают. А IRL я не вижу, куда ЭТО можно применить.

Лучше-бы ты свои лекции сделал в электронном виде, и что-бы под GFDL. (и на русском).

emulek
()

библиотеку, позволяющую писать на Lisp-подобном языке прямо в коде программы на C++

честно говоря ожидал увидеть некий препроцессор С в стиле flex/embededsql, разворачивающий lisp в библиотечные вызовы и С-шные функции. но не такую шнягу как по ссылке :(

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

Надеюсь, это не в мой адрес

а кто аффтор сабжа?

«Зачем»? «Теперь я видел всё».

я когда-то давно видел похожую ☣ на сишке.

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

Вот уж воистину: «любая достаточно сложная программа на C или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp».

Включая все реализации Common Lisp.

// cast Бертран Рассел

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