Sha256: 8f7ca62908a0c45723fd158adce4974c6caed5e694a84c37d47fef9a848b9b98

Contents?: true

Size: 990 Bytes

Versions: 396

Compression:

Stored size: 990 Bytes

Contents

(defpackage #:phone
  (:use #:common-lisp)
  (:export #:numbers #:area-code #:pretty-print))

(in-package #:phone)

(defun is-digit-p (c) (char<= #\0 c #\9))

(defun strip-non-digits (string)
  (remove-if-not #'is-digit-p string))

(defun trim-leading-one (string)
  (if (and (= 11 (length string))
	   (equal #\1 (char string 0)))
      (subseq string 1)
      string))

(defun ensure-valid (string)
  (if (= 10 (length string)) string "0000000000"))

(defun numbers (number-string)
  (reduce #'(lambda (s fn) (funcall fn s))
	  '(strip-non-digits trim-leading-one ensure-valid)
	  :initial-value number-string))

(defun area-code (number-string)
  (subseq (numbers number-string) 0 3))

(defun exchange (number-string)
  (subseq (numbers number-string) 3 6))

(defun subscriber (number-string)
  (subseq (numbers number-string) 6 10))

(defun pretty-print (number-string)
  (format nil "(~D) ~D-~D"
	  (area-code number-string)
	  (exchange number-string)
	  (subscriber number-string)))

Version data entries

396 entries across 396 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.179 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.178 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.177 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.176 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.175 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.174 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.173 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.172 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.171 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.170 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.169 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.167 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.166 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.165 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.164 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.163 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.162 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.161 tracks/common-lisp/exercises/phone-number/example.lisp
trackler-2.2.1.160 tracks/common-lisp/exercises/phone-number/example.lisp