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

  • boogie2988

    boogie2988

    6 NİSAN 2006
  • Julian Smith

    Julian Smith

    31 EKİM 2006
  • Kim Barbin

    Kim Barbin

    3 Mayıs 2012