# KEHOME/src/average_price.icn # Sep/1/2008 Sep/24/2008 # average price for RealEstate example invocable "average_price" # real ##procedure average_price(mname,ppobject) procedure average_price(mname,argtable) #====================================== # do average price od name from hierarchy done; # do average price od name , hierarchy done; local name,hi,genus,index local mls,infon,tuple local price,prices,average,aprice static info,warning initial { info := "INFO: average_price: " warning := "WARNING: average_price: " } name := unparse(argtable["$1"]) hi := unparse(argtable["$2"]) genus := unparse(get_genus(hi)) if DEBUG=="AVERAGE" then { writes_type_all(mname,info||"mname") writes_type_all(argtable,info||"argtable") writes_type_all(name,info||"name") writes_type_all(hi,info||"hi") writes_type_all(genus,info||"genus") } prices := [] case genus of { "Home": { every mls := !get_unit(hi) do { price := get_char("attr",mls,name) put(prices,price2number(price)) } # end every mls } "relation": { every infon := !get_unit(hi) do { tuple := get_char("attr",infon,"tuple","list") index := nrel_index(name,hi) price := tuple[index] if DEBUG=="AVERAGE" then { writes_type_all(price,info||"price") } put(prices,price2number(price)) } # end every infon } } # end case genus if *prices = 0 then { aprice := "UNKNOWN" } else { average := list_average(prices) aprice := number2price(average) } if DEBUG=="AVERAGE" then { writes_type_all(average,info||"average") writes_type_all(aprice,info||"aprice") } return aprice end # integer procedure price2number(price) #============================ # price ::= '$nnn,nnn' local nprice nprice := price[3:-1] nprice := map(nprice,",",".") return nprice end # price procedure number2price(nprice) #============================= local price static squote initial { squote := "\'" } price := map(nprice,".",",") price := price[1:8] price := squote||"$"||price||squote return price end