Size: a a a

Сообщество Scheme

2019 August 26

AZ

Aydar Zarifullin in Сообщество Scheme
Valeriy L
А я последовал совету дмитро и перестал так делать
А как лучше?
источник

VL

Valeriy L in Сообщество Scheme
Хз, разницы много нет. Просто без всяких my/ вначале выглядит все лаконичнее
источник

VL

Valeriy L in Сообщество Scheme
В любом случае узнать просто: твоя эта функция или нет. describe-function. Но это немного не тот чат)
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Pïg Grëënëst
Но (setq a-hook '()) работает
Лучше хотя бы в стракт завернуть чтобы отличать просто список от хука
источник
2019 August 28

AZ

Aydar Zarifullin in Сообщество Scheme
В srfi-173 есть sample implementation. Смотрю его и там есть такой код


(define (hook-delete! hook proc)
     (let loop ((procs (hook-procs hook))
                (out '()))
       (unless (null? procs)
         (if (eq? proc (car procs))
             (hook-procs! hook (append (cdr procs) out))
             (loop (cdr procs) (cons (car procs) out))))))


Функция просто удаляет переданную процедуру из списка.

Но при этом тот же самый код можно написать так


(delete proc (hook-procs hook) eq?)


При условии импорта srfi-1
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Кстати. Вопрос есть ли референс по scheme? Именно по стандартным функциям и srfi? Целый день искал эту функцию delete потому что где-то она называется remove а где-то remq
источник

A

Aragaer in Сообщество Scheme
я обычно иду на сайт чикена, там есть много всякого
источник

A

Aragaer in Сообщество Scheme
источник

A

Aragaer in Сообщество Scheme
а, ну и там и ссылка на сам оригинальный документ есть
источник
2019 August 29

AZ

Aydar Zarifullin in Сообщество Scheme
Я бы реализацию srfi 173 для чикена выложил, но я там проверку арности функций убрал. То есть фактически оно теперь не совпадает с эталоном.
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Aragaer
я обычно иду на сайт чикена, там есть много всякого
В данном конкретном случае тяжело искать потому что у функции классное имя delete. А в Гугле вместо стандартной функции миллиард велосипедов
источник

A

Aragaer in Сообщество Scheme
источник

A

Aragaer in Сообщество Scheme
норм - есть identifier search, ищет не по тексту, а конкретно имя
источник

A

Aragaer in Сообщество Scheme
ну то есть все равно куча вариантов, но можно найти
источник

PG

Pïg Grëënëst in Сообщество Scheme
Можно искать через site:srfi.schemers.org
источник

PG

Pïg Grëënëst in Сообщество Scheme
А ещё оказалось что у утки есть !srfi, но он работает по номерам
источник

AZ

Aydar Zarifullin in Сообщество Scheme
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Chezure

Chez Scheme биндинг для Rust’s regular expression API.

https://macdavid313.github.io/chezure/
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Тем временем протестировал хуки, работает вроде, но появились проблемы:
1) Пока не ясно как из C кода передавать аргументы.
2) Как вообще нормально запускать эти самые хуки из того же C.
3) Как быть с зависимостями которые надо ставить отдельно типа srfi-1

Пока всё очень примитивно. Движок (В данном случае darkplaces) инициализирует Chicken а затем грузит файл init.scm (название выбрано совершенно случайно) из этого файла естественно можно подгружать и другие. На скрине видно что я сначала импортирую модуль hook затем создаю хук и добавляю в него функцию.

Где-то в C коде мне остаётся лишь вызвать

CHICKEN_eval_string("(hook-run cl-init-hook)", NULL)

Под каждый хук наверное нужно будет создать отдельную C функцию так как hook-run принимает переменное число аргументов(на лисповый стороне) а C так не может (вернее может но тогда возникает проблема определения типа каждого аргумента для конвертации в лисповые сущности)
источник

AZ

Aydar Zarifullin in Сообщество Scheme
Интересно? Или не стоит захламлять чат?
источник