package Ġde . do ct ari . kotlin Tutorial . context Re ceiv ers Ċ Ċ /* Ġ***************************************************************** **************** ***** Ċ Ġ* Ġ***************************************************************** **************** ***** Ċ Ġ* Ċ Ġ* ĠĠ ĠUse ĠCase : ĠType ĠClasses Ċ Ġ* Ċ Ġ* ĠĠ ĠExample Ġ 1 Ċ Ġ* Ċ Ġ* ĠĠ ĠProblem Ġdescription Ċ Ġ* Ċ Ġ* Ġ***************************************************************** **************** ***** Ċ Ġ* Ġ***************************************************************** **************** ***** Ġ*/ Ċ Ċ /* Ċ Ġ* ĠAll Ġof Ġfollowing Ġimplementations Ġare Ġvery Ġsimilar . Ċ Ġ* Ċ Ġ* ĠCan Ġwe Ġget Ġrid Ġof Ġthe Ġcode Ġduplication ? Ċ Ġ* Ġ( tr ick Ġquestion : Ġwhat Ġpiece Ġof Ġcode Ġis Ġactually Ġduplicated ?) Ċ Ġ* Ċ Ġ* ĠCan Ġwe Ġcreate Ġan Ġabstraction Ġfor Ġit , Ġsuch Ġthat Ġwe Ġcan Ġuse Ġit Ġin Ġmore Ġuse Ġcases ? Ċ Ġ*/ Ċ Ċ fun ĠList < Int >. sum I (): ĠInt Ġ= Ġfold ( 0 ) Ġ{ Ġacc , Ġe Ġ-> Ġacc Ġ+ Ġe Ġ} Ċ Ċ fun ĠList < String >. sum S (): ĠString Ġ= Ġfold ("") Ġ{ Ġacc , Ġe Ġ-> Ġacc Ġ+ Ġe Ġ} Ċ Ċ fun Ġ< T > ĠList < List < T >> . sum L (): ĠList < T > Ġ= Ġfold ( emptyList ()) Ġ{ Ġacc , Ġe Ġ-> Ġacc Ġ+ Ġe Ġ} Ċ Ċ fun Ġmain () Ġ{ ĊĠ Ġval Ġint List Ġ= ĠlistOf ( 1 , Ġ 2 , Ġ 3 , Ġ 4 , Ġ 5 ) ĊĠ Ġprintln ( int List . sum I ()) ĊĊĠ Ġval Ġstring List Ġ= ĠlistOf (" a ", Ġ" b ", Ġ" c ", Ġ" d ", Ġ" e ") ĊĠ Ġprintln ( string List . sum S ()) ĊĊĠ Ġval Ġlist List Ġ= ĠlistOf ( listOf ( 1 , Ġ 2 , Ġ 3 ), ĠlistOf ( 4 , Ġ 5 , Ġ 6 ), ĠlistOf ( 7 , Ġ 8 , Ġ 9 )) ĊĠ Ġprintln ( list List . sum L ()) Ċ } Ċ