Haskell'deki tembel değerlendirmeler hakkında bir şeyler okuyorum ve bir sorum var. Örneğin aşağıda belirtilen hesaplamaları vardır:Veri yapılarının tembel değerlendirilmesi
Prelude> let x = 1 + 1 :: Int
Prelude> let y = (x,x)
Ve x
değerini aldıktan sonra:
Prelude> :sprint x
x = _
Bu unevaluated bu. Tamam, şimdi en y değeri elde edelim: y
x and it's unevaluated
bağlıdır, çünkü çok unevaluated olan
Prelude> :sprint y
y = (_,_)
. Şimdi aynı örneği ancak ::Int
olmadan deneyelim:
Prelude> let x = 1 + 1
Prelude> let y = (x, x)
Prelude> :sprint y
y = _
Neden y
değeri yerine (_, _)
_
biz ::Int
olmadan çalışırken?
Prelude> let x = 1 + 1
Prelude> :t x
x :: Num a => a
Prelude> let x = 1 + 1 :: Int
Prelude> :t x
x :: Int
Ama neden y
değerleri buna bağlıdır:
Onların farklı türleri vardır görüyoruz?
Teşekkür ederiz. neler oluyor
Şimdi gerçekten eğlenceli bir bölüm için, 'x' türüne sahip 'Num a => a', 'x' ve 'y' değerlerini tam olarak değerlendirdikten sonra ne olur? "Sprint" temsillerine ne olur? – bheklilr
@bheklilr, evet, çok ilginç. Ben yaptım: 'x' ve' y' için 'seq', değerleri basar, ancak: sprint baskı' _' – 0xAX
'x' türünü' 'a => a' olduğunda '' değerlendirmek '' için ne anlama gelir? ? Derleyici bununla ne yapacağını nasıl biliyor? '' '' In hangi uygulamasının kullanılacağını bilmediğinde 'x''in değeri '2' olduğunu söyleyebilir? Kendi türlerimi, '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '(MyInt y) = MyInt (x-y)' olarak tanımladıktan sonra uygulayabilirim. '2' değeri var? – bheklilr