KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
I've always believed that in F# we needed to use the rec keyword for every recursive function, for example: let rec factorial = function | 0 -> 1 | k when k > 0 -> k * (factorial (k - 1)) | failwith "oops!" Today I was playing around with F# and I came up with a code similar to the following: let MyRecordType = { Something : float; SomethingElse : int } with static member factorial = function | 0 -> 1 | k when k > 0 -> k * (MyRecordType.factorial (k - 1)) | failwith "oops!" As you see, I've just defined a recursive function, but I made what at first seemed like a mistake: I forgot to declare the function as recursive by means of the rec keyword. But to my surprise it compiles ! And there's more to it: if you add the rec keyword, then it is a syntax error! type MyRecordType = { (* ... *) } with // syntax error: static member rec factorial = function (* ... *) I've googled around for an explanation but got nothing. In the MSDN documentation, I couldn't find any mention to the rec keyword outside the page about recursive functions , and as of 2010-01-03 it does not mention the case I'm asking about. Exactly the same thing happens with non-static members. So, why is it a syntax error to use the rec keyword on member functions of a record-type ?
Tags (comma-separated)
Save Edits
Cancel