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-03-31

L-99 (41)

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

L-99 41問目に挑戦 - L-99:Ninety-Nine Lisp Problems

P41

解答
;;; Common Lisp

(defun goldbach-list (start end)
  (mapcar #'goldbach
	  (remove-if #'(lambda (item)
			 (or (< item 6)
			     (oddp item)))
		     (range start end))))

(defun goldbach-list/limit (start end limit)
    (remove-if #'(lambda (item) 
		   (< (car item) limit))
	       (goldbach-list start end)))

(defun pp-goldbach-list (lst)
  (mapc #'(lambda (item)
	    (destructuring-bind (a b)
		item
	      (format t "~d = ~d + ~d~%" (+ a b) a b)))
	lst))

;;; Scheme

(use srfi-1)

(define (goldbach-list start end)
  (map goldbach
       (remove (lambda (item)
		 (or (< item 6) (odd? item)))
	       (range start end))))


(define (goldbach-list/limit start end limit)
  (remove (lambda (item) (< (car item) 50))
	  (goldbach-list start end)))

(use util.match)

(define (pp-goldbach-list lst)
  (for-each (lambda (item)
	      (match-let (((a b) item))
			 (format #t "~D = ~D + ~D~%"  (+ a b) a b)))
	    lst)
  lst)

今回のお題は、指定した範囲内の偶数に前回のgoldbach

関数を適用して、リストを返す?関数の作成

リストを取って結果をリストでかえすgoldbach-listと、

下限を指定してある、goldbach-list/limitと、専用の

清書用の関数pp-goldbach-listを作ってみた。

(pp-goldbach-list (goldbach-list 1 2000))

とすれば問題と同じように出力される。