سؤال

أنا أعمل في مشروع Euler المشكلة 4., ، وتحتاج إلى العثور على palindrome من نتاج 2 أرقام رقمين، لذلك توصلت إلى:

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse [x*y] == [x*y]]

لماذا لا يعمل هذا وكيف يمكنني عمله؟ أظن أنني بحاجة إلى الحصول على إجابة بطريقة أو بأخرى في قائمة بحيث يتم عكسها وفحصها إذا كانت palindrome.

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

المحلول

هذا الجزء

reverse [x*y] == [x*y]

خطأ. [x*y] هي قائمة بعنصر واحد: نتيجة x*y. وبعد العكس هو نفس القائمة ...

ما تريده هو العدد مع أرقامه. تحتاج إلى قائمة مع أرقام الرقم. خدعة بسيطة للقيام بذلك تقوم بتحويل الرقم إلى تمثيل السلسلة (تذكر ذلك type String = [Char]). للقيام بذلك، يمكنك استخدامها show, ، بدلا من [ ]:

palindrome = [ x*y | x <- [100..999], y <- [100..999], reverse (show (x*y)) == show (x*y)]

نصائح أخرى

لا تريد تطبيق الوظيفة العكسية إلى قائمة تحتوي على رقم واحد. تحتاج إلى تطبيق الوظيفة العكسية لتمثيل سلسلة هذا الرقم.

حاول استخدام وظيفة "إظهار".

أيضا، إذا كان لديك قوة كافية لتجنب النظر إليها وتخرط الغرض بأكمله من Euler Project، يمكنك إلقاء نظرة على هذا:

http://www.haskell.org/haskellwiki/euler_problems.

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