Jak można zrobić to w bezwzględnej Pseudokod?
for each element x in [a,b]:
for each element y in [c,d]:
produce (x,y)
W Haskell, to jest napisane jak
outerProduct xs ys =
do
x <- xs -- for each x drawn from xs:
y <- ys -- for each y drawn from ys:
return (x,y) -- produce the (x,y) pair
(po komentarzach leftaroundabout) To oczywiście niezwykle blisko jak liftM2
monadycznego syntezatora jest określona, więc w fakt:
outerProduct = liftM2 (,)
, który jest taki sam jak liftA2 (,)
, i jego różnych ponownych zapisów w zakresie zrozumienia list, operatorów concatMap
, operatorów >>=
, <$>
i <*>
.
Konceptualnie choć jest to rzeczy z Applicative
– które byłyby lepiej nazwie jak Pairing
, – ponieważ parowanie się z elementów dwóch „kontenery” ⁄ „nośnikami” ⁄ cokolwiek właśnie aplikacyjnych funktora jest o . Tak się składa, że notacja Haskella o nazwie do
działa dla monad, a nie (jeszcze) for applicatives.
w pewnym sensie kompilacji zagnieżdżonych pętli są ⁄ aplikacyjnych Parowanie funktory; Monady dodają możliwość tworzenia zagnieżdżonych pętli w locie, w zależności od wartości generowanych przez "zewnętrzne" wyliczenie.
Gdy typy '[a, b]' i '[c, d]' są równe, możesz napisać 'sekwencję [[a, b], [c, d]]'. – user3237465