Is F# really better than C# for math?

I think most of the important points were already mentioned by someone else:

  1. F# lets you solve problems in a way mathematicians think about them
  2. Thanks to higher-order functions, you can use simpler concepts to solve difficult problems
  3. Everything is immutable by default, which makes the program easier to understand (and also easier to parallelize)

It is definitely true that you can use some of the F# concepts in C# 3.0, but there are limitations. You cannot use any recursive computations (because C# doesn’t have tail-recursion) and this is how you write primitive computations in functional/mathematical way. Also, writing complex higher order functions (that take other functions as arguments) in C# is difficult, because you have to write types explicitly (while in F#, types are inferred, but also automatically generalized, so you don’t have to explicitly make a function generic).

Also, I think the following point from Marc Gravell isn’t a valid objection:

From a maintenance angle, I’m of the view that suitably named properties etc are easier to use (over full life-cycle) than tuples and head/tail lists, but that might just be me.

This is of course true. However, the great thing about F# is that you can start writing the program using tuples & head/tail lists and later in the development process turn it into a program that uses .NET IEnumerables and types with properties (and that’s how I believe typical F# programmer works*). Tuples etc. and F# interactive development tools give you a great way to quickly prototype solutions (and when doing something mathematical, this is essential because most of the development is just experimenting when you’re looking for the best solution). Once you have the prototype, you can use simple source code transformations to wrap the code inisde an F# type (which can also be used from C# as an ordinary class). F# also gives you a lot of ways to optimize the code later in terms of performance.

This gives you the benefits of easy to use langauges (e.g. Python), which many people use for prototyping phase. However, you don’t have to rewrite the whole program later once you’re done with prototyping using an efficient language (e.g. C++ or perhaps C#), because F# is both “easy to use” and “efficient” and you can fluently switch between these two styles.

(*) I also use this style in my functional programming book.

Leave a Comment

Hata!: SQLSTATE[HY000] [1045] Access denied for user 'divattrend_liink'@'localhost' (using password: YES)