めんどくさいから、私のプログラムを見せます。
可能な限り、仕様を写すようにプログラミングするのが
Prologです。

isTerm(Alphabet) :- isAlphabet(Alphabet).
isTerm(Integer) :- isInteger(Integer).
isTerm(f(Term)) :- isTerm(Term).
isTerm(g(Term1,Term2)) :- isTerm(Term1),isTerm(Term2). /* 注1 */
isAlphabet(a).
isAlphabet(b).
isInteger(0).
isInteger(1).

/* 注1 BNF記法などの通例から isTerm(g(Term,Term)) :- isTerm(Term).
の意味ではないと思う */