Скомпилировать лисп-код. Вызвать из сторонней программы - 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
- Уничтожаем объект
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д