patternMinor
Print an integer and its digits reversed
Viewed 0 times
digitsreverseditsprintandinteger
Problem
This Common Lisp program is an exercise to print an integer and its digits reversed to the screen:
(defun read-number () (format t "Enter a number: ~%") (read))
(defun reverse-string (the-string)
(if (eq (length the-string) 0)
""
(concatenate 'string (reverse-string (subseq the-string 1)) (subseq the-string 0 1))))
(defun reverse-digits (the-number) (reverse-string (write-to-string the-number)))
(let ((the-number (read-number)))
(format t "N->: ~a~%<-N: ~a~%" the-number (reverse-digits the-number)))Solution
This problem is more about numbers than strings, so I felt the need to post a non-string-based solution. I've got my original Scheme version, and a Common Lisp adaptation of same.
Scheme version:
Common Lisp translation of the Scheme version:
Scheme version:
(define (reverse-digits n)
(let loop ((n n) (r 0))
(if (zero? n) r
(loop (quotient n 10) (+ (* r 10) (remainder n 10))))))Common Lisp translation of the Scheme version:
(defun reverse-digits (n)
(labels ((next (n v)
(if (zerop n) v
(multiple-value-bind (q r)
(truncate n 10)
(next q (+ (* v 10) r))))))
(next n 0)))Code Snippets
(define (reverse-digits n)
(let loop ((n n) (r 0))
(if (zero? n) r
(loop (quotient n 10) (+ (* r 10) (remainder n 10))))))(defun reverse-digits (n)
(labels ((next (n v)
(if (zerop n) v
(multiple-value-bind (q r)
(truncate n 10)
(next q (+ (* v 10) r))))))
(next n 0)))Context
StackExchange Code Review Q#1219, answer score: 4
Revisions (0)
No revisions yet.