It seems to me that this will return true for any string presented. It calls itself with a smaller and smaller slice of the string until it makes the <=1 requirement and then returns a boolean true all the way back up. I put it into a small example test program and thats what I seem to get. Am I missing something? Thanks, Tony Bartolini ([log in to unmask]) -----Original Message----- From: Bill Taylor [mailto:[log in to unmask]] Sent: Thursday, April 20, 2000 3:30 PM To: [log in to unmask] Subject: Re: [Off topic] palindromes An easier to implement alternative is: A string of length zero or one is a palindrome. Anything longer must have the first and last letter the same, and the in-between letters must be a palindrome. So again avoiding the issue of punctuation and spaces, function Is_Palindrome (S : String) return Boolean is begin return S'Length <= 1 or else Is_Palindrome (S(Natural'Succ(S'First) .. Natural'Pred(S'Last)))); end Is_Palindrome; regards Bill Taylor ([log in to unmask])