[]developerWorksLinuxTail-recursiveXML:SXMLSSAXPython:PythonJava:HaskellUserecursioneffectivelyinXSL:developerWorks:JonathanBartlett,NewMediaWorx2005711SchemeCcircularreasoning1factorial(5)5*4*3*2*1factorial(3)3*2*1startingnumberfactorial(5)5*factorial(4)1.intfactorial(intn){returnn*factorial(n-1);}factorial11112.intfactorial(intn){if(n==1){return1;}else{returnn*factorial(n-1);}}basecase1.seedvalue2.3.4.5.6.inductively-defined——inductivedefinitionNULL——NULLNULLNULL1.2.NULL3.4.3.sum_listfunctionsum_list(listl)islnull?yes-thesumofanemptylistis0-returnthatdata=headoflistlrest_of_list=restoflistlthesumofthelistis:data+sum_list(rest_of_list)Scheme4.sum_listScheme(definesum-list(lambda(l)(if(null?l)0(let((data(carl))(rest-of-list(cdrl)))(+data(sum-listrest-of-list))))))C5.sum_listCintsum_list(structlist_node*l){if(l==NULL)return0;returnl.data+sum_list(l.next);}“”“true”“false”6.Scheme(defineis-in-list(lambda(the-listthe-string);;Checkforbasecaseoflistempty(if(null?the-list)#f;;Checkforbasecaseoffounditem(if(equal?the-string(carthe-list))#t;;Runthealgorithmonasmallerproblem(is-in-list(cdrthe-list)the-string)))))——the-stringclosure7.Scheme(defineis-in-list2(lambda(the-listthe-string)(letrec((recurse(lambda(internal-list)(if(null?internal-list)#f(if(equal?the-string(carinternal-list))#t(recurse(cdrinternal-list)))))))(recursethe-list))))recursethe-stringrecurseparentenvironmentrecurseis-in-list2letrecSchemeletnamedletletletletletlet78.let(defineis-in-list2(lambda(the-listthe-string);;NamedLet;;Thisletblockdefinesafunctioncalledrecursethatisthe;;bodyofthislet.Thefunction'sparametersarethesameas;;thevariableslistedinthelet.(letrecurse;;internal-lististhefirstandonlyparameter.The;;firsttimethroughtheblockitwillbeprimedwith;;the-listandsubsequentcallstorecursewill;;giveitwhatevervalueispassedtorecurse((internal-listthe-list));;Bodyoffunction/namedletblock(if(null?internal-list)#f(if(equal?the-string(carinternal-list))#t;;Callrecursivefunctionwiththe;;restofthelist(recurse(cdrinternal-list)))))))letlet#t#f9.Scheme(defineis-ascending(lambda(the-list);;First,Initializethealgorithm.Todothiswe;;needtogetthefirstvalue,ifitexists,and;;useitasaseedtotherecursivefunction(if(null?the-list)#t(letis-ascending-recurse((previous-item(carthe-list))(remaining-items(cdrthe-list)));;Basecase#1-endoflist(if(null?remaining-items)#t(if(previous-item(carremaining-items));;Recursivecase,checktherestofthelist(is-ascending-recurse(carremaining-items)(cdrremaining-items));;Basecase#2-notinascendingorder#f))))))————bugbugbugbugbugbugifbugbug——!conditionalmodification?:some_valueintnew_variable=old_variablesome_value?oldvariable:new_value;11.continue——10.voidprint_report(structreport_line*report_lines,intnum_lines){intnum_lines_this_page=0;intpage_number=1;intcurrent_line;/*iteratesthroughthelines*/intcurrent_group=0;/*tellswhichgroupingwearein*/intprevious_group=0;/*tellswhichgroupingwashereonthelastloop*/intgroup_total=0;/*savestotalsforprintoutattheendofthegrouping*/print_headings(page_number);for(current_line=0;current_linenum_lines;current_line++){num_lines_this_page++;if(num_lines_this_page==LINES_PER_PAGE){page_number++;page_break();print_headings(page_number);}current_group=get_group(report_lines[current_line]);if(current_group!=previous_group){print_totals_for_group(group_total);group_total=0;}print_line(report_lines[current_line]);group_total+=get_line_amount(report_lines[current_line]);}}bug11.voidprint_report(structreport_line*report_lines,intnum_lines){intnum_lines_this_page=0;intpage_number=1;intcurrent_line;/*iteratesthroughthelines*/intcurrent_group=0;/*tellswhichgroupingwearein*/intprevious_group=0;/*tellswhichgroupingwashereonthelastloop*/intgroup_total=0;/*savestotalsforprintoutattheendofthegrouping*//*initialize*/print_headings(page_number);/*Seedthevalues*/print_report_i(report_lines,0,1,1,0,0,num_lines);}voidprint_report_i(structreport_line*report_lines,/*ourstructure*/intcurrent_line,/*currentindexintostructure*/intnum_lines_this_page,/*numberoflineswe'vefilledthispage*/intpage_number,intprevious_group,/*usedtoknowwhentoprinttotals*/intgroup_total,/*currentaggregatedtotal*/intnum_lines)/*thetotalnumberoflinesinthestructure*/{if(current_line==num_lines){return;}else{if(num_lines_this_page==LINES_PER_PAGE){page_break();print_headings(page_number+1);print_report_i(report_lines,current_line,1,page_number+1,previous_group,group_total,num_lines);}else{intcurrent_group=get_group(report_lines[current_line]);if(current_group!=previous_group&&previous_group!=0){print_totals_for_group(group_total);print_report_i(report_lines,current_line,num_lines_this_page+1,page_number,current_group,0,num_lines);}else{print_line(report_lines[current_line]);print_report_i(report_lines,current_line+1,num_lines_this_page+1,page_number,current_group,group_total+get_line_amount(report_lines[current_line]),num_lines);}}}}bug11PaxiomstheoremsPR1R2R3report_linesnum_linesreport_linesLINES_PER_PAGEinductiveproofPPXX+1X-1Pprint_report_icurrent_line==num_lin