SORU
15 Temmuz 2014, Salı


GHCi bağlamaları izin thunk farklı davranış anlama söz konusu

Paralel ve eşzamanlı hakkında Simon Marlow kitabından bazı örnekler ile oynuyorum programlama ve gerçekten anlamıyorum ilginç bir davranış karşısında Haskell tökezledi. Bu gerçekten DZD iç işleyişini anlamaya çalışıyorum.

Hadi ÇOĞALTMA şunları söyleyebilirim:

λ» let x = 1   2 :: Int
λ» let z = (x,x)
λ» :sprint x
x = _
λ» :sprint z
z = (_,_)
λ» seq x ()
()
λ» :sprint z
z = (3,3)

Tamam, bu o z zaten WHNF için değerlendirilen hariç beklediğim gibi. Bakalım benzer bir program yazıp dosyaya koyup:

module Thunk where

import Debug.Trace

x :: Int
x = trace "add" $ 1   2

z :: (Int,Int)
z = (x,x)

Ve etrafında GHCi içinde keman:

λ» :sprint x
x = _
λ» :sprint z
z = _
λ» seq x ()
add
()
λ» :sprint z
z = _
λ» seq z ()
()
λ» z
(3,3)

Bu biraz daha farklı davranır: z önceden WHNF için değerlendirilir. Benim sorum:

Neden z bir dosyadan tanımı yüklerken let z = (x,x) ama değil ne zaman ÇOĞALTMA WHNF olarak değerlendirilir. Benim şüphe olduğunu desen bağlama ile ilgili bir şey var ama açıklama (belki de tümüyle yanlış yapıyorum) için nereye bakmam gerektiğini bilmiyorum. Bu şekilde dosyadaki örnek gibi davranmasını beklerdim.

Bunun neden olduğu ile ilgili herhangi bir öneriye ya da kısa bir açıklama?

CEVAP
3 Mart 2015, Salı


(,) yapıcı olduğundan, fark Haskell şimdi anlamları için fark (:sprint iç thunk uygulama ayrıntıları için erişim sağlar o yüzden sayılmaz.) Bu hangi iyileştirmeleri ve ticaret-off DZD farklı pozisyonlarda (x,x) derleme bir soru. Başkası bu durumlarda kesin nedeni bilmiyor olabilir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • case LianLi

    case LianLi

    28 Mayıs 2010
  • DudeFromUkraine

    DudeFromUkra

    7 Ocak 2008
  • Flash CS6 Video Tutorials for Beginners (Actionscript 3 Gaming)

    Flash CS6 Vi

    14 EYLÜL 2012