سؤال

المواصفات

GHC 6.12.1

Mac OS X 10.6.4 x64

ماك بوك برو

مشكلة

أواجه مشكلة في استخدام let بناء الجملة. الرمز التالي يرفض التجميع:

module Main where

main = let x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

حاولت التبويب في y = 2 و z = 3 أكثر. لا النرد.

(غير مرغوب فيه) الحلول

الطريقة الوحيدة التي حصلت بها على الرمز لتجميعها هي إما

  1. استبدال علامات التبويب الصلبة مع المساحات.
  2. استبدال let بند مع where بند.
هل كانت مفيدة؟

المحلول

يوضح Saizan on #Haskell أن تعيينات في السماح للتعبير يجب أن يتوافق ، لا يترك بحد ذاتها. طالما أن الواجبات تصطف ، لا بأس في استخدام علامات التبويب الصلبة أو علامات التبويب الناعمة.

الكود الصحيح:

module Main where

main = let
        x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

نصائح أخرى

لا يمكنك ببساطة التحكم في المسافة البادئة بشكل صحيح باستخدام علامات التبويب لأن حجم علامة التبويب غير محددة.

لذلك ، لا تستخدم علامات التبويب في هاسكل. انهم شرير.

المسافة البادئة لكل إعلان في Let-Block إلى نفس الدرجة. كما أن الشكل الجيد هو مسافة بادئة "في" و "دع" لنفس المستوى. على سبيل المثال ..

main = let x = 1
           y = 2
           z = 3
       in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

أنا شخصياً وضعت فاصلاً في نهاية كل سطر

module Main where

main = let x = 1 ;
           y = 2 ;
           z = 3 
in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

إذا كنت تصر على أحرف TAB في المصدر الخاص بك ، فإن ما يلي يجمع:

module Main where

main =
    let x = 1
        y = 2
        z = 3
    in putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z

حيث يكون كل من المساحة البيضاء الرائدة إما علامة تبويب واحدة أو اثنين ، والمسافة البيضاء بين let و x = 1 هي أيضا علامة تبويب. تم عرضه في السادس وضع القائمة لجعل علامات التبويب ونهاية الخطية صريحة:

module Main where$
$
main =$
^أناlet^أناx = 1$
^أنا^أناy = 2$
^أنا^أناz = 3$
^أناin putStrLn $ "X = " ++ show x ++ "\nY = " ++ show y ++ "\nZ = " ++ show z$

ستكون حياتك أبسط بكثير ورمزك أجمل إذا قمت بالتبديل إلى المساحات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top