2013-07-10 28 views
5

Haskell'deki sabit diskten büyük bir grafik yapısı okumak istiyorum. grafik yapısı aşağıdaki gibidir:Haskell tembel açık ve yakın dosyaları

Her düğüm bir tanım var

- Bir dosya açıklayan neyi çocuklar ve nasıl Data.Serialize kullanarak (Bu grafikler serileştirildiğini bağlı olan her düğüm çocuk sahibi olabilir

Yani eğer.. Ben belleğe bu Haskell kullanarak grafiği ve yükü hareket edebilecektir olmak istiyorum

. Ben dizin A (<X>.node dosyaları ve dizinleri formunda) A düğümün çocukları içeren olabilir dosyayı A.node var ve unserialize sadece gerekli Yani, örneğin, grafiğiyolunda(B, A çocuktur, vs.), Haskell, A.node, A/B.node ve A/B/C.node dosyalarını okumalıdır. Grafiği bir sonraki seferde, dosyalar NOT tekrar okunmalıdır, çünkü biz zaten yaptık.

Bunu en iyi şekilde nasıl yapabilirim?

+0

Tembel olarak okunan dosyaların içeriğini mi yoksa sadece gerektiğinde dosyayı mı açmak istiyorsunuz? – bennofs

+0

Mümkünse dosyayı açıp kapatmak istiyorum. –

+0

Ne yapmak istersin? Dosya içeriğini önbelleğe almak mı istiyorsunuz, başka bir deyişle, daha önceden okunduğunda dosyayı tekrar okumaya mı gerek yok? Çünkü bu tür bir şey yapmaya çalışıyorsan, bana kötü bir fikir gibi geliyor. Muhtemelen [borular] (http://hackage.haskell.org/package/pipes) veya [conduit] (http://hackage.haskell.org/package/conduit) gibi bir şey kullanmak istersiniz – bennofs

cevap

2

Tam bir dizin ağacını temsil eden size salt bir değer veren ve yalnızca bu dizinleri ve aslında kullanılan dosyayı okuyacak kütüphaneler vardır. Tembel değerlendirme sayesinde, bu dosyaya ikinci kez eriştiğinizde, bellekte zaten olacaktır. dışarı directory-tree

Kontrol, özellikle readDirectoryWithL fonksiyonu.

+0

Teşekkürler, ama amacım için iyi çalışır mı? Bir grafik yapısına sahibim - bu yüzden HERHANGİ BİR DOSYA DOLAYISI OLMAYI istiyorum. Ona eriştiğimde bir dosya okuyacağını söyledin, ama başlangıçta tüm dosyaları (sıradan) bir grafik yapısına "kararsızlaştır" ve "sadece" UNSERIALIZED GRAPH'ı geçerken bunları "okumak" isterim? –

+0

Evet, işe yarayacak. Dosya içeriği, diğer tembel değerlere benzer, yani y = x = x = x, x, y gerekli olana kadar değerlendirilir (= dosya okunmaz). – bennofs

+0

'directory-tree' ile ilgili bir sorun var - ** dosya ismini okurken, dosya da okunıyor **. Dosya içeriğini okumadan dosya ismi okumak imkansızdır - bence bu kütüphanede mantıklı bir hatadır. Örnek kod: http://pastebin.com/ipbe8P3P. Ek - "iteratee" gibi bir şey kullanıp, bir şekilde bu soruna yardımcı olacak bir şey mi yapıyorsunuz? –