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-02-18

L-99 (26)

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

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

P26

解答
;; Common Lisp
(defun combination (n list)
  (cond ((zerop n)
	 '())
	((= (length list) n)
	 `(,list))
	((= n 1)
	 (mapcar #'(lambda (i) (cons i ()))
		 list))
	('t
	 `(,@(mapcar #'(lambda (i) `(,(car list) ,@i))
		     (combination (1- n) (cdr list)))
	     ,@(combination n (cdr list))))))

;; Scheme
(define combination
  (lambda (n lis)
    (cond ((zero? n)
	   '())
	  ((= (length lis) n)
	   `(,lis))
	  ((= n 1)
	   (map (lambda (i) `(,i))
		lis))
	  (else
	   `(,@(map (lambda (i) `(,(car lis) ,@i))
		    (combination (- n 1) (cdr lis)))
	     ,@(combination n (cdr lis)))))))

L-99のサイトに接続できないので、オリジナルのP-99の

サイトの問題を掲載。

ここに来て急激に難しい。バックトラッキングしてみよ

うとあるが、どういう感じでバックトラッキングして良

いのか分からないので、普通に回答。

L-99が終ったらPrologで、P-99にも挑戦してみようと思

うのだった。