"(?:\\"|.)*?"
Чередование \"
и .
проходит через экранированные кавычки, в то время как ленивый квантификатор *?
гарантирует, что вы не проходите мимо конца строки с кавычками. Работает с классами .NET Framework RE
Основные отличия - то, что F# не поддерживает:
, Кроме того, F# имеет другой синтаксис для маркированных и дополнительных параметров.
В теории, программы OCaml, которые не используют эти функции, могут быть скомпилированы с F#. Изучение OCaml является совершенно разумным введением в F# (и наоборот, я вообразил бы).
полный список различий здесь (примечание: замена archive.org битой ссылки).
Я всегда описываю F# как кузена OCaml, потому что OCaml имеет много функций, которые F# не имеет и вероятно, никогда не будет, получать. F# более тесно связан с предыдущим языком CAML. В частности, F# имеет очень ограниченную поддержку абстракции и никакую поддержку структурного ввода (как OCaml's объекты и полиморфные варианты ) вообще.
Вопреки тому, что записали некоторые респонденты, F# действительно имеет (ограниченную) поддержку маркированных ("именованных") и дополнительных аргументов.
Однако это все расширенные функции, и можно, конечно, начать справляться с основными идеями позади небольшого функционального программирования OCaml-стиля с помощью ресурсов о OCaml. Первым существенным различием, которое Вы обнаружите, являются проблемы более широкого масштаба как инкапсуляция и абстракция, которые решены совершенно другими способами в OCaml и в F#. Если Вы хотите изучить, как сделать это в F#, единственная доступная литература эта статья о чисто функциональных структурах данных .
я также обнаружил, что замечательная система модуля OCAML помогает параметризовать код по типам (таким как структуры данных), но альтернативы ООП не только отвратительны, но и почти совершенно не использованы на.NET. Кроме того, при попытке записать изящно параметризованные структуры данных я поразил десятки ошибок в компиляторе F#, потому что никто даже не попытался сделать это прежде. F# stdlib действительно содержит некоторые хорошие реализации структуры данных, но фактически никакое повторное использование, т.е. это - cut'n'paste задание.
F# поддерживает синтаксис OCaml непосредственно. Это не могло бы быть на 100% совместимо, но я думаю, что это достаточно близко.
http://plus.kaist.ac.kr/~shoh/fsharp/html/index.html
Вот является списком различий (не уверенный, насколько актуальный это)
http://plus.kaist.ac.kr/~shoh/fsharp/html/fsharp-vs-ocaml.html
F # и OCaml с таксономической точки зрения являются классами в семействе языков ML, которое включает в себя целый ряд других странных животных. F # новее, чем OCaml, и в нем пока нет ни функторов [функции модуля -> модуль], ни типов строк [классов объектов и полиморфных вариантов]. В совокупности эти два упрощения, вероятно, облегчат кривую обучения для тех, кто разрабатывает платформу .Net. К сожалению, эти две языковые функции являются чрезвычайно мощными в OCaml, поэтому чтение литературы по OCaml для понимания того, как кодировать для F #, вероятно, приведет к преждевременному разочарованию в последнем, хотя, вероятно, это отличная альтернатива C #, где доступны оба.
На этот вопрос уже давно есть ответы, но я был весьма удивлен тем, что в большинстве ответов говорится, какие функции OCaml отсутствуют в F # - это определенно полезно знать, хотите ли вы перенести существующие программы OCaml на F # (что, вероятно, является мотивацией для большинства упомянутых статей). Однако есть много функций, которые делают F # другим языком (а не только ограниченной версией OCaml для.NET!) Вот несколько вещей, которые добавлены в F #:
+
для всех числовых типов, а также для тех, которые его поддерживают. И, честно говоря, я думаю, что также стоит упомянуть Visual Studio IDE. Это не часть языка, но это действительно улучшает взаимодействие с пользователем (поддержка IntelliSense в Visual Studio действительно хороша!)
Если вы посмотрите на список, есть много вещей, которые в значительной степени способствовали популярности F #, так что это намного больше, чем просто «OCaml без функторов». F # определенно основан на OCaml (и заимствует идеи из других языков, таких как Haskell) и имеет много общего с ними, но есть и много других вещей.Я предполагаю, что без таких вещей, как асинхронные рабочие процессы, объектно-ориентированный объект в стиле .NET и метапрограммирование, Microsoft Developer Division никогда бы не включил F # в Visual Studio 2010.