LYAH'da bana pek mantıklı gelmeyen bir bölüm okuyordum . Fermuarların ağaç benzeri bir yapıyı keyfi olarak geçebileceğini anlıyorum, ancak üzerinde biraz açıklığa ihtiyacım var. Ayrıca, fermuarlar herhangi bir veri yapısına genelleştirilebilir mi?
LYAH'da bana pek mantıklı gelmeyen bir bölüm okuyordum . Fermuarların ağaç benzeri bir yapıyı keyfi olarak geçebileceğini anlıyorum, ancak üzerinde biraz açıklığa ihtiyacım var. Ayrıca, fermuarlar herhangi bir veri yapısına genelleştirilebilir mi?
Yanıtlar:
Fermuar, genel olarak, içinde bir delik bulunan bir veri yapısıdır. Fermuarlar veri yapılarını çaprazlamak / değiştirmek için kullanılır ve delik , çapraz hareketin mevcut odağına karşılık gelir . Tipik olarak, söz konusu veri yapısının bir elemanı da vardır, böylece bir (liste) fermuarı ve bir liste veya bir (ağaç) fermuarı ve bir ağacı vardır. Fermuar, programlayıcının veri yapısında verimli bir şekilde hareket etmesini sağlar, hatta odaktaki öğeyi değiştirir. Fermuarın çifti ve odaktaki eleman, öğeyi deliğe odaklanmanın orijinal veri yapısını verdiği kısıtlamasını karşılar.
Fermuarlar isteğe bağlı endüktif veri türlerine göre genelleştirilebilir. Kavram tür dizinli bir şekilde tanımlanabilir ( Tür dizinli veri türlerine bakın ). Aynı zamanda bir veri yapısının türevi fikri ile de ilgilidir ve bir Kategori Teorik bakış açısından incelenmiştir .
Bir fermuar genellikle bir çift şeydir: delikli bir yapı, bir odak , yapıda nerede olduğunuzu temsil eden, bir yolla birlikte , bu odağa nasıl geldiğinizi kaydeder. (Bu yol LYAH'ın ekmek kırıntıları izidir.)
Yol, yapıdaki değişiklikleri gerçekte nasıl uyguladığınızdır: "aşağı git, sola git, değeri artır". Arda ( "yukarı çıkmak" uygulayarak go_up
içinde Huet en kâğıt bu noktada), kendi adımlarını takip edebilir ve orijinal yapının yeni, mutasyona uğramış, kopya ile sonunda.
Gerçekten de diğer yapılara genelleştirilebilirler: