Палиндромы в Хаскеле - PullRequest
       13

Палиндромы в Хаскеле

1 голос
/ 11 августа 2009

Я работаю над Project Euler Задача 4 , и мне нужно найти палиндром произведения из 2-х трехзначных чисел, поэтому я придумал:

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

Почему это не работает и как я могу заставить его работать? Я подозреваю, что мне нужно каким-то образом получить ответ в список, чтобы его можно было перевернуть и проверить, является ли он палиндромом.

Ответы [ 2 ]

9 голосов
/ 11 августа 2009

Эта часть

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)]
2 голосов
/ 11 августа 2009

Вы не хотите применять функцию реверса к списку, который содержит одно число. Вам необходимо применить обратную функцию к строковому представлению этого числа.

Попробуйте использовать функцию "show".

Кроме того, если у вас достаточно сил, чтобы не смотреть на это и не разрушить всю цель Project Euler, вы можете посмотреть на это:

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...