F#: 99 Soru Meydan Okuması 6
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ırisPalindromeUtil [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ırisPalindromeUtil [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.