「あの言語のあれ」まとめ
なにこれ
最近あっちこっちの言語を行き来しているので、
「あの言語のあれ、この言語でどう書くんだ?」
をまとめたものが欲しくなったので備忘録的にまとめていきたいと思います。
徐々に追記していく感じで書いていきます。
分類は特に深く考えてつくってないです。
載せてほしいものがあればコメントまたは
編集リクエストいただければ気づいたときに対応します。
コレクション操作系
map
コレクションの要素に対して関数を適用した新しいコレクションを返す。
Common Lisp
(defvar xs (list 1 2 3))
(mapcar (lambda (x) (* x 2)) xs) ; (2 4 6)
JavaScript
let xs = [1,2,3];
xs.map(x => x*2); // [2, 4, 6]
C#
List<int> xs = new List<int>() { 1, 2, 3 };
xs.Select(x => x*2); // [2, 4, 6]
filter
コレクションの要素のうち、条件を満たす要素のみからなる新しいコレクションを返す。
Common Lisp
(defvar xs (list 1 2 3 4))
(remove-if-not (lambda (x) (equal (mod x 2) 0)) xs) ; (2 4)
JavaScript
let xs = [1,2,3,4];
xs.filter(x => x%2===0); // [2, 4]
C#
List<int> xs = new List<int>() { 1, 2, 3, 4 };
xs.Where(x => x%2==0) // [2, 4]
zip
各コレクションの同一インデックスの要素を一つの新しいコレクションにまとめる。
JavaScript
// すべてのコレクションの要素数が同じことが前提
let a = [1,2,3];
let b = ["a","b","c"];
const zip = (...arrays) => arrays[0].map((_,i) => arrays.map((x,_) => x[i]));
zip(a,b); // [[1,"a"],[2,"b"],[3,"c"]]
Common Lisp
(defvar a '(1 2 3))
(defvar b '(a b c))
(mapcar #'list a b) ; ((1 A) (2 B) (3 C))
C#
int[] a = { 1, 2, 3 };
string[] b = { "a", "b", "c" };
a.Zip(b, (xa, xb) => new dynamic[] { xa, xb }); // [[1,a],[2,b],[3,c]]
コレクション処理系
reduce
畳み込み。
※良い説明が思いつかないので要追記
Common Lisp
(defvar xs (list 1 2 3 4))
(reduce (lambda (x m) (+ x m)) xs :initial-value 0) ; 10
JavaScript
let xs = [1,2,3,4];
xs.reduce((x,m) => x+m, 0) // 10
C#
List<int> xs = new List<int>() { 1, 2, 3, 4 };
xs.Aggregate(0, (m,x) => x+m) // 10
コレクション生成系
range (aka. iota)
整数値a
から整数値b
までの連番のコレクションを生成して返す。
Common Lisp
(ql:quickload :alexandria)
(alexandria:iota 4 :start 2) ; (2 3 4 5)
JavaScript
let range = (a,b) => [...Array(b-a+1)].map((_,i) => a+i);
range(2,5); // [2,3,4,5]
C#
int a = 2;
int b = 5;
Enumerable.Range(a, b-a+1).Select(x => x); // [2,3,4,5]
※参考: 色々な言語でrange関数的な処理の書き方[Python,C++,D,C#,JS,VB,HSP,Lisp,Scheme,Clojure]