Kodu this kağıttan çalışıyorum. Çevirimimin daha ayrıntılı olduğu beni rahatsız ediyor. Bana göre, orijinal Miranda kadar özlü bir şey yapamayacak bir şey eksik.Miranda To Haskell - Geliştirilmiş sürümü nedir?
İşte Miranda:
fix :: qtree(*) -> qtree(*)
fix(Leaf(x)) = Leaf(x)
fix(Internal(nw, ne, sw, se)) =
merge(Internal(fix(nw), fix(ne), fix(sw), fix(se)))
where
merge(Internal (Leaf(x), Leaf(x), Leaf(x), Leaf(x))) = Leaf(x)
merge(other) = other
Bildirimi merge
arasında LHS. Dört yaprakların hepsinin aynı değere sahip olduğu durumu ele geçirir. Haskell'e doğru bir transliterasyon yapamazsınız, çünkü x
'un çoklu tanımları ile ilgili bir şikayette bulunacağım. İşte benim sürümüm:
fix :: (Eq a) => QTree a -> QTree a
fix (Leaf a) = Leaf a
fix (Internal nw ne sw se) =
merge (Internal (fix nw) (fix ne) (fix sw) (fix se))
where
merge [email protected](Internal (Leaf w) (Leaf x) (Leaf y) (Leaf z))
| (w == x) && (x == y) && (y == z) = Leaf x
| otherwise = internal
merge other = other
Miranda kodunda olup bitenlere nasıl daha yakından yaklaşabilirim?
"allEq [] = True; allEq (x: xs) = hepsi (x ==) xs' size biraz yardımcı olabilir. Nihayetinde lineer olmayan modeller Haskell'de değiller ve Miranda'dalar, öyle görünüyor, bu yüzden telafi etmek için fazladan bir iş yapmak zorunda kalacaksınız. Btw'den kurtulabilirsin | Aksi halde, bir sonraki denklem, bununla ilgilenir. – luqui
Teşekkürler. Ben her zaman bir refleks olarak başka bir yere koydum. İyi yakalama. –