F #, запрещая .NET Interop, кажется довольно проще, чем, скажем, C#. (Не совсем собирание на нем, в частности, но так как это еще один популярный .NET язык ...)
Возьмите F # функции, например:
- Там нет никакой магии «пустота» типа-то будет-not- на самом деле-а-типа
- Следовательно, все выражение
- Все функции унарные
- функции первого класса типа
Прямо там у вас есть система функций, которая намного проще, чем, скажем, C#, где void создает специальный случай, и нет возможности обобщения для всех функций.
Что касается вашего конкретного вопроса, «let f x = x» по сравнению с «let f = fun x -> x», это, вероятно, унаследованная черта от ML. (Я не вижу какой-либо особой причины, почему это не могло быть «let f = fun x = x», разве что, возможно, это было бы более запутанным и, возможно, сделать грамматику более сложной? (Лично я бы предпочел " пусть f = \ xx ".)) В любом случае, хотя в большинстве случаев они эквивалентны, иногда вы должны определить синтаксическую функцию вместо значения функции.
.NET interop может, к сожалению, сделать вещи немного более сложными, хотя, вероятно, не больше или намного больше, чем другие языки .NET.
если у вас есть #Light, включите его. – nlucaroni
Поскольку все примеры, которые я вижу, имеют # свет, я бы не имел понятия, как писать код F # без него. – Qwertie
Спецификация F # охватывает то, что делает синтаксис #light (раздел 15, IIRC). В общем, вы будете добавлять много «в» повсюду. Я не думаю, что полезно отключить его (для обучения), так как синтаксис #light довольно прост. – MichaelGG