powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / return в Scheme
8 сообщений из 8, страница 1 из 1
return в Scheme
    #37779653
h869311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Java можно было с помощью return'а выйти не из конца функции.
Как такое же сделать в Scheme?
...
Рейтинг: 0 / 0
return в Scheme
    #37779658
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
h869311В Java можно было с помощью return'а выйти не из конца функции.
Как такое же сделать в Scheme?продолжения
...
Рейтинг: 0 / 0
return в Scheme
    #37779664
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот здесь прочтешь:
http://fprog.ru/2011/issue7/
...
Рейтинг: 0 / 0
return в Scheme
    #37779666
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вернее вот, для начала теоретическое введение:
http://fprog.ru/lib/ferguson-dwight-call-cc-patterns/

а то по прошлой ссылке - не для новичка текст.
...
Рейтинг: 0 / 0
return в Scheme
    #37779671
Фотография ZyK_BotaN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати - кал-цеце из коробки - это прерогатива схемки, в других лиспах - вроде нет поддержки из коропки.

если есть, то поправьте меня.
...
Рейтинг: 0 / 0
return в Scheme
    #37779679
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
h869311,

Вот пример:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
(define (test)
  (call/cc
   (lambda (return)
     (define i 0)
     (do ((i 0 (+ i 1)))
         ((>= i 100000))
       (when (= i 4)
         (return))
       (display i)
       (newline)))))

чтоб не писать постоянно лямбду, можно сделать небольшой макрос-обертку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
(define-syntax with-cc
  (syntax-rules ()
    ((_ cc body ...)
     (call/cc (cc) body ...))))

(define (test)
  (with-cc return
    (define i 0)
    (do ((i 0 (+ i 1)))
        ((>= i 100000))
      (when (= i 4)
        (return))
      (display i)
      (newline))))
...
Рейтинг: 0 / 0
return в Scheme
    #37779683
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
(define-syntax define/cc
  (syntax-rules ()
    ((_ cc (fun arg ...) body ...)
     (define (fun arg ...)
       (call/cc (lambda (cc) body ...))))) ; !!! в предыдущем посте забыл лямбду

(define/cc return (test)
  (do ((i 0 (+ i 1)))
      ((>= i 100000))
    (when (= i 4)
      (return))
    (display i)
    (newline)))
...
Рейтинг: 0 / 0
return в Scheme
    #37779745
h869311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду разбираться.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / return в Scheme
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]