سؤال

mifun s = foldr op 0 s
          where op x r = head x + r 

هل هناك طريقة لجعل GHCI تخبرني؟

هل كانت مفيدة؟

المحلول

محاولة :t mifun (باختصار ل :type mifun)

الذي يعطي

*Main> :t mifun
mifun :: (Num b) => [[b]] -> b

لذلك ، ل b مثال num, mifun يأخذ قائمة قوائم b ويخرج واحد b (وهو في هذه الحالة هو مجموع العناصر الأولى من القوائم).

نصائح أخرى

هذه ليست إجابة حقًا ، لكنني كنت بحاجة إلى التنسيق.

NB: mifun هل ⊥ إذا كان أي من القوائم الموجودة فارغة. فمثلا:

> mifun [[3], [5, 8], [], [1, 2, 3]]
*** Exception: Prelude.head: empty list

إذا كنت تريد أن تكون نتيجة المثال أعلاه 9 (تعامل قائمة فارغة على أنها لا تساهم في المبلغ) ، فيجب عليك تحديد OP على أنه أحد الطرق التالية:

mifun s = foldr op 0 s
          where op []    r = r
                op (x:_) r = x + r 

mifun s = foldr op 0 s
          where op x r = (if null x then 0 else head x) + r 

mifun s = foldr op 0 s
          where op x r = sum (take 1 x) + r 

ربما أفضل الأول.

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