package Ġcom . cop per leaf . tre ll is . base Ċ Ċ import Ġcom . cop per leaf . tre ll is . visitor . Spe k Visitor Ċ import Ġcom . cop per leaf . tre ll is . visitor . visit ing Ċ Ċ /** Ċ Ġ* ĠAdds Ġa Ġnew Ġcandidate Ġto Ġthe ĠSpe k Ġchain , Ġto Ġbe Ġevaluated Ġby Ġa Ġmatching ĠSpe k . ĠThis Ġallows Ġa Ġsingle ĠSpe k Ġto Ġbe Ġevaluated Ċ Ġ* Ġwith Ġmultiple Ġdis par ate Ġinput Ġargument Ġcandidates , Ġwhere Ġeach Ġcandidate Ġhas Ġits Ġown Ġevaluation Ġsubtree . ĠThe Ġnew Ċ Ġ* Ġcandidate Ġis Ġitself Ġa ĠSpe k , Ġso Ġcan Ġpass Ġthe Ġresult Ġof Ġone Ġsubtree Ġto Ġa Ġnew Ġsubtree , Ġor Ġyou Ġcan Ġjust Ġpass Ġa Ġvalue Ġor Ċ Ġ* Ġlambda Ġdirectly Ġas Ġthe Ġvalue . Ċ Ġ*/ Ċ class ĠAlso Spe k < Candidate , ĠNew Candidate , ĠResult >( ĊĠĠĠ Ġprivate Ġval Ġnew Candidate : ĠSpe k < Candidate , ĠNew Candidate >, ĊĠĠĠ Ġprivate Ġval Ġbase : ĠSpe k < New Candidate , ĠResult > Ċ ) Ġ: ĠBase Spe k < Candidate , ĠResult >( new Candidate , Ġbase ) Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġevaluate ( visitor : ĠSpe k Visitor , Ġcandidate : ĠC andidate ): ĠResult Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvisit ing ( visitor ) Ġ{ Ġbase . evaluate ( visitor , Ġnew Candidate . evaluate ( visitor , Ġcandidate )) Ġ} ĊĠĠĠ Ġ} Ċ } Ċ