поддержка макросов в F # - PullRequest
21 голосов
/ 18 сентября 2008

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

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

Спасибо:)

Ответы [ 11 ]

13 голосов
/ 18 сентября 2008

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

11 голосов
/ 18 сентября 2008

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

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

7 голосов
/ 18 сентября 2008

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

6 голосов
/ 18 сентября 2008

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

[РЕДАКТИРОВАТЬ] Как отмечалось в комментариях, Boo теперь имеет макросы.

4 голосов
/ 07 ноября 2010

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

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

4 голосов
/ 18 сентября 2008

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

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

3 голосов
/ 01 сентября 2010

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

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

2 голосов
/ 23 июня 2010

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

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

1 голос
/ 12 декабря 2008

Для .net

есть два активно разработанных Лиспа.

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

Xronos - основанный на DLR порт clojure

1 голос
/ 19 сентября 2008

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

Скорее всего, они гораздо менее развиты, чем любая реализация Common Lisp или Scheme, но есть диалекты Lisp для .NET: L # и DotLisp .

...