? (f, g)
'u denedim, ama tahmin ettiğim gibi - başarı olmadan.kısa yol yazmak için ( (x, y) -> (f x g y)) lambda daha özlü</p> <pre><code>(x, y) → (f x, g y) :: (a, b) → (c, d) </code></pre> <p>geç nasıl fonksiyonları <code>f :: a → b</code>, <code>g :: c → d</code> için
7
A
cevap
16
(,)
ait Bifunctor
örneği aradığınız budur:
instance Bifunctor (,) where
bimap f g (a, b) = (f a, g b)
bimap
bir tuplea, her elemana birine iki işlevi uygular.
> import Data.Bifunctor
> bimap (+1) (*5) (1,1)
(2, 5)
Sen
bimap
ve
(***)
arasındaki fark nedir merak ediyor olabilirsiniz. O
p ~ (,)
ile
bimap
tipi
(***)
ile
(a -> b) -> (c -> d) -> (a, c) -> (b, d).
haline gelmesi bimap
ile
> :t bimap
bimap :: Bifunctor p => (a -> b) -> (c -> d) -> p a c -> p b d
> :t (***)
(***) :: Arrow a => a b c -> a b' c' -> a (b, b') (c, c')
, size türünü kısıtlayabilirsiniz, oldukça keyfi bir bifunctor p
daha küpe türünü kısıtlayabilir a
'dan ziyade, a ~ (->)
ile (***)
tipi
Yakın bir bakış, iki kısıtlı türün eşdeğer olduğunu ortaya çıkarır.
9
Bu deneyin Control.Arrow
yani
f *** g
7
den (***)
kullanabilir
import Control.Arrow
answer = f *** g $ (a, c)
ör
import Control.Arrow
f :: Int -> Int
f = (+1)
g :: Double -> String
g = show
answer = f *** g $ (10, 3.5)
İlgili konular
- 1. Neden <$> g <$> g <$> x karşılığı (f. G) <$> x <$> doğru olarak ilişkilendirilemez mi?
- 2. Fg x tipi = g. fonksiyon</p> <pre><code>f g x = g . g x </code></pre> <p>olarak tanımlanan neden benim için açık değildir
- 3. İki-arg işlevi bir diziye nasıl uygulanır?</p> <pre><code>[a b c ...] </code></pre> <p>ve bir işlev <code>(f x y)</code>:
- 4. Bul bütün x ve y değerleri ben iki diziyi <code>x</code> ve <code>y</code> sahip
- 5. nasıl</p> <pre><code>f :: a -> b g :: b -> c h :: c -> d </code></pre> <p>Haskell
- 6. pythonic swap x, y = y, x çalışmıyor?
- 7. Ruby tuhaflığı: x == y && [x, y] .uniq == [x, y]
- 8. typeof (x) şablon argümanı olarak mı?</p><code>f</code> bir fonksiyonu ve <code>y</code> bir değişkendir <pre><code>auto x = f(y); </code></pre> <p>, hem başka bir yerde tanımlanmış:
- 9. Listedeki bir çiftin her iki öğesinin bir işlevini liste anlamadan daha iyi bir yolu var mı? Bunu yapmak için daha iyi bir yolu</p> <pre><code>a' = [ (f x, f y) | (x, y) <- a ] </code></pre> <p>var mı:
- 10. Bu nokta neden ücretsiz tanım Haskell'de çalışmıyor?</p> <pre><code>relativelyPrime x y = gcd x y == 1 </code></pre> <p>noktası içermeyen:
- 11. Ben iki işlevi <code>f</code> ve <code>g</code> sahip C++
- 12. pcolormesh? x, y, z</p> <p>ve aşağıdaki kodu:
- 13. #if tanımlı (x) || (y); bu geçerli mi?</p> <pre><code>#if defined(x) || y </code></pre> <p>yukarıdaki deyimi ne demektir: Bir inceleme sırasında
- 14. Dinamik İfade Oluşturma <Func<T,Y>>
- 15. Bir x, y-scatter çiziminde directlabels kullanımı
- 16. TensorFlow operatör aşırı yükleme</p> <pre><code>tf.add(x, y) </code></pre> <p>ve TensorFlow içinde</p> <pre><code>x + y </code></pre> <p>arasındaki fark nedir
- 17. İşlev, üç yerine dört argüman alıyor - neden bu ara vermiyor?</p> <pre><code>myFoldl f z xs = foldr step id xs z where step x g a = g (f a x) </code></pre> <p>Sorum şu: Neden bu kod derliyor sayfa 95 yazar "Gerçek Dünya Haskell", Okuma
- 18. Neden scalar sub {(@x, @y)} ->() scalar @y döndürüyor?
- 19. X * 2 + 1 hesaplamanın kısa bir yolu var mı? <br> <code>x = x*2;</code><code>x *= 2;</code></p> <p>gibi yazılmış olabilir
- 20. `(y * y) <x 'işlevi iki bağımsız değişkene uygulanır, ancak' Bool 'türünde hiçbiri
- 21. java.lang.IllegalArgumentException: y olmalıdır <bitmap.height()
- 22. XPath - tüm elemanlar alt elemanlara belge</p> <pre><code><a> <b> <c/> <d/> </b> <b> <c/> <d/> </b> </a> </code></pre> <p>Verilen
- 23. nerede id = (y x)
- 24. GetDIBits ve X, Y
- 25. En Büyük Numara <x?
- 26. Yuvarlama y = x * x en yakın
- 27. -><- operatör ne yapar? Bu ne</p> <pre><code>IntPredicate neg = x -> x <- x; </code></pre> <p>, ters çift lambda çeşit:
- 28. X {..} <- getYesod notasyonu
- 29. Coercing, "% m /% d /% y" Ben şu kodu <pre><code>data$Date <- as.Date(data$Date, "%m/%d/%y") </code></pre> <p></p> kullandık
- 30. nasıl koşullu bağlı f kullanacağı bir bağdaştırıcının ihtiyaç</p> <pre><code>def f : Kleisli[Future, Context, Seq[Tip]] = ??? </code></pre> <p>f varolan yöntem göz önüne alındığında şartlı
Ne yazık ki, bu tam olarak “Bifunctor” örneği değil. Aslında, sadece "ahlaki açıdan doğru" olan ve dikkatli değilseniz bir boşluk sızıntısına neden olabilecek f g ~ (x, y) = (f x, g y) 'ı bimap. – dfeuer
https://hackage.haskell.org/package/base-4.9.0.0/docs/src/Data.Bifunctor.html#line-78 – dfeuer
Oops, ben * düşündüm * Onu buradan kopyaladım (https: //hackage.haskell.org/package/bifunctors-3.2.0.1/docs/src/Data-Bifunctor.html), ama görünüşe göre değil. Gözüm, '~ 'üzerinde gözlerini kamaştırmış olmalı. – chepner