「Lispは括弧が多くて...」という話をよく聞くので各言語の括弧を数えてみました。
ちなみLispに好きなので、括弧が多くて嫌だなーというイメージを払拭したいと考えています。
今回のフィボナッチ数列の実装は一番ノーマルだと思われる再帰の形で実装しています。
また、fib(0) = 0, fib(1) = 1
の実装です
括弧の省略については判断が難しいのでコメントください。
言語のチョイスは私の好みです。追加してほしい言語があったらコメントお待ちしております。
C
int fib(int n) {
if(n == 0 || n == 1) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
():4 + {}:2 = 6
Go
func fib(n int) int {
if n == 0 || n == 1 {
return n
}
return fib(n - 1) + fib(n - 2)
}
():3 + {}:2 = 5
Java
int fib(int n) {
if(n == 0 || n == 1) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
}
():4 + {}:2 = 6
Ruby
def fib(n)
return n if n == 0 or n == 1
fib(n - 1) + fib(n - 2)
end
():3 + do..end:0.5 = 3.5
Python
def fib(n):
if n == 0 or n == 1:
return n
return fib(n - 1) + fib(n - 2)
():3 = 3
JavaScript
function fib(n) {
if(n == 0 || n == 1) {
return n;
}
return fib(n - 1) + fib(n - 2);
}
():4 + {}:2 = 6
Clojure
(defn fib [n]
(if (or (= n 0) (= n 1))
n
(+ (fib (- n 1))
(fib (- n 2)))))
():10 + []:1 = 11
CommonLisp
(defun fib (n)
(if (or (= n 0) (= n 1))
n
(+ (fib (- n 1))
(fib (- n 2)))))
():11 = 11
結果
lang | ( ) | { } | [ ] | do end | 合計 |
---|---|---|---|---|---|
Python | 3 | - | - | - | 3 |
Ruby | 3 | - | - | 0.5 | 3.5 |
Go | 3 | 2 | - | - | 5 |
C | 4 | 2 | - | - | 6 |
Java | 4 | 2 | - | - | 6 |
JavaScript | 4 | 2 | - | - | 6 |
Clojure | 10 | - | 1 | - | 11 |
CommonLisp | 11 | - | - | - | 11 |
結果Lisp系の括弧が11と一番多い結果となってしまいました。
Lispの括弧はそんな多くないんだよという例がないか探し中です。もっと複雑な処理にするとLispのコード量自体が減り括弧の量も減ると思われます。
というか、Lispだと同じことをやりたいときに簡単に処理が書ける分括弧が少なくなるのかもしれない。。
この実装が変とか、この例でやると良いのではと言うものがあったら教えてください。