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-22

L-99 (37)

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

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

P37

解答
;; Common Lisp
(load "prime-factors-mult")

(defun phi (m)
  (apply #'*
	 (mapcar #'(lambda (list) 
		     (destructuring-bind (p m)
			 list
		       (* (1- p) (expt p (1- m)))))
		 (prime-factors-mult m))))

;; Scheme
(use util.match)
(load "prime-factors-mult")

(define phi
  (lambda (m)
    (let loop ((ls (prime-factors-mult m))
	       (retval 1))
      (if (null? ls)
	  retval
	  (loop (cdr ls)
		(* retval (match-let (((p m) (car ls)))
				     (* (- p 1) (expt p (- m 1))))))))))

前に作成したφ関数の進化版を実装するのが今回のお題。

前回の問題は、今回の前振りだった様子。

scheme版は、mapだと面白くないかなと思って、無理に

ループにしてみた。