Quantcast
Channel: Vimタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 5608

いろんな言語でラムダ式を使ってフィボナッチ数列を表現する

$
0
0

とある機会がありまして、いろんな言語でラムダ式を使ってフィボナッチ数列を表現してみました。

javascript編

fib.js
varfib=function(v){return(function(f,m){returnf(f,m)}(function(r,n){returnn<2?n:r(r,n-1)+r(r,n-2)},v))}

python編

$python>>>fib=lambdan:nifn<2elsefib(n-1)+fib(n-2)>>>fib(0)0>>>fib(1)1>>>fib(2)1>>>fib(6)8

ruby編

$ irb
irb(main):001:0> f= lambda {|n| n < 2 ? n : f.call(n-1) + f.call(n-2)}$ irb(main):002:0> f.call(0)
0
$ irb(main):003:0> f.call(1)
1
$ irb(main):004:0> f.call(2)
1
$ irb(main):005:0> f.call(6)
8

haskell

$ ghci
Prelude> let fib= 0:1:zipWith (+) fib (tail fib)
Prelude> fib !! 0
0
Prelude> fib !! 1
1
Prelude> fib !! 2
1
Prelude> fib !! 6
8

c++編

ソースコード

fib.cc
#include <iostream>#include <functional>usingnamespacestd;intmain(intargc,charconst*argv[]){std::function<int(int)>fib=[&fib](constintn){returnn<2?n:fib(n-1)+fib(n-2);};cout<<fib(0)<<endl;cout<<fib(1)<<endl;cout<<fib(6)<<endl;return0;}

実行手順

$ g++ -std=c++11 fib.cc 
$ ./a.out 
1
1
8

vim編

vim 8.0にアップデート

$ apt-get install software-properties-common # if not found add-apt-repository command$ sudo add-apt-repository ppa:jonathon/vim
$ sudo apt-get update
$ sudo apt-get install vim
$ vim --version
$ sudo add-apt-repository -remove ppa:jonathon/vim # delete PPA if needed 

ソースコード

fib.vim
function! Main()let Y = {f->(({x->f({y->x(x)(y)})})({x->f({y->x(x)(y)})}))}
  let Fib = {f-> {n->(n<2 ? n : f(n-1)+f(n-2))}}
  echo Y(Fib)(0)
  echo Y(Fib)(1)
  echo Y(Fib)(2)
  echo Y(Fib)(6)

実行手順

$ vim
:source fib.vim
:call Main()

感想

ラムダ式の書き方ひとつとっても、言語によって個性がでるものですね。
個人的には、python、rubyが直感的でした。
Haskell、javascript、c++はなんとか出来ましたが、完全に文法と心を通わせきれていないうちに完成してしまいました。
vimは職場の方におすすめされて書いてみました。一番苦戦しましたが、できたときの感動は大きかったです。

他にも個性的なラムダ式があれば、教えてください :)


Viewing all articles
Browse latest Browse all 5608

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>