2014-07-22 11 views
5

मान लें कि मेरे पास एक कार्य move है।फ़ंक्शन संरचना गतिशील रूप से

अब, कुछ इनपुट के आधार पर (मान लें कि इनपुट "3 से आगे बढ़ें" कहता है), मुझे 3 बार स्थानांतरित करना होगा।

मैं इस तरह करना होगा:

move compose move compose move 

यह समारोह रचना गतिशील करने के लिए संभव है? ताकि मैं अपने नए फ़ंक्शन को स्थानांतरित करने के समय के आधार पर अपना नया फ़ंक्शन बना सकूं।

धन्यवाद

+0

नहीं लिखा है, लेकिन यह मानते हुए '' move' कदम तरह दिखता है – ccheneson

+0

बना (चीज): थिंग', यह एंडोफंक्टर का एक उदाहरण है (कुछ 'ए' के ​​लिए 'ए -> ए' से कार्य) जो फ़ंक्शन संरचना और पहचान फ़ंक्शन के तहत एक मोनॉयड है। जैसा कि उत्तरों में दिखाया गया है, एंडोफंक्चर को जितनी बार आवश्यक हो उतनी बार रचित किया जा सकता है। हास्केल में हम वांछित फ़ंक्शन को '\ n -> mconcat (n move को दोहराना) के रूप में लिखेंगे – cdk

उत्तर

11

आप Function.chain विधि इस्तेमाल कर सकते हैं:

scala> val move1 = (x:Int) => x+1 
move1: Int => Int = <function1> 

scala> val move5 = Function.chain(List.fill(5)(move1)) 
move5: Int => Int = <function1> 

scala> move5(5) 
res1: Int = 10 
4

बस एक गुना का उपयोग करें:

def move(x: Int): Int = x + 1 

def moveBy(n: Int) = 
    (1 to n).foldLeft[Int => Int](identity _) { (f, _) => f compose move } 

moveBy(5)(0) // > 5 
संबंधित मुद्दे