ابتدای محتوای صفحه
۲۶ - ۱۴تمرینهای فصل
List ِ اکید
با این تایپِ List یه کم بازی کنین و با اونی که بالاتر به کمک الگوی بنگ نوشتیم مقایسه کنین:
{-# LANGUAGE BangPatterns #-}
module StrictTest where
data List a =
Nil |
Const a (List a)
deriving (Show)
take' n _ | n <= 0 = Nil
take' _ Nil = Nil
take' n (Cons x !xs) =
(Cons x (take' (n-1) xs))
map' _ Nil = Nil
map' f (Cons x xs) =
(Cons (f x) (map' f xs))
repeat' x = xs where xs = (Cons x xs)
main = do
print $ take' 10 $ map' (+1) (repeat' 1):sprint چی میگه؟
یک یا چندتا تعریف میدیم، شما (قبل از تست کردن) بگین خروجیِ :sprint چی میشه.
۱.
let x = 1۲.
let x = ['1']۳.
let x = [1]۴.
let x = 1 :: Int۵.
let f = \x -> x
let x = f 1۶.
let f :: Int -> Int; f = \x -> x
let x = f 1آیا چاپِ این بیانیه منجر به تهی میشه؟
۱.
snd (undefined, 1)۲.
let x = undefined
let y = x `seq` 1 in snd (x, y)۳.
length $ [1..5] ++ undefined۴.
length $ [1..5] ++ [undefined]۵.
const 1 undefined۶.
const 1 (undefined `seq` 1)۷.
const undefined 1بیانیه رو تهی کنین
فقط با استفاده از الگوی بنگ یا seq، کاری کنین کدِ زیر در اجرا تهی بشه.
۱.
x = undefined
y = "blah"
main = do
print (snd (x, y))