LoginSignup
13
2

More than 5 years have passed since last update.

言語の括弧を数えてみた(フィボナッチ編)

Last updated at Posted at 2017-10-17

「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だと同じことをやりたいときに簡単に処理が書ける分括弧が少なくなるのかもしれない。。

この実装が変とか、この例でやると良いのではと言うものがあったら教えてください。

13
2
18

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
2