F#: 99 Soru Meydan Okuması 6

Sıddık Açıl
2 min readApr 19, 2020

--

Liste Palindrom mu?

Bir önceki yazıya aşağıdan erişebilirsiniz.

Kendisi ile tersi aynı olan sekanslara palindrom sekans denir.

Palindromluk testi için listenin tersini kullanarak etkili bir çözüm üretebiliriz. Bu bağlamda, bir önceki yazıdaki liste sırasını tersine döndürme kodunu listeye uygulayabiliriz. Listede hem sağdan hem de soldan ilerleyerek eşitlikleri kontrol edebilir ve eşitsizlik görürsek false döndürürüz. Bu sebeple hem sol listeyi hem sağ listeyi kapsayacak bir desen olması için iki elemanlı bir liste tuple desenine ihtiyacımız var.

Adım Adım Desen Eşleşmesi

----- Senaryo 1isPalindrome [1; 2; 1]
=> isPalindromUtil [1; 2; 1] [1; 2; 1] çağrılır
isPalindromeUtil [1; 2; 1] [1; 2; 1]
=> (l::l', r::r') ile eşleşir. l = 1, r = 1, l' = [2; 1], r' = [2; 1]. l = r olduğundan isPalindromUtil [2; 1] [2; 1] çağrılır.
isPalindromeUtil [2; 1] [2; 1]
=> (l::l', r::r') ile eşleşir. l = 2, r = 2, l' = [1], r' = [1]. l = r olduğundan isPalindromUtil [1] [1] çağrılır.
isPalindromeUtil [1] [1]
=> (l::l', r::r') ile eşleşir. l = 1, r = 1, l' = [], r' = []. l = r olduğundan isPalindromUtil [] [] çağrılır.
isPalindromeUtil [] []
=> ([], []) ile eşleşir. Boş listeler palindrome olduğundan doğru döner.
----- Senaryo 2 isPalindrome [1; 2]
=> isPalindromeUtil [1; 2] [2; 1] çağrılır
isPalindromeUtil [1; 2] [2; 1]
=> (l::l', r::r') ile eşleşir. l = 1, r = 2, l' = [2], r' = [1]. l = r olmadığından false döner.

Gördüğünüz gibi isPalindromeUtil olarak isimlendirdiğimiz fonksiyon aslında liste eşitliğini kontrol etmekten başka bir şey yapmıyor.

Bir başka yazıda görüşmek üzere.

--

--