Memoize |
BasicWerk
EC Support
Technique
Facebook
|
20140818143523_ruby_and_lisp |
|
ruby_and_lisp
Common Lisp でやってたことを Ruby ではどうやるの?と思って調べたことをメモ。
重複要素を一つにまとめる
* (remove-duplicates '(1 2 2 3 3))
(1 2 3)
* (remove-duplicates '("a" "b" "b" "c" "c") :test #'string=)
("a" "b" "c")
> [1, 2, 2, 3, 3].uniq => [1, 2, 3] > %w[a b b c c].uniq => ["a", "b", "c"]
全て T(true) か。
* (every #'stringp '("foo" "bar" 1))
NIL
> ["foo", "bar", 1].all? {|x| x.is_a? String}
=> false
条件に該当する要素だけ抜き出す。
* (remove-if-not #'stringp '("foo" "bar" 1))
("foo" "bar")
> ["foo", "bar", 1].grep(String) => ["foo", "bar"]
畳み込み。
* (reduce #'+ '(1 2 3 4 5)) 15 * (reduce #'+ '(1 2 3 4 5) :initial-value 100) 115
> Array(1..5).inject(:+)
=> 15
> Array(1..5).inject(100){|sum, n| sum + n}
=> 115
条件に合った最初の要素を返す。
* (find-if #'numberp '("foo" "bar" 1))
1
> ["foo", "bar", 1].find{|x| x.is_a? Numeric}
=> 1
ターゲットが要素としてリスト(配列)に含まれるか?
* (find 10 (iota 100)) 10
> Array(1..100).include? 10 => true
|
| © Shin Nakamura/BasicWerk 2014 |