← Архив: Common Lisp

Вот :: пишу Lisp ;)

Author: · 23.08.2009 22:03
· original author: treep
Форуму пора добавить свободную ветку. Потому чито я собираюсь пофлудить :))
Кто-нибудь пробовал писать интерпретатор Лиспа?
Я начал это дело уже в третий раз - набрал пока 1000-кода, и вроде ничего. Код простой, но поддерживает рекурсию, дин.типизацию с иерархичной системой типов, определения функций и т.д. Хотя работает и под nix-ами, я решил попробывать сделать встроенное в интерпретатор функции для работы с виндоузными длл. Вот как выглядит гуёвый Hello-World:
(with-dll (user-dll "user32.dll")
        ((get-dll-function user-dll "MessageBoxA") 0 "That is Lisp" "Hello World!" 0)
)


А если писать такую WinNT библиотеку:
(defconst MB_OK               0)
(defconst MB_OKCANCEL         1)
(defconst MB_ABORTRETRYIGNORE 2)
(defconst MB_YESNOCANCEL      3)
(defconst MB_YESNO            4)
(defconst MB_RETRYCANCEL      5)
; etc

(defun Initialise-User-API() (load-dll user-dll "user32.dll" gui-dll "gui32.dll")
; Процесс становится клиентом библиотек

(= MessageBox (get-dll-function user-dll "MessageBoxA"))
; Возвращаемая из dll функция ведет себя как полноценная lambda

(defun Message-Box-OK (caption text) (MessageBox 0 text caption MB_OK))
; etc
то можно сделать програмку так:
(load "winnt.lisp")
(Initialise-User-API)
(Message-Box-Ok "Lisp" "Hello World!")
Пойду теперь запарюсь с so))