เบฅเบฐเบเบนเบฎเปเบญเบเบเบตเปเบเปเบฒเบเบกเบฒเบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบเบปเปเบฒเบฎเปเบงเบก
เปเบเบเบฒเบเบฐเปเบเบฑเบเบเบนเปเปเบเบปเปเบฒเบฎเปเบงเบกเปเบ Google Summer of Code 2019, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบฎเบฑเบเปเบเบเบเบฒเบเบเบฒเบเปเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบ
เปเบเบเบปเบเบเบฝเบเบเบตเป, เบเปเบญเบเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบ algorithm เบเบญเบเบเปเบญเบเปเบเบเบฒเบเบเบงเบเบชเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบเบเบฒเบเบชเบญเบเบชเปเบงเบเปเบ Haskell. เปเบเบดเบเปเบกเปเบเบงเปเบฒ algorithm เปเบกเปเบเบซเบเบถเปเบเปเบเบเบทเปเบเบเบฒเบเบเบตเปเบชเบธเบ, เบเบฒเบเบเบฐเบเบดเบเบฑเบเบกเบฑเบเบเบตเปเบชเบงเบเบเบฒเบกเปเบเบฎเบนเบเปเบเบเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบเปเบเปเปเบเปเปเบงเบฅเบฒเบซเบผเบฒเบเบเบฑเปเบเปเบฅเบฐเบฎเบฝเบเบฎเปเบญเบเปเบซเปเบกเบตเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบซเบผเบฒเบ. เบเบฑเปเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบปเบเบฅเบปเบเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบเบเบฑเบ monad transformers.
เบเปเบฝเบงเบเบฑเบเบเบปเบงเปเบฎเบปเบฒเปเบญเบ
เบเปเบญเบเบเบทเป Vasily Alferov, เบเปเบญเบเปเบเบฑเบเบเบฑเบเบชเบถเบเบชเบฒเบเบตเบเบต 4 เบเบตเป St. Petersburg HSE. เบเปเบญเบเบซเบเปเบฒเบเบตเปเปเบ blog เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฝเบ
เบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฑเบเบเบฑเปเบเบเบฐเบเบดเบเบฑเบ algorithm
เบเปเบฒเบญเบฐเบเบดเบเบฒเบ
เบเบฑเบเบชเบถเบเบชเบฒเบเบตเปเปเบเบปเปเบฒเบฎเปเบงเบกเปเบเบเบเบฒเบเปเบเปเบฎเบฑเบเบเบฒเบเบเบธเบเบเบนเปเบขเปเบฒเบเปเบเบเปเบฎเบเปเบ blog. เบเบงเบเปเบเบปเบฒเปเบเปเปเบซเปเบเปเบญเบเบกเบตเปเบงเบเบตเบชเปเบฒเบฅเบฑเบ blog
เบเบถเบเบเปเบฒเบฎเปเบญเบเบเปเบเบตเปเบกเบตเบฅเบฐเบซเบฑเบเปเบเบเปเบฒเบเบฒเบกเบชเบฒเบกเบฒเบเบเบปเบเปเบเป
เปเบเบปเปเบฒเบชเบฒเบกเบฒเบเบญเปเบฒเบเบเปเบฝเบงเบเบฑเบเบเบปเบเบเบญเบเบเบฒเบเปเบฎเบฑเบเบงเบฝเบเบเบญเบเบเปเบญเบ (เปเบเบฑเบเบเบฒเบชเบฒเบญเบฑเบเบเบดเบ)
เบเบญเบเบเบตเปเบชเบปเบกเบกเบธเบเบงเปเบฒเบเบนเปเบญเปเบฒเบเบกเบตเบเบงเบฒเบกเบเบธเปเบเปเบเบตเบเบเบฑเบเปเบเบงเบเบงเบฒเบกเบเบดเบเบเบทเปเบเบเบฒเบเปเบเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบกเบเบตเปเบกเบตเบเบฐเปเบซเบเบ, เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเปเบญเบเบเบฐเบเบฐเบเบฒเบเบฒเบกเบเบทเปเบเปเบฒเบเปเบฒเบชเบฑเบเบเบฑเบเบซเบกเบปเบเบเบตเปเปเบเปเปเบเปเบงเบฅเบฒเบเบตเปเปเบงเบฅเบฒเบกเบฒ.
เบเบฒเบเบเบงเบเบชเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ bipartiteness
เบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบงเบเบชเบญเบเบเบฒเบเบชเปเบฒเบฅเบฑเบ bipartiteness เบเบปเบเบเบฐเบเบดเปเบฅเปเบงเปเบกเปเบเปเบเปเบเบทเบเบกเบญเบเปเบซเปเบขเบนเปเปเบเบซเบผเบฑเบเบชเบนเบเบเปเบฝเบงเบเบฑเบเบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเปเบเบฑเบเบซเบเบถเปเบเปเบเบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเบเบฒเบเบเบตเปเบเปเบฒเบเบเบฒเบเบเบตเปเบชเบธเบ. เบเบงเบฒเบกเบเบดเบเบเบญเบเบฅเบฒเบงเปเบกเปเบเบเบปเบเปเบเบเบปเบเบกเบฒ: เบเปเบฒเบญเบดเบเบเบงเบเปเบฎเบปเบฒเบงเบฒเบเปเบเบงเบเบฑเปเบเบขเบนเปเปเบเบชเปเบงเบเปเบเปเบเบเปเบฒเบเบซเบผเบทเบเบงเบฒ, เปเบฅเบฐเปเบกเบทเปเบญเบเบปเบเบเบญเบเบเบตเปเบเบฑเบเปเบเปเบ, เบเบงเบเปเบฎเบปเบฒเบขเบทเบเบขเบฑเบเบงเปเบฒเปเบชเบฑเปเบเบชเบฐเปเบเบเบเปเปเปเบกเปเบเบชเบญเบเบชเปเบงเบ.
เบฅเบฒเบเบฅเบฐเบญเบฝเบเปเบเบตเปเบกเปเบเบตเบกเปเบฅเบฑเบเบเปเบญเบ: เบเปเบฒเบญเบดเบเบเบงเบเปเบฎเบปเบฒเปเบญเบปเบฒเบเบฒเบเบเบธเบเบขเบนเปเปเบเบชเปเบงเบเปเบเปเบเบเปเบฒเบ. เปเบเปเบเบญเบ, เบเบฐเปเบเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบฑเบเบซเบกเบปเบเบเบญเบ vertex เบเบตเปเบเปเบญเบเบเบญเบเบขเบนเปเปเบ lobe เบเบตเปเบเบทเบเบเปเบญเบ. เบเบญเบเบเบฒเบเบเบฑเปเบ, เบเบฐเปเบเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบฑเบเบซเบกเบปเบเบเบญเบเบเบฐเปเบเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบญเบ vertex เบเบตเปเบเปเบญเบเบเบญเบเบขเบนเปเปเบ lobe เบเปเบฒเบ, เปเบฅเบฐเบญเบทเปเบเป. เบเบงเบเปเบฎเบปเบฒเบชเบทเบเบเปเปเบเบฒเบเบกเบญเบเปเบฒเบเบฎเบธเปเบเปเบซเปเบเบฑเบเปเบเบงเบเบฑเปเบเบเบฒเบเปเบเบเบตเปเบเบฑเบเบกเบตเบเบธเบเบเบฑเปเบเบขเบนเปเปเบเบญเบปเบเบเบฐเบเบญเบเบเบตเปเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบเบญเบ vertex เบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบฅเบตเปเบกเบเบปเปเบเบเปเบงเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเปเปเบเปเบกเบญเบเปเบฒเบเปเบซเปเปเบเบทเปเบญเบเบเปเบฒเบ. เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเปเบฎเบฑเบเบเปเปเบฒเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบชเปเบฒเบฅเบฑเบเบญเบปเบเบเบฐเบเบญเบเบเบตเปเปเบเบทเปเบญเบกเบเปเปเบเบฑเบเบซเบกเบปเบ.
เบเปเบฒเบกเบตเบเบญเบเบฅเบฐเบซเบงเปเบฒเบเบเบธเบเบเบตเปเบเบปเบเบขเบนเปเปเบเบเบฒเบเปเบเปเบเบเบฑเบเบเบฝเบงเบเบฑเบ, เบกเบฑเบเบเปเปเบเบฒเบเบเบตเปเบเบฐเบเบญเบเบซเบฒเบงเบปเบเบเบญเบเบเบตเบเปเบเบเบฒเบ, เปเบเบดเปเบเปเบเบฑเบเบเบตเปเบฎเบนเปเบเบฑเบเบเบฑเบเบขเปเบฒเบเบเบงเปเบฒเบเบเบงเบฒเบ (เปเบฅเบฐเปเบเปเบเบญเบ) เปเบเบฑเบเปเบเบเปเปเปเบเปเปเบเบเบฒเบ bipartite. เบเปเบฒเบเปเปเบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบฒเบเปเบเปเบเบเบฑเบเบเบตเปเบเบทเบเบเปเบญเบ, เบเบถเปเบเบซเบกเบฒเบเบเบงเบฒเบกเบงเปเบฒเปเบชเบฑเปเบเบชเบฐเปเบเบเปเบกเปเบ bipartite.
เปเบเบเบเบปเบเบเบฐเบเบด, เบชเบนเบเบเบฒเบเบเบดเบเปเบฅเปเบเบตเปเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบเปเบเป
เบเบฑเปเบเบเบฑเปเบ, เบเบงเบเปเบฎเบปเบฒเบกเบฒเบฎเบญเบเปเบเบเบเบฒเบเบเบฑเปเบเบเปเปเปเบเบเบตเป. เบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบเบธเบเบเบฑเปเบเบเบญเบเบเบฒเบเปเบเบเปเบเปเบเบฒเบเบเบปเปเบเบซเบฒเบเบงเบฒเบกเปเบฅเบดเบเบเบฑเปเบเบเปเบฒเบญเบดเบเปเบฅเบฐเบกเบญเบเบซเบกเบฒเบเบเบฒเบเปเบเปเบเบเบฑเบเปเบซเปเบเบงเบเปเบเบปเบฒ, เบเปเบฝเบเบเปเบฒเบเบงเบเบชเปเบงเบเปเบเปเบเปเบเบเบฐเบเบฐเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเบเบญเบญเบเปเบเบเบฒเบกเปเบเบก. เบเปเบฒเบเบงเบเปเบฎเบปเบฒเบเบฐเบเบฒเบเบฒเบกเบกเบญเบเบชเปเบงเบเปเบเปเบเปเบซเปเบเบฑเบเบเบธเบเบชเบนเบเบชเบธเบเบเบตเปเบกเบตเบชเปเบงเบเปเบเปเบเบเบตเปเบเบทเบเบกเบญเบเบซเบกเบฒเบเปเบฅเปเบง, เบเบงเบเปเบฎเบปเบฒเบชเบฒเบกเบฒเบเปเบงเบปเปเบฒเปเบเปเบขเปเบฒเบเบเบญเบเปเบเบงเปเบฒเบเบฒเบเบเปเปเปเบกเปเบ bipartite. เปเบเบเบฑเบเบเบธเบเบฑเบเบเบธเบเบเบฑเปเบเบเบฑเบเบซเบกเบปเบเบเบทเบเบกเบญเบเบซเบกเบฒเบเบชเปเบงเบเปเบเปเบเปเบฅเบฐเบเบงเบเปเบฎเบปเบฒเปเบเปเปเบเบดเปเบเบขเบนเปเปเบเบกเบเบฑเบเบซเบกเบปเบ, เบเบงเบเปเบฎเบปเบฒเบกเบตเบเบฒเบเปเบเปเบเบเบฑเบเบเบตเปเบเบต.
เบเบงเบฒเบกเบเปเบฅเบดเบชเบธเบเบเบญเบเบเบฒเบเบเบดเบเปเบฅเป
เปเบ Haskell เบเบงเบเปเบฎเบปเบฒเบชเบปเบกเบกเบธเบเบงเปเบฒเบเบฒเบเบเบดเบเปเบฅเปเบเบฑเบเบซเบกเบปเบเปเบกเปเบ เบชเบฐเบญเบฒเบ. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เบเปเบฒเบเบตเปเปเบกเปเบเบเปเบฅเบฐเบเบตเบขเปเบฒเบเปเบเปเบเบดเบ, เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเปเบกเบตเบเบฒเบเบเบตเปเบเบฐเบเบดเบกเบชเบดเปเบเปเบเปเบเบซเบเปเบฒเบเป. เบเบฑเบเปเบปเบ, เบชเบฐเบญเบฒเบ เบเบฒเบโเบเบดเบโเปเบฅเปโเปเบกเปเบ lazy เบเบฑเปเบโเบงเปเบฒโเบเปเปโเบกเบตโเบซเบเบถเปเบโ เบชเบฐเบญเบฒเบ เปเบซเบเบเบปเบเปเบเบเบฒเบเบเบดเบเปเบฅเปเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบ. เบเบฒเบเบเบดเบเปเบฅเปเบเบฑเบเปเบปเบเบเบตเปเปเบเบตเบเบเบถเปเบเปเบเปเบเบเบเบฒเบเปเบกเปเบเบเบทเบเบเบฑเบเบเบฑเบเปเบซเปเปเบเบปเปเบฒเปเบชเปเปเบเบเบฒเบเบงเบดเบเบต "เบเปเปเบชเบฐเบญเบฒเบ" Monad IO.
Monads เปเบกเปเบเบงเบดเบเบตเบเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเบเบฒเบเบเบดเบเปเบฅเปเบเบฑเบ เบเบปเบเบเบฐเบเบปเบ เปเบ Haskell. เบเบฒเบเบญเบฐเบเบดเบเบฒเบเบงเปเบฒเบเบงเบเปเบเบปเบฒเปเบฎเบฑเบเบงเบฝเบเปเบเบงเปเบเปเบกเปเบเปเบเบตเบเบเบญเบเปเบเบเบเบญเบเปเบเบชเบเบตเป. เบเปเบฒเบญเบฐเบเบดเบเบฒเบเบเบตเปเบเบตเปเบฅเบฐเบเบฑเบเปเบเบเบชเบฒเบกเบฒเบเบญเปเบฒเบเปเบเบฑเบเบเบฒเบชเบฒเบญเบฑเบเบเบดเบ
เปเบเบเบตเปเบเบตเปเบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเบญเบเบเบฒเบเบเบตเปเบเบฐเบเบตเปเปเบซเปเปเบซเบฑเบเบงเปเบฒเปเบเบเบฐเบเบฐเบเบตเปเบเบฒเบ monads, เปเบเบฑเปเบ IO, เปเบเปเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบเบเปเบฒเบเบเบฒเบ compiler magic, เปเบเบทเบญเบเบเบฑเบเบซเบกเบปเบเบญเบทเปเบเปเปเบเปเบเบทเบเบเบฐเบเบดเบเบฑเบเปเบเบเบญเบเปเบงเปเบฅเบฐเบเบฒเบเบเบดเบเปเบฅเปเบเบฑเบเบซเบกเบปเบเปเบเบเบงเบเบกเบฑเบเปเบกเปเบเบเปเบฅเบดเบชเบธเบ.
เบกเบตเบซเบผเบฒเบเบเบปเบเบเบฐเบเบปเบเปเบฅเบฐเปเบเปเบฅเบฐเบเบปเบเบกเบต monad เบเบญเบเบเบปเบเปเบญเบ. เบเบตเปเปเบกเปเบเบเบดเบเบชเบฐเบเบตเบเบตเปเปเบเบฑเปเบกเปเบเบเปเบฅเบฐเบชเบงเบเบเบฒเบกเบซเบผเบฒเบ: monads เบเบฑเบเบซเบกเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบเปเบเปเบเบญเบเบเบฝเบงเบเบฑเบ. เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบชเบฒเบก monads เบเบฑเปเบเบเปเปเปเบเบเบตเป:
- เบเบฑเบ e a เปเบกเปเบเบเบฒเบเบเบดเบเปเบฅเปเบเบตเปเปเบซเปเบเปเบฒเบเบญเบเบเบฐเปเบเบ a เบซเบผเบทเบเบดเปเบกเบเปเปเบเบปเบเปเบงเบฑเปเบเบเบญเบเบเบฐเปเบเบ e. เบเบถเบเบเบดเบเปเบฒเบเบญเบ monad เบเบตเปเปเบกเปเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฑเบเบเบฒเบเบเบฑเบเบเบฒเบเบเปเปเบเบปเบเปเบงเบฑเปเบเปเบเบเบฒเบชเบฒเบเบตเปเบเปเบฒเปเบเบฑเบ: เบเบงเบฒเบกเบเบดเบเบเบฒเบเบชเบฒเบกเบฒเบเบเบทเบเบเบฑเบเปเบเปเบซเบผเบทเบชเบปเปเบเบเปเป. เบเบงเบฒเบกเปเบเบเบเปเบฒเบเบเบปเปเบเบเปเปเบกเปเบเบงเปเบฒ monad เปเบเปเบเบทเบเบเบฐเบเบดเบเบฑเบเบขเปเบฒเบเบชเบปเบกเบเบนเบเปเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบเบกเบฒเบเบเบฐเบเบฒเบเปเบ Haskell, เปเบเบเบฐเบเบฐเบเบตเปเบเบฒเบชเบฒ imperative เบเบปเบเบเบฐเบเบดเปเบฅเปเบงเปเบเปเบเบปเบเปเบเบเบญเบเบฅเบฐเบเบปเบเบเบฐเบเบดเบเบฑเบเบเบฒเบ.
- เบฅเบฑเบ s a เปเบกเปเบเบเบฒเบเบเบดเบเปเบฅเปเบเบตเปเบชเบปเปเบเบเบทเบเบเปเบฒเบเบญเบเบเบฐเปเบเบ a เปเบฅเบฐเบกเบตเบเบฒเบเปเบเบปเปเบฒเปเบเบดเบเบชเบฐเบเบฒเบเบฐเบเบญเบเบเบฐเปเบเบ s.
- เบเบฒเบเบเบต เบ. The Maybe monad เบชเบฐเปเบเบเบญเบญเบเบเบฒเบเบเบดเบเปเบฅเปเบเบตเปเบชเบฒเบกเบฒเบเบเบฑเบเบเบงเบฒเบเปเบเปเบเบธเบเปเบงเบฅเบฒเปเบเบเบเบฒเบเบเบฑเบเบเบทเบเบเปเปเบกเบตเบซเบเบฑเบ. เบขเปเบฒเบเปเบเบเปเปเบเบฒเบก, เบเบงเบเปเบฎเบปเบฒเบเบฐเปเบงเบปเปเบฒเบเปเบฝเบงเบเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบเบซเปเบญเบเบฎเบฝเบ MonadPlus เบชเปเบฒเบฅเบฑเบเบเบฐเปเบเบ Maybe, เปเบเบดเปเบเบชเบฐเปเบเบเบเบปเบเบเบปเบเบเบฑเบเบเปเบฒเบก: เบกเบฑเบเปเบเบฑเบเบเบฒเบเบเบดเบเปเบฅเปเบเบตเปเบชเบฒเบกเบฒเบเบเบฑเบเบเบงเบฒเบเปเบเปเบเบธเบเปเบงเบฅเบฒเปเบเบเบเบฒเบเบชเบปเปเบเบเบทเบเบเปเบฒเบชเบฐเปเบเบฒเบฐ.
เบเบฒเบโเบเบฐโเบเบดโเบเบฑเบโเบเบญเบ algorithmโ
เบเบงเบเปเบฎเบปเบฒเบกเบตเบเปเปเบกเบนเบเบชเบญเบเบเบฐเปเบเบเบเบท Graph a เปเบฅเบฐ Bigraph a b, เบญเบฑเบเบเบณเบญเบดเบเบชเบฐเปเบเบเปเบเบดเบเบเบฃเบฒเบเบเบตเปเบกเบตเปเบเบงเบเบฑเปเบเบเบดเบเบชเบฐเบซเบผเบฒเบเบเปเบงเบเบเปเบฒเบเบญเบเบเบฐเปเบเบ a, เปเบฅเบฐเบญเบฑเบเบเบตเบชเบญเบเบชเบฐเปเบเบเปเบเบดเบเบเบฃเบฒเบ bipartite เบเบตเปเบกเบตเบเบธเบเบเบฑเปเบเบเปเบฒเบเบเปเบฒเบเบเบดเบเบชเบฐเบซเบผเบฒเบเบเปเบงเบเบเปเบฒเบเบญเบเบเบฐเปเบเบ a เปเบฅเบฐเบเบงเบฒ. -side vertices เบเบดเบโเบชเบฐโเบซเบผเบฒเบโเบเบตเปโเบกเบตโเบเบธเบโเบเปเบฒโเบเบญเบโเบเบฐโเปเบเบ bโ.
เปเบซเบผเบปเปเบฒเบเบตเปเบเปเปเปเบกเปเบเบเบฐเปเบเบเบเบฒเบเบซเปเบญเบเบชเบฐเบซเบกเบธเบ Alga. Alga เบเปเปเบกเบตเบเบฒเบเปเบเบฑเบเบเบปเบงเปเบเบเบเบญเบเบเบฒเบ bipartite เบเบตเปเบเปเปเบกเบตเบเบดเบเบเบฒเบ. เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเปเบฎเบฑเบเบเบฐเปเบเบเบเบตเปเปเบเบทเปเบญเบเบงเบฒเบกเบเบฑเบเปเบเบ.
เบเบงเบเปเบฎเบปเบฒเบเบฑเบเบเปเบญเบเบเบฒเบเบซเบเปเบฒเบเบตเปเบเบนเปเบเปเบงเบเบเบตเปเบกเบตเบฅเบฒเบเปเบเบฑเบเบเปเปเปเบเบเบตเป:
-- ะกะฟะธัะพะบ ัะพัะตะดะตะน ะดะฐะฝะฝะพะน ะฒะตััะธะฝั.
neighbours :: Ord a => a -> Graph a -> [a]
-- ะะพัััะพะธัั ะดะฒัะดะพะปัะฝัะน ะณัะฐั ะฟะพ ะณัะฐัั ะธ ััะฝะบัะธะธ, ะดะปั ะบะฐะถะดะพะน ะฒะตััะธะฝั
-- ะฒัะดะฐััะตะน ะตั ะดะพะปั ะธ ะฟะพะผะตัะบั ะฒ ะฝะพะฒะพะน ะดะพะปะต, ะธะณะฝะพัะธััั ะบะพะฝัะปะธะบัะฝัะต ััะฑัะฐ.
toBipartiteWith :: (Ord a, Ord b, Ord c) => (a -> Either b c)
-> Graph a
-> Bigraph b c
-- ะกะฟะธัะพะบ ะฒะตััะธะฝ ะฒ ะณัะฐัะต
vertexList :: Ord a => Graph a -> [a]
ะกะธะณะฝะฐัััะฐ ััะฝะบัะธะธ, ะบะพัะพััั ะผั ะฑัะดะตะผ ะฟะธัะฐัั, ะฒัะณะปัะดะธั ัะฐะบ:
type OddCycle a = [a]
detectParts :: Ord a => Graph a -> Either (OddCycle a) (Bigraph a a)
เบกเบฑเบเปเบเบฑเบเปเบฅเบทเปเบญเบเบเปเบฒเบเบเบตเปเบเบฐเปเบซเบฑเบเบงเปเบฒเบเปเบฒเปเบเบฅเบฐเบซเบงเปเบฒเบเบเบฒเบเบเบปเปเบเบซเบฒเบเบงเบฒเบกเปเบฅเบดเบเบเบฑเปเบเบเปเบฒเบญเบดเบเบเบงเบเปเบฎเบปเบฒเบเบปเบเปเบซเบฑเบเบเบญเบเปเบเบเบเบตเปเบเบฑเบเปเบเปเบเบเบฑเบ, เบงเบปเบเบเบญเบเบเบตเบเบขเบนเปเปเบเบดเบเบชเบธเบเบเบญเบ stack recursion. เบเบฑเปเบเบเบฑเปเบ, เปเบเบทเปเบญเบเบทเปเบเบเบนเบกเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบเบฑเบเบเบธเบเบชเบดเปเบเบเบธเบเบขเปเบฒเบเบญเบญเบเบเบฒเบ stack recursion เปเบเบดเบเบเบฒเบเบเบฐเบเบปเบเบเบปเบงเบเบฑเปเบเบเปเบฒเบญเบดเบเบเบญเบ vertex เบชเบธเบเบเปเบฒเบ.
เบเบงเบเปเบฎเบปเบฒเบเบฐเบเบดเบเบฑเบเบเบฒเบเบเบปเปเบเบซเบฒเบเบงเบฒเบกเปเบฅเบดเบเบเบฑเปเบเบเปเบฒเบญเบดเบเปเบเบเบเบฒเบเบฎเบฑเบเบชเบฒ array เบชเบฐเบกเบฒเบเบปเบกเบเบญเบเบเบปเบงเปเบฅเบเบเบฒเบเปเบเปเบเบเบฑเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเบธเบ. stack recursion เบเบฐเบเบทเบเบฎเบฑเบเบชเบฒเปเบงเปเปเบเบเบญเบฑเบเบเบฐเปเบเบกเบฑเบเปเบเบเบเปเบฒเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบญเบ Functor class เบเบญเบ monad เบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเปเปเบฅเบทเบญเบ: เบเบงเบเปเบฎเบปเบฒเบเบฐเบเปเบญเบเบเบฒเบเบเบฝเบเปเบเปเปเบญเบปเบฒเบเบธเบเบเบฑเปเบเบเบฑเบเบซเบกเบปเบเบเบฒเบเปเบชเบฑเปเบเบเบฒเบเปเบเบปเปเบฒเปเบเปเบเบเบปเบเปเบเปเบฎเบฑเบเบเบตเปเบชเบปเปเบเบเบทเบเบเบฒเบเบซเบเปเบฒเบเบตเป recursive.
เบเบงเบฒเบกเบเบดเบเบเปเบฒเบญเบดเบเบเบญเบเบเปเบญเบเปเบกเปเบเปเบเป Either monad, เปเบเบดเปเบเปเบเบดเปเบเบเบทเบงเปเบฒเบเบฐเบเบฐเบเบดเบเบฑเบเบเบปเบเบเบฐเบเบปเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบญเบเบเบฒเบ. เบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฑเปเบเบเปเบฒเบญเบดเบเบเบตเปเบเปเบญเบเบเบฝเบเปเบกเปเบเปเบเปเบเบดเบเบเบฑเบเบเบฒเบเปเบฅเบทเบญเบเบเบตเป. เปเบเบเบงเบฒเบกเปเบเบฑเบเบเบดเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเบกเบตเบซเปเบฒเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบขเบนเปเปเบเบเบธเบเบซเบเบถเปเบเปเบฅเบฐเปเบเบเบตเปเบชเบธเบเบเปเปเปเบเปเบเบปเบเบฅเบปเบเบเบฑเบเบญเบตเบเบญเบฑเบเบซเบเบถเปเบ.
เบซเบเปเบฒเบเปเบฒเบญเบดเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเบฎเบฑเบเบชเบฒ array เบชเบฐเบกเบฒเบเบปเบกเบเบญเบเบเบปเบงเบฅเบฐเบเบธเบเบฒเบเปเบเปเบเบเบฑเบ - เบเบตเปเปเบกเปเบเบเบฒเบเบชเบดเปเบเบเบฒเบเบขเปเบฒเบเบเปเบฝเบงเบเบฑเบเบฅเบฑเบ. เบญเบฑเบเบเบตเบชเบญเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเบชเบฒเบกเบฒเบเบขเบธเบเปเบเบปเบฒเปเบเปเบงเบฅเบฒเบเบตเปเบเบฒเบเบเบฑเบเปเบเปเบเปเบเปเบเบทเบเบเบงเบเบเบปเบ. เบเบตเปเบชเบฒเบกเบฒเบเปเบเบฑเบ Monad เบชเปเบฒเบฅเบฑเบเบเบฑเบเบชเบญเบ, เบซเบผเบท MonadPlus เบชเปเบฒเบฅเบฑเบเบเบฒเบเบเบต. เบเบงเบฒเบกเปเบเบเบเปเบฒเบเบเบตเป เบชเบณ เบเบฑเบเปเบกเปเบเบงเปเบฒเบเบฑเบเบชเบญเบเบชเบฒเบกเบฒเบเบชเบปเปเบเบเบทเบเบเปเบฒเปเบเปเบเปเบฒเบเบฒเบเบเบดเบเปเบฅเปเบเปเปเปเบเปเบเบทเบเบขเบธเบ, เปเบฅเบฐเบเบฒเบเบเบตเบญเบฒเบเบเบฐเบชเบปเปเบเบเบทเบเบเบฝเบเปเบเปเบเปเปเบกเบนเบเบเปเบฝเบงเบเบฑเบเปเบฅเบทเปเบญเบเบเบตเปเปเบเบเปเบฅเบฐเบเบตเบเบตเป. เปเบเบทเปเบญเบเบเบฒเบเบเบงเบเปเบฎเบปเบฒเบเปเปเบเปเบญเบเบเบฒเบเบเปเบฒเปเบเบเบเปเบฒเบเบซเบฒเบเบชเปเบฒเบฅเบฑเบเบเบงเบฒเบกเบชเปเบฒเปเบฅเบฑเบ (เบกเบฑเบเบเบทเบเปเบเบฑเบเปเบงเปเปเบเบฅเบฑเบ), เบเบงเบเปเบฎเบปเบฒเปเบฅเบทเบญเบเบเบฒเบเบเบต. เปเบฅเบฐเปเบเบเบฑเบเบเบธเบเบฑเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบชเบปเบกเบเบปเบเบเบปเบเบเบฐเบเบปเบเบเบญเบเบชเบญเบ monads, เบเบงเบเปเบเบปเบฒเปเบเบปเปเบฒเบญเบญเบเบกเบฒ
เปเบเบฑเบเบซเบเบฑเบเบเปเบญเบเบเบถเปเบเปเบฅเบทเบญเบเบเบฐเปเบเบเบชเบฐเบฅเบฑเบเบชเบฑเบเบเปเบญเบเบเบฑเปเบเบเปเบฒเบง? เบชเบญเบเปเบซเบเบเบปเบ. เบเบฐเบเบฒเบเบเปเบฒเบญเบดเบ, เบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเปเบเบฒเบเปเบเบฑเบเบเปเบฒเบเบเบทเบเบฑเบเบเบฑเบเบเบงเบฒเบกเบเปเบฒเปเบเบฑเบ. เบญเบฑเบเบเบตเบชเบญเบ, เบเบงเบเปเบฎเบปเบฒเบเปเบฒเปเบเบฑเบเบเปเบญเบเปเบเปเบซเบกเบนเบเปเบเปเบเปเบฒเบเบฑเบเบเบทเบเปเบเบเปเบฅเบฐเบเบตเบเบญเบเบเบงเบฒเบกเบเบฑเบเปเบเปเบเปเบเปเบงเบฅเบฒเบเบตเปเบเบฑเบเบเบทเบเบกเบฒเบเบฒเบเบเบฒเบ recursion เปเบเบทเปเบญเบเบทเปเบเบเบน loop odd, เปเบเบดเปเบเบเปเบฒเบเบเบงเปเบฒเบเบตเปเบเบฐเปเบฎเบฑเบเปเบ Maybe monad.
เบเบฑเปเบเบเบฑเปเบเบเบงเบเปเบฎเบปเบฒเปเบเปเบฎเบฑเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเป.
{-# LANGUAGE ExplicitForAll #-}
{-# LANGUAGE ScopedTypeVariables #-}
data Part = LeftPart | RightPart
otherPart :: Part -> Part
otherPart LeftPart = RightPart
otherPart RightPart = LeftPart
type PartMap a = Map.Map a Part
type OddCycle a = [a]
toEither :: Ord a => PartMap a -> a -> Either a a
toEither m v = case fromJust (v `Map.lookup` m) of
LeftPart -> Left v
RightPart -> Right v
type PartMonad a = MaybeT (State (PartMap a)) [a]
detectParts :: forall a. Ord a => Graph a -> Either (OddCycle a) (Bigraph a a)
detectParts g = case runState (runMaybeT dfs) Map.empty of
(Just c, _) -> Left $ oddCycle c
(Nothing, m) -> Right $ toBipartiteWith (toEither m) g
where
inVertex :: Part -> a -> PartMonad a
inVertex p v = ((:) v) <$> do modify $ Map.insert v p
let q = otherPart p
msum [ onEdge q u | u <- neigbours v g ]
{-# INLINE onEdge #-}
onEdge :: Part -> a -> PartMonad a
onEdge p v = do m <- get
case v `Map.lookup` m of
Nothing -> inVertex p v
Just q -> do guard (q /= p)
return [v]
processVertex :: a -> PartMonad a
processVertex v = do m <- get
guard (v `Map.notMember` m)
inVertex LeftPart v
dfs :: PartMonad a
dfs = msum [ processVertex v | v <- vertexList g ]
oddCycle :: [a] -> [a]
oddCycle c = tail (dropWhile ((/=) last c) c)
เบเปเบญเบเบเบตเปเบเบฑเบเปเบกเปเบเบซเบผเบฑเบเบเบญเบ algorithm. เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเบฐเบเบฐเบเบฒเบเบฒเบกเบญเบฐเบเบดเบเบฒเบเบชเบดเปเบเบเบตเปเปเบเบตเบเบเบถเปเบเบเบฒเบเปเบเบกเบฑเบ.
- inVertex เปเบกเปเบเบชเปเบงเบเบซเบเบถเปเบเบเบญเบเบเบฒเบเบเบปเปเบเบซเบฒเบเบงเบฒเบกเปเบฅเบดเบเบเบฑเปเบเบเปเบฒเบญเบดเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเบขเปเบฝเบกเบขเบฒเบก vertex เปเบเบฑเบเบเบฑเปเบเบเปเบฒเบญเบดเบ. เปเบเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบกเบญเบเบซเบกเบฒเบเปเบฅเบเบชเปเบงเบเปเบเปเบเปเบซเปเบเบฑเบเบเบธเบเบชเบนเบเบชเบธเบเปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบ onEdge เปเบเปเบเบทเปเบญเบเบเปเบฒเบเบเบฑเบเบซเบกเบปเบ. เบเบตเปเปเบกเปเบเบเปเบญเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบทเปเบเบเบนเบเบฒเบเปเบญเบตเปเบ stack: เบเปเบฒ msum เบชเบปเปเบเบเบทเบเบเปเบฒ, เบเบงเบเปเบฎเบปเบฒเบเบนเป vertex v เบขเบนเปเบเบตเปเบเบฑเปเบ.
- onEdge เปเบกเปเบเบเบฒเบเบชเปเบงเบเบเบตเปเบเบงเบเปเบฎเบปเบฒเปเบเบขเปเบฝเบกเบขเบฒเบกเบเบญเบ. เบกเบฑเบเบเบทเบเปเบญเบตเปเบเบงเปเบฒเบชเบญเบเบเบฑเปเบเบชเปเบฒเบฅเบฑเบเปเบเปเบฅเบฐเบเบญเบ. เปเบเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบเบงเบเปเบเบดเปเบเบงเปเบฒ vertex เปเบเบญเบตเบเบเปเบฒเบเบซเบเบถเปเบเปเบเปเบเบทเบเปเบเบขเปเบฝเบกเบขเบฒเบก, เปเบฅเบฐเปเบเบขเปเบฝเบกเบขเบฒเบกเบกเบฑเบเบเปเบฒเบเปเปเปเบกเปเบ. เบเปเบฒเปเบเปเปเบเบขเปเบฝเบกเบขเบฒเบก, เบเบงเบเปเบฎเบปเบฒเบเบงเบเปเบเบดเปเบเบงเปเบฒเบเบญเบเปเบกเปเบเบเบฑเบเบเบฑเบเบเป. เบเปเบฒเบกเบฑเบเปเบเบฑเบ, เบเบงเบเปเบฎเบปเบฒเบชเบปเปเบเบเบทเบเบเปเบฒ - เปเบเบดเบเบชเบธเบเบเบญเบ stack recursion, เบเปเบญเบเบเบตเปเบเบญเบเบญเบทเปเบเปเบเบฑเบเบซเบกเบปเบเบเบฐเบเบทเบเบงเบฒเบเปเบงเปเปเบกเบทเปเบญเบเบฑเบเบเบทเบ.
- processVertex เบเบงเบเปเบเบดเปเบเปเบเปเบฅเบฐ vertex เบงเปเบฒเบกเบฑเบเปเบเปเบเบทเบเปเบเบขเปเบฝเบกเบขเบฒเบกเปเบฅเบฐเบเปเบฒเปเบเบตเบเบเบฒเบ inVertex เปเบชเปเบกเบฑเบเบซเบผเบทเบเปเป.
- dfs เปเบฅเปเบ processVertex เปเบเบเบธเบเบเบฑเปเบเบเบฑเบเบซเบกเบปเบ.
เบซเบกเบปเบโเปเบเบปเปเบฒโเบเบตเป.
เบเบฐเบซเบงเบฑเบเบเบญเบเบเปเบฒเบชเบฑเบ INLINE
เบเปเบฒเบงเปเบฒ INLINE เบเปเปเปเบเปเบขเบนเปเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบฑเปเบเบเปเบฒเบญเบดเบเบเบญเบ algorithm; เบกเบฑเบเบเบฒเบเบปเบเบเปเปเบกเบฒ. เปเบกเบทเปเบญเบเปเบญเบเบเบฐเบเบฒเบเบฒเบกเบเบญเบเบซเบฒเบเบฒเบเบเบฐเบเบดเบเบฑเบเบเบตเปเบเบตเบเบงเปเบฒ, เบเปเบญเบเบเบปเบเบงเปเบฒเบชเบฐเบเบฑเบเบเบตเปเบเปเปเปเบกเปเบ INLINE เปเบกเปเบเบเปเบฒเบฅเบปเบเบขเปเบฒเบเปเบซเบฑเบเปเบเปเบเบฑเบเปเบเบเบฒเบเบเบฒเบ. เบเบดเบเบฒเบฅเบฐเบเบฒเบงเปเบฒเบซเบเปเบฒ semantic เบเบงเบเปเบฎเบฑเบเบงเบฝเบเบเบทเบเบฑเบ, เบเบตเปเปเบฎเบฑเบเปเบซเปเบเปเบญเบเบเบฐเบซเบฅเบฒเบเปเบเบซเบฅเบฒเบ. เปเบเบดเบเปเบกเปเบเบงเปเบฒเบเบปเบเปเบเบเบซเบเปเบฒ, เปเบเปเบเบทเปเบญเบเบญเบทเปเบเบเบตเปเบกเบต GHC เบฎเบธเปเบเบเบตเปเปเบเบเบเปเบฒเบเบเบฑเบเบเปเปเบกเบตเบเบงเบฒเบกเปเบเบเบเปเบฒเบเบเบตเปเบชเบฑเบเปเบเบเปเบซเบฑเบ.
เบซเบผเบฑเบเบเบฒเบเปเบเปเปเบงเบฅเบฒเบซเบเบถเปเบเบญเบฒเบเบดเบเปเบเบเบฒเบเบญเปเบฒเบเบเบปเบเบเบฐเบฅเบดเบ GHC Core, เบเปเบญเบเบชเบฒเบกเบฒเบเปเบเปเปเบเบเบฑเบเบซเบฒเบเบตเปเบกเบตเปเบชเบฑเปเบเบซเบเบถเปเบเบเบญเบ INLINE เบขเปเบฒเบเบเบฑเบเปเบเบ. เปเบเบเบฒเบเบเบธเบเบฅเบฐเบซเบงเปเบฒเบ GHC 8.4.4 เปเบฅเบฐ GHC 8.6.5, optimizer เบขเบธเบเปเบฎเบฑเบเบชเบดเปเบเบเบตเปเบเปเบงเบเบเบปเบงเบกเบฑเบเปเบญเบ.
เบเปเบฒเบเบฐเปเบเบปเปเบฒเบเปเปเปเบเปเบเบฒเบเบซเบงเบฑเบเบงเปเบฒเบเบฐเบเบปเบเบเบฑเบเบเบธเปเบเบเบฑเปเบเบเปเบฒเบงเปเบเบเบฒเบเบเบฝเบเปเบเบฅเปเบเบฅเบก Haskell. เบขเปเบฒเบเปเบเบเปเบเบฒเบก, เปเบเบดเบเปเบกเปเบเบงเปเบฒเปเบเบกเบทเปเบเบตเป, เบเบฒเบเบเบฑเปเบเบเบนเปเปเบเบตเปเบกเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบฎเบฑเบเบเบดเบเบเบฒเบ, เปเบฅเบฐเบกเบฑเบเปเบเบฑเบเบงเบฝเบเบเบญเบเบเบงเบเปเบฎเบปเบฒเบเบตเปเบเบฐเปเบซเปเบเปเบฒเปเบเบฐเบเปเบฒเปเบซเปเปเบเบปเบฒเปเบเบปเปเบฒ. เบเบปเบงเบขเปเบฒเบ, เปเบเบเบตเปเบเบตเปเบเบงเบเปเบฎเบปเบฒเบฎเบนเปเบงเปเบฒเบซเบเปเบฒเบเบตเปเบเบงเบเบเบฐเบขเบนเปเปเบเปเบชเบฑเปเบเปเบเบทเปเบญเบเบเบฒเบเบงเปเบฒเบกเบฑเบเบเบทเบ inlined เปเบเบชเบฐเบเบฑเบ imperative, เปเบฅเบฐเบเบตเปเปเบกเปเบเปเบซเบเบเบปเบเบเบตเปเบเบฐเปเบซเป compiler เบเปเบฒเปเบเบฐเบเปเบฒ.
เปเบเบตเบเบซเบเบฑเบเบเบถเปเบเบเปเปเปเบ?
เบซเบผเบฑเบเบเบฒเบเบเบฑเปเบ, เบเปเบฒเบเบฐเปเบเบปเปเบฒเปเบเปเบเบฐเบเบดเบเบฑเบเบงเบดเบเบตเบเบฒเบ Hopcroft-Karp เบเบฑเบ monads เบญเบทเปเบเป, เปเบฅเบฐเบเบฑเปเบเปเบกเปเบเบเบธเบเบชเบดเปเบเบชเบธเบเบเบญเบเปเบเบเบเบฒเบ.
เบเปเบเบญเบเปเบเบเบฑเบ Google Summer of Code, เบเปเบญเบเปเบเปเบฎเบฑเบเบเบฐเบชเบปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบเปเบเบเบฒเบเบเบฝเบเปเบเบผเปเบเบผเบกเบเบตเปเปเบเบฑเบเบเบฐเปเบซเบเบ, เปเบเบดเปเบเบเปเปเบเบฝเบเปเบเปเบเปเบงเบเปเบซเปเบเปเบญเบเปเบเปเบเบถเบเบเบฒเบเบขเบนเป Jane Street เปเบเบเปเบงเบเบฅเบถเบฐเปเบเบดเปเบเบฎเปเบญเบเบเปเปเปเบ (เบเปเบญเบเบเปเปเปเบเปเปเบเบงเปเบฒเบชเบฐเบเบฒเบเบเบตเปเบเบตเปเปเบเบฑเบเบเบตเปเบฎเบนเปเบเบฑเบเบเบตเบเบฒเบเปเบเปเบเบดเบเปเบกเปเบเบงเปเบฒเปเบเบเบธเปเบกเบเบนเปเบเบปเบกเบเบตเปเบกเบตเบเบงเบฒเบกเบฎเบนเปเบเบญเบ Habr, เปเบเปเบงเปเบฒเบกเบฑเบเปเบกเปเบเบเปเบญเบเบเบฝเบง. เบชเบญเบเบชเบฒเบกเบเปเบญเบเบเบตเปเปเบเบปเปเบฒเบชเบฒเบกเบฒเบเบเปเบฒเปเบเบตเบเปเบเบเบเบฒเบเบเบตเปเบกเบตเบเบฐเบชเบดเบเบเบดเบเบฒเบเปเบเบฅเบฐเบเบนเบฎเปเบญเบ), เปเบเปเบเบฑเบเปเบเปเปเบเบฐเบเปเบฒเบเปเบญเบเปเบเบชเบนเปเปเบฅเบเบเบตเปเบเบญเบเบขเปเบฝเบกเบเบญเบเบเบฒเบเบเปเบฒเปเบเปเบเปเบฒเบเบงเบฑเบเบเบตเปเปเบเบเบฒเบเบเบฐเบเบดเบเบฑเบ, เปเบเบดเปเบเปเบเบเบเปเบฒเบเบเบฒเบเบเบฐเบชเบปเบเบเบฒเบเบเบญเบเบเปเบญเบเปเบเบเบฒเบชเบฒเบเบทเปเบเปเบกเบทเบญเบ.
เปเบซเบผเปเบเบเปเปเบกเบนเบ: www.habr.com