3995a5eb6a 2010-11-21 kinaba: def fromTo(x, y) 3995a5eb6a 2010-11-21 kinaba: { 3995a5eb6a 2010-11-21 kinaba: if( x > y ) { {} } 3995a5eb6a 2010-11-21 kinaba: else { {car: x, cdr: fromTo(x+1,y)} } 3995a5eb6a 2010-11-21 kinaba: }; 3995a5eb6a 2010-11-21 kinaba: 3995a5eb6a 2010-11-21 kinaba: def length(lst) 3995a5eb6a 2010-11-21 kinaba: { 3995a5eb6a 2010-11-21 kinaba: case( lst ) 3995a5eb6a 2010-11-21 kinaba: when( {car:_, cdr:x} ) { length(x)+1 } 3995a5eb6a 2010-11-21 kinaba: when( _ ) { 0 } 3995a5eb6a 2010-11-21 kinaba: }; 3995a5eb6a 2010-11-21 kinaba: 3995a5eb6a 2010-11-21 kinaba: def adjSum(lst) 3995a5eb6a 2010-11-21 kinaba: { 3995a5eb6a 2010-11-21 kinaba: case( lst ) 3995a5eb6a 2010-11-21 kinaba: when( {car:x, cdr:{car: y, cdr:z}} ) { {car: x+y, cdr: adjSum(z)} } 3995a5eb6a 2010-11-21 kinaba: when( {car:x, cdr:{}} ) { {car: x, cdr: {}} } 3995a5eb6a 2010-11-21 kinaba: when( {} ) { {} } 3995a5eb6a 2010-11-21 kinaba: }; 3995a5eb6a 2010-11-21 kinaba: 3995a5eb6a 2010-11-21 kinaba: var xs = fromTo(1,11); 3995a5eb6a 2010-11-21 kinaba: 3995a5eb6a 2010-11-21 kinaba: print( xs ); 3995a5eb6a 2010-11-21 kinaba: print( length(xs) ); 3995a5eb6a 2010-11-21 kinaba: print( adjSum(xs) ); 3995a5eb6a 2010-11-21 kinaba: print( length(adjSum(xs)) );