Jeffrey Meunier имеет неявный макрос Карри here, который использует defmacro. Мне было интересно, если кто-нибудь когда-либо писал это с помощью синтаксических правил?Неявное каррирование в схеме с синтаксическими правилами?
ответ
Существует множество реализаций карри для Схемы - ни один из них не может быть столь же изящным, как Haskell, поскольку функции всегда являются унарными функциями, поэтому все может быть в карри. (Но это, конечно, может быть реализовано на достаточно мощной схеме, например, Racket.)
Что касается макроса, который вы выкопали - это довольно плохо: он использует не только антисанитарный макрос, но и вызывая eval
явно и полагаясь на реализацию среды и т. д. Но это легко сделать с помощью простого макроса syntax-rules
. AFAICT, это то, что он реализует:
(define-syntax-rule (clambda (x ... . r) b ...)
(let ([len (length '(x ...))] [real (lambda (x ... . r) b ...)])
(let loop ([argss '()] [n 0])
(lambda args
(let ([n (+ n (length args))] [argss (cons args argss)])
(if (>= n len)
(apply real (apply append (reverse argss)))
(loop argss n)))))))
Но здесь важное примечание. На странице, на которой вы ссылаетесь, говорит о том, что проблема версии функции заключается в том, что она явная - но она также имеет важное преимущество: при реализации макроса вы должны определить функцию с использованием clambda
, тогда как функциональную версию можно использовать с любым встроенным функция. Во многих реализациях Схемы есть возможности для проверки возможности функции, и с ее помощью можно реализовать версию функции currying, которая знает, когда вызывать исходную функцию.
- 1. Схема: разница между определением и определениями-синтаксическими-правилами
- 2. mismatchedtoken с Antlr синтаксическими предикатами
- 3. Каррирование в библиотеке YUI3
- 4. Каррирование синтаксис в Скале
- 5. Каррирование цепочки функций, связанных -:
- 6. Каррирование и составитель дизайн
- 7. Каррирование и закрытие?
- 8. Трубы, состав и каррирование
- 9. Haskell Несколько контекстов - каррирование?
- 10. Как сделать каррирование с помощью UnderscoreJS?
- 11. Flex Builder новые проекты с синтаксическими ошибками
- 12. Случайный список с правилами
- 13. Проблема с правилами mod_rewrite
- 14. XAML связывания с правилами
- 15. Работа с правилами SonarQube
- 16. Нужна помощь в понимании лямбда (каррирование)
- 17. Помощь с правилами проверки
- 18. Проблема с правилами Openhab
- 19. Расширенный дизайн базы данных опроса с правилами
- 20. соединения с правилами iptable
- 21. Работа с правилами PMD
- 22. Сплит с правилами javascript
- 23. Различия между деривативными правилами и допустимыми правилами?
- 24. Управление правилами в WF
- 25. C++: Разница между синтаксическими указателями указателя
- 26. генерация строки с определенными правилами
- 27. Имея проблемы с Правилами перезаписи
- 28. Проблема с правилами безопасности мод
- 29. Использование String.succ с различными правилами?
- 30. Запросы формы с пользовательскими правилами