Скомпилировать лисп-код. Вызвать из сторонней программы - Lisp
Формулировка задачи:
Нужно скомпилировать лисп-код. И вызвать из другой программы (Delphi), незаметно для пользователя. При вызове лисп-кода ему передаются данные и возвращаются.
Смотрел HomeLisp, но там СОМ. Для моей задачи это слишком. Если бы он умел без ActivX, было б здорово.
А что есть еще?
Пока трудность 1) в компиляции, и в 2) передачи/получении.
На Racket удалось скомпилировать код (exe), (хоть и 9 Мб вместе с ядром), а вот передать/вернуть параметры, пока нет.
Всё таки очень хочется получить dll-ку (пусть и не одну), с маленьким объёмом, и без СОМ-ов
Это возможно? Если dll нет - пусть exe и/или несколько "метров"
PS.
Блин, вот столько лет лиспу (в общем смысле), а с компиляцией в exe/dll-файл так и ничего нет?! Нормальный файл, если я правильно выразился, а то может это называется не компиляция, а трансляция в С. Ну в общем, что бы это был чистый (native) код на С, способный работать уже без лиспового ядра!Решение задачи: «Скомпилировать лисп-код. Вызвать из сторонней программы»
textual
Листинг программы
- Sub TestLisp()
- Dim myLisp As HomeLisp.clsLisp
- '::: Создание объекта
- Set myLisp = New HomeLisp.clsLisp
- With myLisp
- '::: Считаем факториалы целых
- For i% = 1 To 30
- '::: Формируем S-выражение (fact i)
- SExpr$ = "(fact " + CStr(i%) + ")"
- '::: Вычисляем...
- .SEval SExpr$
- '::: Получаем сообщение об ошибке
- ErrTxt$ = .Get_errormessage()
- '::: Ошибка была?
- If ErrTxt$ <> "" Then
- '::: Да - сообщим об этом
- MsgBox "Ошибка: " + ErrTxt$
- Exit For
- Else
- '::: Нет - занесем результат
- '::: в очередную ячейку
- Cells(i%, 1).Value = CStr(i%) + "!=" + .Get_Resp()
- End If
- Next i%
- End With
- '::: Уничтожим объект (хотя он и сам уничтожится!)
- Set myLisp = Nothing
- End Sub
Объяснение кода листинга программы
- Создание объекта класса clsLisp
- Считаем факториалы целых от 1 до 30
- Формируем S-выражение (fact i) для каждого i от 1 до 30
- Вычисляем S-выражение с помощью метода SEval
- Получаем сообщение об ошибке, если таковая была
- Если есть сообщение об ошибке, выводим его и выходим из цикла
- Если сообщения об ошибке нет, вычисляем результат и записываем его в ячейку вместе с i
- Уничтожаем объект
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д