Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
let rec sum i =
if i <= 0L then 0L
else i + sum (i - 1L)
let sumFTailRec f i =
let rec loop acc i =
if i <= 0L then acc
else loop (acc + f i) (i - 1L)
loop 0L i
let sumTailRec acc i =
if i <= 0L then acc
else sumTailRec (acc + i) (i - 1L)
> sumTailRec 0L i
let rec sumTailRec ?(acc=0) i =
if i <= 0 then acc
else sumTailRec ~acc:(acc+i) (i-1);;
# sumTailRec 5;;
- : int = 15
# sumTailRec ~acc:5 5;;
- : int = 20let sumFirst n = foldl (fun a b -> a + b) 0 [1..n]
let sumFirst n = sum [1..n]
let sumFirst n = (n + 1) * n / 2
var
stack : array [1..maxstack] of TStackFrame;
state = ...;
current = foo;
return true;
class Sample
{
struct Implementation;
Implementation impl;
public:
Sample();
};
...
new Sample(); // Сейчас эта строчка не скомпилируется - компилятору нужен размер Sample
let rec reverse acc lst =
match lst with
| [] -> acc
| hd :: tl -> reverse (hd :: acc) tl
let foldl f lst = List.fold f (List.rev lst)
Кстати, вместо (fun i -> i) можно воспользоваться функцией id.
F# Хвостовая рекурсия. Подводные грабли. Часть 1