Haskell to funkcjonalny język programowania z silnym typowaniem statycznym, leniwą oceną, szeroką obsługą równoległości i współbieżności oraz unikalnymi możliwościami abstrakcyjnymi.
Niedawno wpadłem na sytuacje, w których muszę przekazać funkcję predykatu do innej funkcji, i dość często logika, której szukam, to w zasadzie „czy ta wartość pasuje do tego wzorca?” Dopasowywanie wzorców wydaje się być preferowane w deklaracjach, doblokach i opisach list, ale istnieje wiele funkcji, które przyjmują predykaty a -> …
Dobrym prawdziwym faktem na temat konkatenacji jest to, że jeśli znam dowolne dwie zmienne w równaniu: a ++ b = c Więc znam trzeci. Chciałbym uchwycić ten pomysł w swoim własnym konkat, więc używam zależności funkcjonalnej. {-# Language DataKinds, GADTs, FlexibleContexts, FlexibleInstances, FunctionalDependencies, KindSignatures, PolyKinds, TypeOperators, UndecidableInstances #-} import Data.Kind …
Niedawno zacząłem uczyć się Haskell, ponieważ chciałem poszerzyć swoją wiedzę na temat programowania funkcjonalnego i muszę powiedzieć, że bardzo ją kocham. Zasób, którego obecnie używam, to kurs „Podstawy Haskella, część 1” na temat Pluralsight. Niestety mam pewne trudności ze zrozumieniem jednego konkretnego cytatu prowadzącego na temat następującego kodu i miałem …
Poniżej podano 3 funkcje, które znajdują ostatni, ale drugi element na liście. Ten, który używa last . initwydaje się znacznie szybszy niż reszta. Nie mogę zrozumieć, dlaczego. Do testów wykorzystałem listę danych wejściowych [1..100000000](100 milionów). Ostatni działa prawie natychmiast, a pozostałe trwają kilka sekund. -- slow myButLast :: [a] -> …
Obecnie mam do czynienia z funkcją, która wygląda następująco: foo = (\(a:b:c:d:e:f:_) -> foobar a b c d e f) . (++ repeat def) Innymi słowy, biorąc pod uwagę listę, używa pierwszych sześciu elementów do czegoś, a jeśli lista ma mniej niż sześć elementów, używa defjako stand-in dla brakujących. To …
type BSTree a = BinaryTree a data BinaryTree a = Null | Node (BinaryTree a) a (BinaryTree a) deriving Show flattenTree :: BinaryTree a -> [a] flattenTree tree = case tree of Null -> [] Node left val right -> (flattenTree left) ++ [val] ++ (flattenTree right) isBSTree :: (Ord …
Natknąłem się na niektóre irytujące rzeczy. Wiem, że haskell działa ze słabą normalną postacią głowy (WHNF) i wiem, co to jest. Wpisując następujący kod do ghci (używam polecenia: sprint, który redukuje wyrażenie do WHNF według mojej wiedzy.): let intlist = [[1,2],[2,3]] :sprint intlist daje mi intlist = _to całkowicie sens. …
Uczę się Haskell i robiłem prosty program DB-seed dla Yesod, kiedy natknąłem się na takie zachowanie, które trudno mi zrozumieć: testFn :: Int -> Bool -> [Int] testFn a b = if b then replicate 10 a else [] Sesja GHCI Yesod: $ :t concatMap testFn [3] concatMap testFn [3] …
(Zainspirowany moją odpowiedzią na to pytanie ). Rozważ ten kod (powinien znaleźć największy element, który jest mniejszy lub równy podanemu wejściu): data TreeMap v = Leaf | Node Integer v (TreeMap v) (TreeMap v) deriving (Show, Read, Eq, Ord) closestLess :: Integer -> TreeMap v -> Maybe (Integer, v) closestLess …
Próbuję zdefiniować rodzinę maszyn stanowych z nieco odmiennymi rodzajami stanów. W szczególności bardziej „złożone” maszyny stanów mają stany, które powstają przez połączenie stanów prostszych maszyn stanów. (Jest to podobne do ustawienia obiektowego, w którym obiekt ma kilka atrybutów, które również są obiektami.) Oto uproszczony przykład tego, co chcę osiągnąć. data …
Dlaczego nie są równoważne? show $ if someCondition then someInt else some double i if someCondition then show someInt else show someDouble Rozumiem, że jeśli wyodrębnisz if ... elseczęść w pierwszym przykładzie do wyrażenia samodzielnie, nie będziesz mógł reprezentować jego typu za pomocą anonimowego typu sumy, takiego Int | Doublejak …
Naprawdę mam problemy ze zrozumieniem callCC. Dostaję moc kontynuacji i wykorzystałem tę koncepcję w niektórych moich projektach, aby stworzyć fajne koncepcje. Ale nigdy nie musiałem używać czegoś o większych możliwościach niż cont :: ((a->r)->r)-> Cont r a. Po użyciu ma sens, dlaczego nazywają Cont Monad matką wszystkich monad, JESZCZE, nie …
Próbuję połączyć kilka diagramów w coś w rodzaju stołu. Myślę, że nazywa się to „drukiem indeksowym” - fotografowie robią to, gdy muszą przeglądać wiele fotografii jednocześnie. W każdym razie jest to kod: main :: IO () main = mainWith @(Diagram B) $ (tile . fmap renderOne) examples renderOne :: AnyGraph …
Zamknięte . To pytanie musi być bardziej skoncentrowane . Obecnie nie przyjmuje odpowiedzi. Chcesz poprawić to pytanie? Zaktualizuj pytanie, aby skupiało się tylko na jednym problemie, edytując ten post . Zamknięte 7 miesięcy temu . Ostatnio próbuję użyć Haskell w moim prawdziwym systemie produkcji skrzynek. System typów Haskell naprawdę oferuje …
Mam ten (co prawda dziwny) kod, który używa obiektywu i GHC . {-# LANGUAGE DataKinds, PolyKinds, FlexibleInstances, UndecidableInstances #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} module Main where import Control.Lens import GHC.Records data Glass r = Glass -- just a …
Używamy plików cookie i innych technologii śledzenia w celu poprawy komfortu przeglądania naszej witryny, aby wyświetlać spersonalizowane treści i ukierunkowane reklamy, analizować ruch w naszej witrynie, i zrozumieć, skąd pochodzą nasi goście.
Kontynuując, wyrażasz zgodę na korzystanie z plików cookie i innych technologii śledzenia oraz potwierdzasz, że masz co najmniej 16 lat lub zgodę rodzica lub opiekuna.