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