GHCi “let” - ne yapar? | tutuappapks.com
Takdir edersiniz, birileri GHCi'de "izin" in ne yaptıklarına dair dokümanlar gösterebilir, ya da bunu başarısızlıkla sonuçlandırabilir, ikna edici bir şekilde açıklayabilir :-).
Anlayabildiğim kadarıyla, “let” (“in” olmadan) kendi başına Haskell dilinin bir parçası değildir ve öte yandan, kolon tarafından öncelenmediği için GHCI komutu da görünmez. .
Kısa cevap: let (olmadan in) olduğu Haskell dilinin bir parçası, bir do blok (ve GHCi'de yazmak, IO monad). - MasterMastic
GHCi'de programlama yaparken, IO monadındaki programlama ile do sözdizimi, mesela doğrudan IO eylemi veya benzeri monadic bağlama sözdizimini kullanın r <- someIOFun.
let ayrıca bir parçasıdır do böylece bunu da kullanabilirsiniz. Sanırım içine çıldırmış olmak let .. in <rest of the computation>Örneğin, bunu yaptığınızda:
Sadece o değil IO () ama herhangi IO tip eylem IO a. - Satvik
Tamam, bu mantıklı ve GHCi'nin Haskell'e izin vermesine izin veriyor. - gwideman
let olmadan in bir blok içinde izin verilir ve verdiğiniz örnekle eşdeğer değildir (cf. stackoverflow.com/questions/8274650/...) - SwiftsNamesake
Bu çaresizlik kelimesi beni biraz attı. Garip olduğunu düşündüm. Ne anlama geldiği hakkında hiçbir fikrim yoktu. - jrahhali
İşte ilgili bölüm belgeleme.
GHCI ifadeleri IO hesaplama olarak yürütülür. Yani let İçinde sahip olduğunuzla aynı IO kullanarak non-IO ifadesini bağladığınız monad let.
Dokümanları işaret ettiğin için teşekkürler, bunu bulamadım. Bir yan yorum olarak, bu dokümanın daha çok hayal kırıklığı yaratıyor. Yeni kullanıcıların karşılaşması, Haskell kavramlarının başlamasıyla ilgili derslerde sık sık sunulduğundan hemen hemen izin verir, ancak bir haskell kaynak dosyasına kopyalandığında işe yaramamış ve monadların anlaşılmasının çok yararlı olmadığı varsayımları vardır. Yine de, burada cevapların toplanmasıyla, en azından bu özelliklerin nasıl birbirine uyduğunu görüyorum. - gwideman
@gwideman Evet, bunu anlıyorum. Ghci ifadeleri olarak yazdıklarınızı doğrudan bir hs dosyasında kopyalayamazsınız ve çalışmalarını beklersiniz. İyi yapabilirsin main = do <your ghci statements>. Ghci'nin bir deyimin çıktısını çıktı olarak yazdırması her zaman beklendiği gibi çalışmayabilir. Showörneği. - Satvik
Daha fazla kod-aşağı detaylar için, bu yorum TcRnDriver.lhs aydınlatıcı olabilir:
Bu yüzden GHCi komutunda bir komut üç adede kadar etki yapabilir: Bazı kodlar değerlendirilir, bazı şeyler yazdırılır ve bazı değişken adlar bağlanır. Durumunuz (yorumdaki ilk) değişkenleri bağlar, ancak yazdırmaz.
Sözdizimi do-notasyona benzemektedir, bu yüzden, sinan'ın cevabı biraz doğrudur, ama aslında kaputun altında olan şey değildir - aksi takdirde, hiçbir şey basılmazdı.
Bu aşamada tüm bunları anlamadığımdan eminim, ancak GHCi'den öğrenmemesi gereken dereceyi görmek çok yararlıdır :-). Teşekkürler! - gwideman
GHCI komutları IO monad içinde yürütülür ve sözdizimi kuralları kullanır, bu yüzden desugaring kuralları geçerlidir. itibaren Gerçek Dünya Haskell
Tamam, bu çok mantıklı. - gwideman
Python json.loads, ValueError ile başarısız: Geçersiz kontrol karakteri: satır 1 sütun 33 (karakter 33) Sıkı takma kuralı yanlış mı belirtildi? 3. raylar olmadan 2.days.ago, 2.hours.from_now vb? Derleyicinin sürüm numarası için gcc önceden tanımlanmış makroları nelerdir? Python - eş zamanlı olarak asyncio kullanarak birden fazla koroutin nasıl çalıştırılır? Process.Start C # konsol penceresini gizle Ön işleme sonrası Ccc çıkışı C kodu olabilir mi?