"You Büyük İyi bir Haskell öğrenin!" Kendimi daha genel bir şekilde yeniden yazmak istedim.Bu durum ifadesi, görünüm kalıp sözdizimi ile nasıl yazılır? Ben bir <a href="http://learnyouahaskell.com/functionally-solving-problems#reverse-polish-notation-calculator">RPN calculator</a> örneğini okunduktan sonra
Mevcut işlevleri kolayca genişletmek için, bunlarısözdizimini kullanarak lookup
işleviyle eşleşen ayrı listelere ve desenlere koydum. read
ile giriş okumak için bu yazdı:
parse xs x = case readMaybe x of
Just x -> Right (x : xs)
Nothing -> Left "Syntax error
ama yerine bir vaka ifadesini önlemek ve görünümü desen böyle tekrar kullanmak istiyorum: Ben alıyorum ikincisi ile Ancak
parse xs (readMaybe -> Just x) = Right (x : xs)
parse xs (readMaybe -> Nothing) = Left "Syntax error"
Bu hata: No instance for (Read a0) arising from a use of ‘readMaybe’
nedenini anlamıyorum. Onlar eşdeğer değil mi?
bütün kod here olduğunu.
Tamam, teşekkürler. Davayı bende tutacağım. – Rnhmjoj
Görünüm kalıpları, birçok durumda bir işlevinizle birlikte çok kullanışlıdır, ancak durumlar, bir Belki'i döndüren işlevler ile yapılır ve hiçbir zaman ara türdeki deseni eşleştirmezsiniz. Gibi şeyler f x | Sadece y <- g0 x = ...; Sadece y <- g1 x = ... 'f (g0 -> Sadece y); f (g0 -> Sadece y) '- ikincisi çok daha güzeldir çünkü işe yaramaz bir değişkeni (ilk durumda' x') bağlamaz. – user2407038
Kesinlikle orta düzey hesaplamaları kullanan desen eşleştirmeyi desteklemeye değer. Sorun şu ki, görüş paternleri sadece bu Just-or-bust stiline iyi destek veriyor. Sol taraftan ayrılmak zorunda kalmadan bir ara hesaplamanın sonucu olarak birden fazla ısırığa sahip olmalıyız.Ancak, gereksiz ekstra isimlendirmenin can sıkıcı olduğu konusunda hemfikirim, bu yüzden biraz daha kompakt bir göstergeye sahip olmak yararlı olabilir (ara hesaplama sadece bir model değişkenine bağlı olduğunda ve bir kez eşleştirildiğinde) ve ayrıca fazladan bir isim yerine bir doğrusal olmayan kalıplar istiyorum. eşitlik muhafızı. – pigworker