Hatena::Groupcadr

わだばLisperになる このページをアンテナに追加 RSSフィード

2004 | 12 |
2005 | 01 | 02 | 07 | 10 | 11 |
2006 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 11 |

2007-04-30

L-99 (95)

| 23:08 | L-99 (95) - わだばLisperになる を含むブックマーク はてなブックマーク - L-99 (95) - わだばLisperになる

L-99 P95に挑戦 - L-99:Ninety-Nine Lisp Problems

あまりやる気が出ないので、簡単そうなのを探してみた

ところ、P95が簡単そうだったので、挑戦。

文字列処理は、Gaucheが充実しているので、そういう場

合、先にGaucheで実装してみるのが良いんじゃないかな

と思った春。

残りの問題:'(27 55 58-60 63 66 68 69 80-94 96-99)

P95

解答
;; LISP Machine LISP
(defun full-words (n)
  (let ((nstr (format nil "~a" n))
	(retstr ""))
    (mapc #'(lambda(x)
	      (setq retstr
		    (string-append
		      retstr
		      (selectq x
			(#/0 "zero")
			(#/1 "one")
			(#/2 "two")
			(#/3 "three")
			(#/4 "four")
			(#/5 "five")
			(#/6 "six")
			(#/7 "seven")
			(#/8 "eight")
			(#/9 "nine"))
		      "-")))
	  (let ((len (string-length nstr)))
	    (do ((i 0 (1+ i))
		 (retlst '()))
		((= i len) (nreverse retlst))
	      (push (aref nstr i) retlst))))
    (string-right-trim "-" retstr)))

;; Common Lisp
(defun full-words (n)
  (let ((nstr (format nil "~a" n))
	(retstr ""))
    (mapc #'(lambda(x)
	      (setq retstr
		    (concatenate 'string
				 retstr
				 (case x
				   (#\0 "zero")
				   (#\1 "one")
				   (#\2 "two")
				   (#\3 "three")
				   (#\4 "four")
				   (#\5 "five")
				   (#\6 "six")
				   (#\7 "seven")
				   (#\8 "eight")
				   (#\9 "nine"))
				 "-")))
	  (coerce nstr 'list))
    (string-right-trim "-" retstr)))

;; Scheme
(use srfi-13)

(define (full-words n)
  (string-join 
   (map (lambda (n)
	  (case n
	    ((#\0) "zero")
	    ((#\1) "one")
	    ((#\2) "two")
	    ((#\3) "three")
	    ((#\4) "four")
	    ((#\5) "five")
	    ((#\6) "six")
	    ((#\7) "seven")
	    ((#\8) "eight")
	    ((#\9) "nine")))
	(string->list (number->string n)))
   "-"))