Вопрос

Прочитав «Practical Common Lisp», я наконец понял, в чем суть макросов, и стал искать язык для платформы .NET, который бы это поддерживал.Существует несколько диалектов Lisp для .NET, но, насколько мне удалось собрать, все они либо являются бета-версиями, либо заброшены.Недавно мой интерес вызвал Clojure, но он предназначен для платформы Java, и хотя на нем, вероятно, можно использовать ikvm, он не кажется каким-то интегрированным.Особенно, если вы хотите делать что-то вроде WPF.

Недавно до меня дошли слухи о F#, я пытался поискать в документации что-нибудь о поддержке макросов, но не нашел.Так кто-нибудь знает?

Спасибо :)

Это было полезно?

Решение

Ну, F# основан на OCaml, а у OCaml довольно обширная система макросов.Учитывая синтаксическое и семантическое сходство F# и OCaml, вы можете перенести систему макросов Ocaml на F#.

Кроме кражи макросистемы Ocaml, мне неизвестна стандартная макросистема для F#.

Другие советы

Немерль, в http://nemerle.org/ , — это язык .NET (также поддерживающий моно), который поддерживает многие парадигмы функционального программирования, оставаясь при этом визуально близким к C#.Он имеет обширную поддержку макросов.

Неа.Нет макросов для F#.

Вы посмотрели Бу?Хотя в Boo нет макросов, у него есть открытый конвейер компиляции, который является хорошей альтернативой макросам для синтаксического метапрограммирования.

[EDIT] Как отмечено в комментариях, Бу делает теперь есть макросы.

но, боже мой, синтаксис в этих примерах ocaml выглядит неясным

Здесь вы сталкиваетесь с тем же фундаментальным синтаксическим компромиссом, что и с Лиспом.Если вам нужны возможности lisp-подобных макросов, вы, как правило, либо получите lisp-подобный синтаксис для языка, либо ваш синтаксис макросов будет сильно отличаться от вашего обычного синтаксиса...нет ничего плохого в любом подходе, просто разные варианты

Я подумал, что должен отметить, что сейчас существует довольно активный порт .NET/Mono. Кложур.Clojure поддерживает макросы в стиле LISP, как указано в вопросе.

Как уже говорили другие, макросы не поддерживаются в F # на данный момент (конец 2010 г.).

Недавно до меня дошли слухи о F#, я пытался поискать в документации что-нибудь о поддержке макросов, но не нашел.Так кто-нибудь знает?

F# не поддерживает макросы и вряд ли когда-либо будет.

Как насчет использования кавычек F#?

http://tomasp.net/blog/fsquotations.aspx

Это может быть наоборот, чем вы хотите, но знаете ли вы о РДНЗЛ?Это интерфейс иностранных функций (FFI), который позволяет вам вызывать библиотеки .NET из вашего кода Lisp.

Скорее всего, они гораздо менее зрелы, чем любая реализация Common Lisp или Scheme, но существуют диалекты Lisp для .NET: Л# и ДотЛисп.

Есть два активно разрабатываемых Lisp для .net.

Железная схема - Реализация схемы на основе DLR

Ксронос - Порт Clojure на базе DLR

В настоящее время я изучаю возможности метапрограммирования на F #.Если мы определим макросы как текстовый шаблон, который расширяется до кода, то есть два очевидных подхода:

  1. Шаблоны Т4.Существует реализация для F#: https://github.com/kerams/Templatus

  2. Я где-то видел вызов F# из строк в отдельную сборку и последующую загрузку сборки.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top