LINUX.ORG.RU

Enjoy your non-R6RS solution

(define (dotted->seq dotted-symbol)
  (map string->symbol
       (regexp-split #rx"\\." (symbol->string dotted-symbol))))

(define (seq->nested seq)
  (reduce (lambda (child object)
            `(getitem ,object ',child))
          '() seq))

Sphinx ★★☆☆
()
Ответ на: Enjoy your non-R6RS solution от Sphinx

Гонять символ→строки→символы совершенно неспортивно. Наверное, лучше
изменить стандартный ридер так, чтобы он на лету считывал foo.bar.baz
в более удобную форму (то есть, заменить `dotted->seq` модификацией
ридера). Сделай сам :)

А причём тут макры?

Sphinx ★★☆☆
()

В рамках чистого R5RS это и невозможно сделать. Однако, в любой реализации Схемы, где есть православный define-macro, это делается элементарно - (define-macro (unroll-dots . rest) (your-function-that-unrolls-those-bloody-dots rest))

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

> Гонять символ→строки→символы совершенно неспортивно.

Это ещё почему? :-O

> А причём тут макры?

Ну так это, наверное, во время компиляции разворачивать человек хочет.

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

> Это ещё почему? :-O

Не знаю, мне почему-то так показалось. Так делают?

> your-function-that-unrolls-those-bloody-dots


Лол, я сперва начал это искать в RnRS :)

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

> Не знаю, мне почему-то так показалось. Так делают?

Да, конечно же. Синтаксис S-выражений слишком убог, так что расширить его за счёт внутренностей символов - идея привлекательная.

Так даже инфиксную арифметику люди делают, например (infix I2*2+(I1+1))

Здесь I2*2+ и I1+1 - символы.

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