Je viens de commencer à apprendre le Lisp commun et j'ai donc travaillé sur des problèmes de projet euler. Voici ma solution (avec de l'aide de https://github.com/qlkzy/project-euler-cl). Est-ce que vous avez des suggestions pour des changements stylistiques et le genre pour le rendre plus lisp-y?Commentaires sur le programme Lisp pour le projet euler 4
; A palindromic number reads the same both ways. The largest palindrome made
; from the product of two 2-digit numbers is 9009 = 91 99.
; Find the largest palindrome made from the product of two 3-digit numbers.
(defun num-to-list (num)
(let ((result nil))
(do ((x num (truncate x 10)))
((= x 0) result)
(setq result (cons (mod x 10) result)))))
(defun palindrome? (num)
(let ((x (num-to-list num)))
(equal x (reverse x))))
(defun all-n-digit-nums (n)
(loop for i from (expt 10 (1- n)) to (1- (expt 10 n)) collect i))
(defun all-products-of-n-digit-nums (n)
(let ((nums (all-n-digit-nums n)))
(loop for x in nums
appending (loop for y in nums collecting (* x y)))))
(defun all-palindromes (n)
(let ((nums (all-products-of-n-digit-nums n)))
(loop for x in nums
when (palindrome? x) collecting x)))
(defun largest-palindrome (n)
(apply 'max (all-palindromes 3)))
(print (largest-palindrome 3))
Notez également que POSTULER ne fonctionne pas nécessairement sur de grandes listes. Utilisez REDUCE à la place. –
Cela appartient probablement à codereview – Vatine