2022年
4月
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

setup diary

2007|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|06|08|11|
2015|01|02|03|04|05|06|07|08|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|

2022-04-04 Rとjuliaとrubyとpython

_ 関数

4つの言語の比較の第四弾として,関数の取り扱いについて,表にまとめてみた.rubyの場合はメソッドだけど.
Rjuliarubypython3
定義 f<-function(x){2*x} f(x)=2x def f(x) 2*x end def f(x):return 2*x
省略値 f<-function(x=1){2*x}
f()
f(x=1)=2x
f()
def f(x=1) 2*x end
f
def f(x=1):return 2*x
f()
キーワード引数 f<-function(x,y){x^y}
f(y=1,x=2)
f(;x,y)=x^y
f(y=1,x=2)
def f(x:,y:) x**y end
f(y:1,x:2)
def f(x,y):return x**y
f(y=1,x=2)
可変長引数 f<-function(x,...){x+length(c(...))}
f(3,2,1)
f(x,a...)=x+length(a)
f(3,2,1)
def f(x,*a) x+a.size end
f(3,2,1)
def f(x,*a):return x+len(a)
f(3,2,1)
引数展開 f<-function(x,y){x+y}
a<-list(1,2)
do.call(f,a)
f(x,y)=x+y
a=[1,2]
f(a...)
def f(x,y) x+y end
a=[1,2]
f(*a)
def f(x,y):return x+y
a=[1,2]
f(*a)
無名関数 (function(x){2*x})(2) (x->2x)(2) proc{|x|2*x}.(2) (lambda x:2*x)(2)
配列 f<-function(x){2*x}
f(1:10)
f(x)=2x
f.(1:10)
def f(x) 2*x end
[*1..10].map{|x|f(x)}
def f(x):return 2*x
list(map(f,range(1,11)))
合成 f<-function(x){2*x}
g<-function(x){x+1}
g(f(2))
f(x)=2x
g(x)=x+1
(g∘f)(2)
2|>f|>g
f=proc{|x|2*x}
g=proc{|x|x+1}
(g<<f).(2)
(f>>g).(2)
import toolz
def f(x):return 2*x
def g(x):return x+1
toolz.compose(g,f)(2)
toolz.pipe(2,f, g,)
juliaは数学の関数のような感じなので,一見は素人にも分かりやすいかも知れない.Rは、引数の展開が難しい。rubyは、methodとprocedureの使い分けが面倒。pythonは、returnが必要なのが面倒なのと,そのままでは関数の合成ができない。順位付をするならが,juliaがトップで,rubyとpythonは同じぐらいで,Rが少し劣るかな.このシリーズはもう少しだけは続けるかな.