Интерпретатор lisp на C# или F#
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Интерпретатор lisp на C# или F#

Интерпретатор lisp на C# или F#

Ответ
Поиск в этой теме
Непрочитано 09.03.2013, 15:52 #1
Интерпретатор lisp на C# или F#
Sleekka
 
-
 
Москва
Регистрация: 24.07.2005
Сообщений: 1,335

Здравствуйте дорогие коллеги, меня все чаще посещают мысли о собственной реализации лисп функций.
Может кто-то копал на эту тему? в первом сообщении писать много не буду - надеюсь тема будет развиваться.
и собственно 1-й вопрос: если делать свой интерпретатор то используя C# или F# - или использовать их вместе?
Вот есть попытки реализовать лисп-функции

1. http://www.cyberforum.ru/fsharp/thread587945.html
нужно будет пробовать.

2. http://dotlisp.sourceforge.net/dotlisp.htm
опен-сорс проект
Просмотров: 5282
 
Непрочитано 09.03.2013, 16:02
#2
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от Sleekka Посмотреть сообщение
надеюсь тема будет развиваться.
Я надеюсь это вообще не будет развиваться,
вместо этого используй атрибут LispFunction, регистрируй как положено
в соответствии с версией Автокада и вперед
Для интересу функция от TonyTanzillo:
Код:
[Выделить все]
   [LispFunction("MyLispFunction")]//	TT	//
        public static void MyLispFunction(ResultBuffer args)
        {
            if (args == null)
                throw new ArgumentException("Requires one argument");
            TypedValue[] values = args.AsArray();
            if (values.Length != 1)
                throw new ArgumentException("Wrong number of arguments");
            if (values[0].TypeCode != (int)LispDataType.SelectionSet)
                throw new ArgumentException("Bad argument type - requires a selection set");
            SelectionSet ss = (SelectionSet)values[0].Value;
            // use the selection set here
            Autodesk.AutoCAD.ApplicationServices.Application.ShowAlertDialog(ss.Count.ToString());
        }
        // usage: (MyLispFunction (ssget "_x" (list (cons 0  "insert")(cons 66 1)(cons 410 (getvar "ctab"))))

Последний раз редактировалось Олег (jr.), 09.03.2013 в 16:05. Причина: добавлен пример
Олег (jr.) вне форума  
 
Непрочитано 09.03.2013, 16:45
#3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


2 Sleekka
Цитата:
меня все чаще посещают мысли о собственной реализации лисп функций.
Может кто-то копал на эту тему?
Google забанили? Я так же неоднократно показывал примеры, как это делается.
Цитата:
если делать свой интерпретатор то используя C# или F# - или использовать их вместе?
Похоже, что у тебя в голове каша. Написание LISP-функций на .net не имеет никакого отношения к написанию интерпретаторов.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 09.03.2013, 17:00
#4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


не понятна
gomer вне форума  
 
Непрочитано 09.03.2013, 18:03
#5
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Sleekka Посмотреть сообщение
...и собственно 1-й вопрос: если делать свой интерпретатор...
Первой вопрос не такой. Как обычно первый вопрос - зачем? Заменить Autolisp/VisualLisp в AutoCAD? Или это отдельный интерпретатор, с AutoCAD не связанный?
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 09.03.2013, 20:30
#6
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
Похоже, что у тебя в голове каша. Написание LISP-функций на .net не имеет никакого отношения к написанию интерпретаторов.
Никакой каши в голове у меня нет, Андрей ты меня просто не совсем верно понял, потому что по ссылкам не ходил.
Только Александр Ривилис усомнился. Конечно же я знаю как на Net написать пользовательскую функцию, Андрей я же публиковал видео как эти функцию портировать под брикс
Тема называется Интерпретатор! следовательно задача состоит в том, чтобы написать свой .exe который может парсить лисп код и выполнять этот код, т.е. требуется реализация СТАНДАРТНЫХ lisp-функций + парсинг.
Теперь отвечу на вопрос зачем все это нужно:
1) не секрет что наработок по реально рабочему софту на лисп намного больше чем на Net. Да в Net - существуют привлекательные библиотеки которые могут все по аналитической геометрии и векторной алгебре, но свое то оно роднее, та математика по определению например (пересечение плоскостей), которая работала в твоей программе и годами доказала свою отказоустойчивость и скорость работы (потому что не нужен общий случай а можно ускорить реализацией частного случая) я уж не говорю если эти алгоритмы не точные а итерационные (таких библиотек можно и не найти).
И вот требуется допустим портировать свое приложение для Microstation, или еще что нибудь, да тот же Ревит.
2) Автодеск не улучшает и не развивает лисп реализацию, возможно, что некоторые лисп функции могли бы гипотетически работать чуть быстрее.

Мне собственно не нужно объяснять как это все делается, я спросил может кто-то больше меня в этом крутится и видел подобные наработки в этом направлении.
Есть как бы Автокад-консоле, но как там дела с лицензиями непонятно плюс отсутствие vl функций, а я использую не так много лисп функций, можно было бы и свой интерпретатор написать/заказать.

Собственно я знаю C# на начальном уровне, а вот F# я не знаю совсем слышал только что это функциональный язык от мелкомягких.
Родился вопрос если задаться целью отпарсить - ясен пень C#, потом после парсинга нужно выполнить функции. Для этого нужно сделать реализацию лисп функций.

Возьмем например конструкцию вида:
Код:
[Выделить все]
 
(mapcar (function (lambda (x)

))
lst
)
То мне почему-то кажется что использовать F# - для реализации таких функций было бы правильно, код будет короче, красивее и следовательно это приводит к уменьшению кол-ва ошибок. Я прав?

Последний раз редактировалось Sleekka, 09.03.2013 в 20:58.
Sleekka вне форума  
 
Непрочитано 09.03.2013, 20:53
#7
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


http://lisp2arx.3xforum.ro/topic/5/Dowloading_here/
gomer вне форума  
 
Автор темы   Непрочитано 09.03.2013, 22:11
#8
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Весело, уже что-то.
посмотрел их демонстрашку, но что-то я скептически отношусь к таким конвертациям, скорее всего она нормально разбирает только код опр. автора. Но ссылка все равно полезная бесспорно, хостятся только непойми где... на болоте по этому поводу ничего не проскакивало?
Sleekka вне форума  
 
Непрочитано 09.03.2013, 22:41
#9
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


именно на болоте это и обсуждалось
gomer вне форума  
 
Непрочитано 09.03.2013, 23:20
#10
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


2 Sleekka
Цитата:
Тема называется Интерпретатор! следовательно задача состоит в том, чтобы написать свой .exe который может парсить лисп код и выполнять этот код, т.е. требуется реализация СТАНДАРТНЫХ lisp-функций + парсинг.
Возможно я не совсем верно тебя понимаю... А понимаю я (сейчас смутно, с учётом твоих поправок) так, что ты либо предлагаешь написать на .NET некоторый интерпретатор AutoLISP\Visual LISP-кода, который бы выполнял заложенную в LISP-код логику, причём выполнял это в отдельных внешних приложениях (не acad.exe), либо написать интерпретатор (отдельное exe-приложение), который бы автоматом на основе LISP-кода генерировал аналогичный (по смыслу) .NET код (некий аналог http://www.swig.org)... Если одно из моих предположений верно, то укажи, какое именно.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 09.03.2013 в 23:40.
hwd вне форума  
 
Автор темы   Непрочитано 10.03.2013, 00:19
#11
Sleekka

-
 
Регистрация: 24.07.2005
Москва
Сообщений: 1,335


Цитата:
написать на .NET некоторый интерпретатор AutoLISP\Visual LISP-кода, который бы выполнял заложенную в LISP-код логику, причём выполнял это в отдельных внешних приложениях (не acad.exe)
Да - это то что я хочу в идеале, то есть я так видел.

Цитата:
либо написать интерпретатор (отдельное exe-приложение), который бы автоматом на основе LISP-кода генерировал аналогичный (по смыслу) .NET код (некий аналог http://www.swig.org).
А вот о таком я не задумывался, но вариант тоже интересный (для сохранения существующего опыта накопленного в АвтоЛиспе.
Sleekka вне форума  
 
Непрочитано 10.03.2013, 03:17
#12
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от Sleekka Посмотреть сообщение
но что-то я скептически отношусь к таким конвертациям
А я еще хуже. Достал меня автор этого "компилятора". Да и и Autodesk достал - требует чтобы срочно они у него этот "компилятор" купили. И это при том, что элементарных вещей в ObjectARX не знает и мысль свою выразить не может.
Александр Ривилис вне форума  
 
Непрочитано 10.03.2013, 09:47
#13
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Александр Ривилис Посмотреть сообщение
Достал меня автор этого "компилятора". Да и и Autodesk достал - требует чтобы срочно они у него этот "компилятор" купили.
А автор кто? Что-то не нашёл я информации об этом.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 10.03.2013, 13:02
#14
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


Цитата:
Сообщение от Sleekka Посмотреть сообщение
Может кто-то копал на эту тему?
Я периодически копаю (но пока до версии 0.9 бета еще не готов) - задумка очень проста, но возращаюсь я к ней с большими интервалами (когда свободен и есть время "надолго" отвлечься), хотя "предверсию" уже практически использовал - есть мысль расширить функционал лиспа на вызов .Net Api как "своих" так и внешних, но не так "убого" как это сделанно с COM - а "по человечески", (типо автоматического преобразования (MessageBox:Show "Test") в (net-im "MessageBox" "Show" "Test") - но это самый простой пример) чтоб автоматически преобразовывались лисп функции в делегаты (там где это подразумевается), автоматически преобразовывал "символы" в вызов соответствующих функций, с подобием замыканий (пока, как сделать нормальные, не придумал), GC неиспользуемых объектов и там еще много задумок, пока они все ну очень сыро, но реализованны. Как "разражусь" до чего-то более-менее вменяемого опубликую, пока рано - ибо еще возможно "конструктивные" переделки. Смысл всего этого - лично для меня очень прост - весь рабочий код пишется на лиспе, а для новый версий Автокада понадобится только перекомпилировать NetLisp(рабочее название проекта), 2 момент - возможность динамической (REPL) работы c .Net Api - без перезагрузки автокада.
з.ы. пишу его на F# и AutoLisp.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 10.03.2013, 14:26
#15
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от hwd Посмотреть сообщение
А автор кто? Что-то не нашёл я информации об этом.
Dragne Adrian из Румынии.
Александр Ривилис вне форума  
 
Непрочитано 10.03.2013, 16:35
#16
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Применительно к AutoCAD - проще, надёжней и полезней изучить целевой язык и писать непосредственно на нём, вместо того, чтобы изобретать интерпретаторы (имхо). То, что уже написано на LISP и работает, вовсе не обязательно переписывать на др. языки, если в этом нет объективной необходимости.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Интерпретатор lisp на C# или F#



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Научите лиспу на примере (или как kpblc, VVA и компания пытаются обучить чайника лиспу) Red Nova LISP 5021 16.06.2025 17:50
Lisp. Не вставляет значения в базу access. Zaghim LISP 2 11.07.2012 14:29
Умер разработчик языка программирования Lisp andr_g LISP 1 27.10.2011 08:36
{Конкурс} Lisp. Задачки для студентов gomer LISP 10 05.01.2011 16:33
загрузка DOS прог через LISP Gaa LISP 15 12.08.2005 19:19