Скомпилировать лисп-код. Вызвать из сторонней программы - Lisp

Узнай цену своей работы

Формулировка задачи:

Нужно скомпилировать лисп-код. И вызвать из другой программы (Delphi), незаметно для пользователя. При вызове лисп-кода ему передаются данные и возвращаются. Смотрел HomeLisp, но там СОМ. Для моей задачи это слишком. Если бы он умел без ActivX, было б здорово. А что есть еще? Пока трудность 1) в компиляции, и в 2) передачи/получении. На Racket удалось скомпилировать код (exe), (хоть и 9 Мб вместе с ядром), а вот передать/вернуть параметры, пока нет. Всё таки очень хочется получить dll-ку (пусть и не одну), с маленьким объёмом, и без СОМ-ов Это возможно? Если dll нет - пусть exe и/или несколько "метров"

PS.

Блин, вот столько лет лиспу (в общем смысле), а с компиляцией в exe/dll-файл так и ничего нет?! Нормальный файл, если я правильно выразился, а то может это называется не компиляция, а трансляция в С. Ну в общем, что бы это был чистый (native) код на С, способный работать уже без лиспового ядра!

Решение задачи: «Скомпилировать лисп-код. Вызвать из сторонней программы»

textual
Листинг программы
  1. Sub TestLisp()
  2. Dim myLisp As HomeLisp.clsLisp
  3.     '::: Создание объекта
  4.    Set myLisp = New HomeLisp.clsLisp
  5.     With myLisp
  6.          '::: Считаем факториалы целых
  7.         For i% = 1 To 30
  8.              '::: Формируем S-выражение (fact i)
  9.             SExpr$ = "(fact " + CStr(i%) + ")"
  10.              '::: Вычисляем...
  11.             .SEval SExpr$
  12.              '::: Получаем сообщение об ошибке
  13.             ErrTxt$ = .Get_errormessage()
  14.              '::: Ошибка была?
  15.             If ErrTxt$ <> "" Then
  16.                 '::: Да - сообщим об этом
  17.                MsgBox "Ошибка: " + ErrTxt$
  18.                 Exit For
  19.              Else
  20.                 '::: Нет - занесем результат    
  21.                '::: в очередную ячейку
  22.                Cells(i%, 1).Value = CStr(i%) + "!=" + .Get_Resp()
  23.              End If
  24.          Next i%
  25.     End With
  26.     '::: Уничтожим объект (хотя он и сам уничтожится!)
  27.    Set myLisp = Nothing
  28. End Sub

Объяснение кода листинга программы

  1. Создание объекта класса clsLisp
  2. Считаем факториалы целых от 1 до 30
  3. Формируем S-выражение (fact i) для каждого i от 1 до 30
  4. Вычисляем S-выражение с помощью метода SEval
  5. Получаем сообщение об ошибке, если таковая была
  6. Если есть сообщение об ошибке, выводим его и выходим из цикла
  7. Если сообщения об ошибке нет, вычисляем результат и записываем его в ячейку вместе с i
  8. Уничтожаем объект

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.875 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы