Насколько понимаю, должны сравниваться только первые знаки, а из остатка, выбираться этот первый знак
Вот что получилось, неверно, конечно, но мне кажется нужно приблизительно делать так:
FUNCTION Matching(p,s : string): boolean;
begin
IF (Length(p) and Length(s))=0 THEN
Matching := True
else
matching := (p[1]=s[1]) and Matching(copy(p,2,length(p)-1),copy(s,2,length(s)-1));
end;