سؤال
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
ربما أفضل الأول.
لا تنتمي إلى StackOverflow