Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет Ivan Panachev ([info]ifp5) в [info]programming
@ 2005-12-12 15:37:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
А есть ли тут схимники? (schemers)
%subj%

Интересует как в scheme производится обработка исключений наиболее распространенным образом? Исключения интересуют, конечно, связанные с внешней средой, типа ошибки при открытии файла (про call/cc я в курсе и он тут никак не поможет).

R5RS читал (не очень, впрочем, внимательно), но такого не обнаружил. Google при поиске типа "scheme exception handling" выдает десятки различных вариантов.

P.S. Есть о'камловая программа, в которой в качестве языка конфигов используется примитивное подмножество scheme (написанное мною давным-давно за пару дней и даже без tail рекурсии). Думаю заменить свою убогую реализацию на ocs или schoca (скорее всего, на ocs) и вынести часть функциональности в конфиги. Обработку исключений придется, похоже, дописывать самому. Так вот интересует, стоит ли что-то брать за образец или изобретать велосипед самому?


(Добавить комментарий)


[info]potan
2005-12-12 20:08 (ссылка)
В [info]ru_declarative@lj есть.
Не в курсе про исключения, но OCamlовские реализации Sheme они очень сильно ругали за отсутсвие call-cc.

(Ответить) (Ветвь дискуссии)


[info]ifp5
2005-12-13 09:55 (ссылка)
Понятно, спрошу там.

OCamlовские реализации Sheme они очень сильно ругали за отсутсвие call-cc.

???

call/cc есть в обоих реализациях.
[ivanhoe@censored: ~/work/ocs-1.0.1/src]$ rlwrap ./ocscm
(define test (lambda (lst)
  (call/cc (lambda (exit)
    (for-each (lambda (x)
      (if (negative? x) (exit x))) lst)))))
()
> (test '(1 2 -4 5))
-4
> (test '(1 2 0 5))
()
>
[ivanhoe@censored: ~/work/ocs-1.0.1/src]$ rlwrap schoca
Schoca Shell (Version 0.2.3) by Christoph Bauer

(define test (lambda (lst)
  (call/cc (lambda (exit)
    (for-each (lambda (x)
      (if (negative? x) (exit x))) lst)))))
==> test
? (test '(1 2 -4 5))
==> -4
? (test '(1 2 0 5))
==> #unspecified
?

(Ответить) (Уровень выше)