fun member(x,y::l) = if (x=y) then true else member(x,l) | member(x,[]) = false; fun build_chart([],i,cnfgrammar,chart) = chart | build_chart(w::ws,i,cnfgrammar,chart) = build_chart(ws,i+1,cnfgrammar, close_edges(map(fn c => edge(i,c,i+1))(seek_lex(w,cnfgrammar)), chart,cnfgrammar,chart)); fun recognize(input,cnfgrammar) = member(0,seek_catr(S,length(input),build_chart(input,0,cnfgrammar,[]))); val g = [unary(NP,"Felix"),unary(VP,"walks"),unary(V,"sees"),unary(NP,"Fido"), unary(N,"dog"),unary(Adj,"happy"),unary(Det,"the"), binary(S,NP,VP),binary(VP,V,NP),binary(NP,Det,NBar),binary(NBar,Adj,N)];