Fermuar nedir ve ağaç benzeri bir yapı ile ilişkisi nedir?


15

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?


3
Bu muhtemelen Bilgisayar Bilimi için daha uygundur , ancak fermuarları genelleştiren iş oldukça teknik teknikler içerir.
Dave Clarke

6
Fermuar, özellikle ağaçtan geçerken daima kapalı tutmanız gereken bir şeydir.
Andrej Bauer

Yanıtlar:


14

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 .


2

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_upiç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:

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.