Zdaję sobie sprawę, że zagięcie w lewo tworzy drzewa pochylone w lewo, a zagięcie w prawo tworzy drzewa pochylone w prawo, ale kiedy sięgam po fałd, czasami zapadam się w myśl wywołującą ból głowy, próbując określić, który rodzaj fałdu jest odpowiednie. Zwykle kończę rozwijanie całego problemu i przechodzenie przez implementację funkcji zwijania, która dotyczy mojego problemu.
Więc chcę wiedzieć:
- Jakie są praktyczne zasady decydujące o tym, czy spasować w lewo, czy w prawo?
- Jak mogę szybko zdecydować, jakiego rodzaju fałdy użyć, biorąc pod uwagę napotkany problem?
W Scala by Example (PDF) jest przykład użycia zawinięcia do napisania funkcji o nazwie flatten, która łączy listę list elementów w jedną listę. W takim przypadku właściwy wybór jest właściwym wyborem (biorąc pod uwagę sposób łączenia list), ale musiałem się trochę nad tym zastanowić, aby dojść do takiego wniosku.
Ponieważ składanie jest tak powszechną czynnością w programowaniu (funkcjonalnym), chciałbym móc podejmować takie decyzje szybko i pewnie. Więc ... jakieś wskazówki?