خطأ هاسكل: خطأ في الإدخال `= '
-
26-09-2019 - |
سؤال
المواصفات
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
أكثر. لا النرد.
(غير مرغوب فيه) الحلول
الطريقة الوحيدة التي حصلت بها على الرمز لتجميعها هي إما
- استبدال علامات التبويب الصلبة مع المساحات.
- استبدال
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$
ستكون حياتك أبسط بكثير ورمزك أجمل إذا قمت بالتبديل إلى المساحات.