glider88 / php-trampoline
Trampoline realization for php
1.0.1
2026-05-04 17:58 UTC
Requires
- php: ^8.2
Requires (Dev)
- phpunit/phpunit: ^11.0
README
Stack save recursion with trampoline.
Installation:
composer require glider88/php-trampoline
Start:
bin/re # first run
bin/up # start app
bin/unit # run tests
Can do this:
/** @return Trampoline<int> */ function ackermann(int $n, int $m): Trampoline { if ($n === 0) { return done($m + 1); } if ($m === 0) { return suspend(static fn() => ackermann($n - 1, 1)); } return suspend(static fn() => ackermann($n, $m - 1)) ->flatMap( static fn($res) => suspend(static fn() => ackermann($n - 1, $res)) ); } $this->assertEquals(7, run(ack(2, 2)));
more examples in test/TrampolineTest.php