Size: a a a

Сообщество Scheme

2021 May 06

a

anton in Сообщество Scheme
тру
источник

M

Madman in Сообщество Scheme
Согласен только насчёт инфиксной. Остальное вполне хорошо (и отступы и двоеточие)
источник

ND

Nikita Domnickij in Сообщество Scheme
Дали им скобки, нет не хотим, хотим интендэйшн бэйзд синтаксис
источник

M

Madman in Сообщество Scheme
Выглядит чище, чтоб не балансировать (например для конфигов)
источник

ND

Nikita Domnickij in Сообщество Scheme
Про ямл слышал?
источник

ND

Nikita Domnickij in Сообщество Scheme
Ради эстетического удовольствия отказываться от форм чот сомнительно
источник

M

Madman in Сообщество Scheme
Каких форм?
источник

ND

Nikita Domnickij in Сообщество Scheme
Учитывая что эстетика довольно субъективна
источник

ND

Nikita Domnickij in Сообщество Scheme
Обычных
источник

M

Madman in Сообщество Scheme
Самому больше скобки нравятся, но допускаю синтаксис на отступах. Тем более он полностью обратно совместим
источник

ND

Nikita Domnickij in Сообщество Scheme
И не нужен
источник

ND

Nikita Domnickij in Сообщество Scheme
источник
2021 May 07

y

yosk in Сообщество Scheme
Кто-нибудь может подсказать по макросам? Я пытаюсь сделать версию cut из SRFI-26, которая будет работать и на вложенных списках. То есть (cut* + (- <> <>) <>) будет раскрываться во что-то вроде (lambda (x1 x2 x3) (+ (- x1 x2) x3)) (по дефолту cut такое не умеет). Реализовать обычную версию получилось нормально (с обработкой <...> пока не заморачивался):

;; Принимает список аргументов для лямбды, список, являющийся телом лямбды и необработанные символы
(define-syntax internal-cut*
 (syntax-rules (<>)
   ;; Конец обработки, генерация конечной лямбды
   ((_ (slot-name ...) (func arg ...))
    (lambda (slot-name ...) (func arg ...)))
   ;; Обработка <>
   ((_ (slot-name ...) (processed ...) <> . slots-or-exprs)
    (internal-cut* (slot-name ... x) (processed ... x) . slots-or-exprs))
   ;; Обработка не <>
   ((_ (slot-name ...) (processed ...) not-diamond . slots-or-exprs)
    (internal-cut* (slot-name ...) (processed ... not-diamond) . slots-or-exprs))))

(define-syntax cut*
 (syntax-rules ()
   ((_ . slots-or-exprs)
    (internal-cut* () () . slots-or-exprs))))

Но при попытке сделать обработку вложенных списков появились проблемы. Код, который я пытаюсь использовать:

;; Принимает список аргументов для лямбды, список, являющийся телом лямбды и необработанные символы
(define-syntax internal-cut*
 (syntax-rules (<>)
   ;; Конец обработки, генерация конечной лямбды
   ((_ (slot-name ...) (func arg ...))
    (lambda (slot-name ...) (func arg ...)))
   ;; Обработка <>
   ((_ (slot-name ...) (processed ...) <> . slots-or-exprs)
    (internal-cut* (slot-name ... x) (processed ... x) . slots-or-exprs))
   ;; Обработка списка с <>
   ((_ (slot-name ...) (processed ...) (before ... <> after ...) . slots-or-exprs)
    (internal-cut* (slot-name ... x) (processed ... (before ... x after ...)) . slots-or-exprs))
   ;; Обработка всего прочего
   ((_ (slot-name ...) (processed ...) not-diamond . slots-or-exprs)
    (internal-cut* (slot-name ...) (processed ... not-diamond) . slots-or-exprs))))

При попытке эвала этой штуки в REPL, я получаю:

While compiling expression:
Syntax error:
unknown file:3489:43: syntax-case: misplaced ellipsis in form (dummy (slot-name ...) (processed ...) (before ... <> after ...) . slots-or-exprs)

При этом столбец 43 (с учетом отступов и прочего) указывает куда-то в середину before (в строке сразу после коммента «Обработка списка с <>»).
Вот урезанный макрос, в котором я получаю такую же ошибку:

(define-syntax test
 (syntax-rules ()
   ((_ before ... after ...)
 (- (+ before ...) (+ after ...)))))

Что я делаю не так и как это можно исправить?
источник

AP

Artyom "avp&quo... in Сообщество Scheme
Могу предположить, что вот с этим проблема:
(_ before ... after ...)

Лисп не может понять, где заканчивается набор before, и где начинается after.
источник

y

yosk in Сообщество Scheme
Но ведь в случае с (_ before ... <> after ...) это возможно? Хотя бы гипотетически.
источник

y

yosk in Сообщество Scheme
Хотя даже если бы он так делал, он распарсил бы только одну <> внутри списка. Кажется, придется все списки поэлементно парсить.
источник
2021 May 08

DP

Dmitry Plesovskykh in Сообщество Scheme
кто в курсе, в racket есть возможность запустить код guile scheme это как делается через #!r6rs или как-то иначе? кто пробовал так делать, есть ли в guile какие-то несовместимые особенности на уровне языка или библиотек?
источник

A ß in Сообщество Scheme
конечно есть
источник

A ß in Сообщество Scheme
какой-нибудь goops например
источник
2021 May 09

AP

Aleksei (astynax) Pi... in Сообщество Scheme
На уровне языка Racket давно уже пересхема
источник