LINUX.ORG.RU

[scheme]guile & gambc

 


0

0

Недавно начал интересоватся scheme, в часности возможностью компиляции кода.

Помимо стандартных функций заинтересовали дополнительные модули. В guile они в основном реализованы как нативные функции, что делает проблематичным их использование в gambc.

Вопрос: Есть ли версии этих модулей, написаные на scheme? И если есть, то где(или как) их найти?

Интересуют в первую очередь такие полезные вещи как srfi-1 и srfi-16


посмотрите на реализацию srfi в plt scheme, srfi-1 там точно есть, 16 - может быть на planet

ott ★★★★★
()
Ответ на: комментарий от anonymous

>Вот нагуглил: http://www.s48.org/cgi-bin/hgwebdir.cgi/s48-stable/file/c975d6f20901/scheme/srfi

Спасибо, код чисто на scheme, буду пробовать компилировать.

Не знаю на сколько они совместимы.

Вот меня тоже интересует совместимость, на сколько может отличатся синтаксис?(вроде как стандарт есть)

PS Не хотелось бы привязыватся к конкретной реализации

SV0L0CH
() автор топика
Ответ на: комментарий от ott

16 - может быть на planet

16 есть в PLT, да и в самом SRFI-16 приводится реализация на R5RS Scheme:

;; This code is in the public domain.

(define-syntax case-lambda
  (syntax-rules ()
    ((case-lambda 
      (?a1 ?e1 ...) 
      ?clause1 ...)
     (lambda args
       (let ((l (length args)))
         (case-lambda "CLAUSE" args l 
           (?a1 ?e1 ...)
           ?clause1 ...))))
    ((case-lambda "CLAUSE" ?args ?l 
      ((?a1 ...) ?e1 ...) 
      ?clause1 ...)
     (if (= ?l (length '(?a1 ...)))
         (apply (lambda (?a1 ...) ?e1 ...) ?args)
         (case-lambda "CLAUSE" ?args ?l 
           ?clause1 ...)))
    ((case-lambda "CLAUSE" ?args ?l
      ((?a1 . ?ar) ?e1 ...) 
      ?clause1 ...)
     (case-lambda "IMPROPER" ?args ?l 1 (?a1 . ?ar) (?ar ?e1 ...) 
       ?clause1 ...))
    ((case-lambda "CLAUSE" ?args ?l 
      (?a1 ?e1 ...)
      ?clause1 ...)
     (let ((?a1 ?args))
       ?e1 ...))
    ((case-lambda "CLAUSE" ?args ?l)
     (error "Wrong number of arguments to CASE-LAMBDA."))
    ((case-lambda "IMPROPER" ?args ?l ?k ?al ((?a1 . ?ar) ?e1 ...)
      ?clause1 ...)
     (case-lambda "IMPROPER" ?args ?l (+ ?k 1) ?al (?ar ?e1 ...) 
      ?clause1 ...))
    ((case-lambda "IMPROPER" ?args ?l ?k ?al (?ar ?e1 ...) 
      ?clause1 ...)
     (if (>= ?l ?k)
         (apply (lambda ?al ?e1 ...) ?args)
         (case-lambda "CLAUSE" ?args ?l 
           ?clause1 ...)))))
Begemoth ★★★★★
()

Всем спасибо.

Узнал есчё об одном компиляторе bigloo, буду пробовать на нём и на на gambc. Пока bigloo выглядит предпочтительней, хотя этих модулей я там тоже почемуто не наблюдаю.

SV0L0CH
() автор топика
Ответ на: комментарий от SV0L0CH

IMHO, bigloo - практически мертв, у него нет большого коммьюнити и т.п. хотя мы на bigloo писали, включая servlets

ott ★★★★★
()
Ответ на: комментарий от Begemoth

да я уже нашел после того, как написал...

ott ★★★★★
()
Ответ на: комментарий от ott

>IMHO, bigloo - практически мертв, у него нет большого коммьюнити и т.п.

Сравнивая gambc и bigloo пока наблюдаю некоторое превосходство bigloo по возможностям. Что касается качества сгенерированого кода то не сравнивал, так как языком в совершенстчве пока не овладел.

Про bigloo узнал случайно, когда ставил на посмотреть scheme2js(хотя искал js2scheme). Похоже что bigloo более широко используется.

PS

Мне интересно какие есчё есть компиляторы, может есть вариант полутше.

SV0L0CH
() автор топика
Ответ на: комментарий от capricorn20

для гамбита есть еще интересно расширение: termite - http://code.google.com/p/termite/ - реализует что-то похожее на эрланговые потоки и сообщения

ott ★★★★★
()
Ответ на: комментарий от ott

chicken мне кажется поперспективней ввиду наличия пакетного менеджера.

Но буду смотреть все 3 компилятора.

SV0L0CH
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.