Я немного новичок в F #, и я столкнулся с каким-то странным поведением, когда работал с некоторыми рекурсивными функциями. У меня есть две разные версии этого ниже:Рекурсивные аргументы функции # и переполнение стека
Версия 1:
Это вызывает переполнение стека, хотя и кажется, что он не должен (по крайней мере, на моих глазах нуб)
let rec iMake acc =
match acc with
| 10 -> 100
| _ -> iMake acc+1
Version2:
Это работает так, как я ожидал.
let rec iMake acc =
match acc with
| 10 -> 100
| _ -> iMake (acc+1)
Единственная разница в том, что версия 2 помещает выражение acc + 1 в скобки. Поэтому мой вопрос: почему первая версия не работает, а вторая? Означает ли это, что я должен поместить все аргументы моей функции в круглые скобки, чтобы избежать этого типа вещей в будущем?
Я вижу, поэтому он пытается прибавить к результату (Imake акк), и именно там StackOverflow откуда. acc фактически никогда не увеличивается, интересно. –