Схема (Ракетка) - Loop Библиотеки - PullRequest
5 голосов
/ 13 декабря 2011

У меня DrRacket версии 5.0.2, я потратил около 3 часов на поиск подходящих библиотек для работы while, dolist и dotimes.Я знаю, как их использовать, но я просто не могу найти нужные библиотеки.Например, когда я печатаю dotimes, он сообщает мне неизвестный идентификатор.

PS: Вам нужно использовать define-syntax для определения этих циклов?Я пробовал (require srfi/42), но это не работает.Я использую #lang scheme.

Ответы [ 3 ]

9 голосов
/ 13 декабря 2011

Вы могли бы использовать встроенные формы Racket вместо:

Вместо (dolist (x some-list) body-forms ...), вы можете написать (for ((x some-list)) body-forms ...)

вместо (dotimes (i n) body-forms ...),Вы можете использовать (for ((i (in-range 0 n))) body-forms ...) или даже просто (for ((i n)) body-forms ...), если n является неотрицательным целым числом.

Вы можете написать макросы синтаксических правил для преобразования циклов в стиле CL в стиль Racketте, но это, вероятно, не стоит того.for -формы Racket сами по себе более гибкие, чем dotimes или dolist, поскольку вы можете легко использовать их для итерации нескольких последовательностей одновременно.

0 голосов
/ 04 января 2016

Существует также реализация макроса Common Lisp loop для Racket.Импортируйте это так:

(require (planet jphelps/loop))
0 голосов
/ 18 марта 2015

Число на самом деле является последовательностью.

> (sequence->list 5)
'(0 1 2 3 4)

(for ((i (in-range n))) body-forms ...) тоже работает. in-range быстрее.

...