Skip to content

Instantly share code, notes, and snippets.

@mohayonao
Last active August 29, 2015 14:03
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mohayonao/728472a5c4034819d1eb to your computer and use it in GitHub Desktop.
Save mohayonao/728472a5c4034819d1eb to your computer and use it in GitHub Desktop.
SuperCollider Partial Application まとめ

SuperCollider partial application まとめ

概要

_ をつかって関数の部分適用ができる

a = _.neg;  // a = { |x| x.neg }
a.value(10) // -10

a = _ + _;       // a = { |x, y| x + y }
a.value(10, 20); // 30

a = _ + _ * _;   // a = { |x| { |x, y| x + y } * x }
a.value(10, 20, 30); // BinaryOpFunction
a.value(10, 20).value(30); // ERROR [= (30 + nil) * 10 ]
a.value(10).value(20, 30); // 500   [= (20 +  30) * 10 ]

a = [ _, _, _, _ ];  // a = { |a, b, c, d| [ a, b, c, d ] }
a.value(1, 2, 3, 4); // [ 1, 2, 3, 4 ]

a = (a:_, b:_); // a = { |a, b| ( a: a, b: b ) }
a.value(1, 2);  // ('a': 1, 'b', 2)

a = 10.clip(_, _); // a = { |x, y| 10.clip(x, y) }
a.value(15, 20);   // 15

a = 10.clip(*_);   // a = { |x| 10.clip(*x) }
a.value( 15, 20 ); // ERROR [= 10.clip(15, nil) ]
a.value([15, 20]); // 15    [= 10.clip(15,  20) ]

a = _.clip(*_);          // a = { |x, y| x.clip(*y) }
a.value(16, [ 15, 20 ]); // 16 [= 16.clip(15, 20) ]

a = neg(_); // a = { |x| x.neg }
a.value(10) // -10

a = neg(*_); // a = { |x| x.neg }
a.value(10) // -10

a = _.max(_ + _);          // a = { |x| x.max({ |x, y| x + y } }
a.value(50).value(10, 20); // 50 [= 50.max(10 + 20) ]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment