Skip to content

Instantly share code, notes, and snippets.

@letoh
Last active January 18, 2023 07:05
Show Gist options
  • Save letoh/8543b45f3283b1cbaab9 to your computer and use it in GitHub Desktop.
Save letoh/8543b45f3283b1cbaab9 to your computer and use it in GitHub Desktop.
原文 GG 了請參考 archive
https://web.archive.org/web/20090221093708/http://d.hatena.ne.jp/yuki_neko_nyan/20090217/1234850409
以下備份
2009-02-17
■ループが書けなくなる(或いは再帰依存症)レベル10 15:00 ループが書けなくなる(或いは再帰依存症)レベル10 - 猫的怠惰Days
level 0
再帰が書けない。再帰で考えられない。ループで記述すればいいのにと思う。
level 1
再帰を学ぶ。再帰で考えようとするとぞわぞわする。時々終端条件を忘れる。面倒なのでループで書きたいと思う。
level 2
末尾再帰を学ぶ。どう書けば末尾再帰最適化されるのか、スタックはどうなのかがピンと来ない。
level 3
再帰を末尾再帰に直すことを学ぶ。その違いを理解できるようになってくる。
level 4
高階関数が再帰であることを知る。それを普通に受けいれられるようになる。
level 5
再帰を普通に書けるようになる。ループ的なものは末尾再帰で書くことに苦痛を感じなくなる。
level 6
末尾再帰で記述されたものを「ループ」と普通に呼ぶ。そのような関数にナチュラルにloopなどと名付ける。そういった関数を特に再帰だと考えなくなっている。
level 7
forやwhileの構文がよくわからなくなる。リファレンスを見てようやく書ける。でもなんでこんな面倒な構文があるんだろう。再帰で書けばいいのに。再帰とlist comprehensionと高階関数があればなんということはなくなる。list comprehensionにforがでてくる言語を許容できない。
level 8
ループに関するAPIが山盛りの言語を疎ましく感じる。doとかdotimesとかuptoとかデザインするのは負のスパイラルにしか感じない。そういった構文を覚えられない。自分の書いた「ループ」を他の言語に直そうとするときにループに関する構文が書けなくて挫折する。forの引数順序を迷う。
level 9
とりあえず処理系が末尾再帰最適化できるかどうかが最初に気になる。最適化されない言語は極力使わない。そのような処理系は存在することが罪である。抹殺すべし。たまにforとかを見ると「そんなものもあったなあ」と懐かしく感じる。
level 10
ループってなに?
原文
ループが書けなくなる(或いは再帰依存症)レベル10
http://d.hatena.ne.jp/yuki_neko_nyan/20090217/1234850409
level 0
不會寫遞迴,也沒辦法用遞迴思考。只覺得用迴圈寫就好了。
level 1
開始學習遞迴,但只要一用遞迴思考就覺得煩。有時還會忘了寫終止條件。覺得實在太麻煩了還是想寫迴圈就好。
level 2
開始學習尾遞迴。對於怎麼寫才能做尾遞迴最佳化,或者堆疊狀態的變化等等,完全沒有概念。
level 3
學習將遞迴改寫成尾遞迴。慢慢可以理解兩者之間的差異。
level 4
瞭解高階函數其實就是用遞迴定義出來的,對於這類事變得可以用平常心看待。
level 5
隨手就能寫出遞迴。遇到有迴圈特性的東西,就算用尾遞迴來寫也不覺得痛苦了。
level 6
很直覺地用「迴圈」來稱呼以尾遞迴描述的東西。對這類函式命名時,也自然而然就在名字裡加上 loop 之類的字。看到這類函式時,已經不會再特別意識到是用遞迴寫的。
level 7
for 或 while 的語法變得陌生,在查了文件後總算寫出來了。但為什麼要有這麼麻煩的語法呢?明明用遞迴來寫就好了嘛。只要有遞迴、串列生成與高階函數的話就能解決所有問題了。實在無法容忍想用串列生成時卻只能寫 for 的語言。
level 8
對於充滿一堆具迴圈特性的 API 的語言感到不蘇胡。硬是設計出一些 do、dotimes、或 upto 之類的函式並不會比較好,而且這種語法也記不太起來。想在其他語言中修正自己所寫出的「迴圈」時,一直寫不出迴圈之類的語法覺得很挫折。對於 for 的參數順序也搞不清楚了。
level 9
一看到編譯器會先留意能不能對尾遞迴做最佳化,盡量避免使用不能最佳化的語言。這種編譯器的存在本身就是一種罪惡了,最好可以讓它消失。偶爾看到 for 之類的語法時會覺得很懷念,並感嘆「這種東西也曾經存在過啊」。
level 10
什麼是迴圈?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment