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 |

2008-05-30

CLOSでL-99 (P24 ロトくじ)

| 23:54 | CLOSでL-99 (P24 ロトくじ) - わだばLisperになる を含むブックマーク はてなブックマーク - CLOSでL-99 (P24 ロトくじ) - わだばLisperになる

以前に作成したrangeと、rnd-selectを組み合わせる、というお題です。

あまり必要ないけれどメソッド結合。

どうやら数が大きくなってしまう場合は、このお題の方法より、シャッフルして先頭のN個を取得、という風にした方が速いみたいです…。

(defgeneric lotto-select (n range)
  (:documentation
   "P24 (*) Lotto: Draw N different random numbers from the set 1..M.
 The selected numbers shall be returned in a list."))

(defmethod lotto-select :around ((n integer) (range integer))
  (and (<= 1 n range)
       (call-next-method)))

(defmethod lotto-select ((n integer) (range integer))
  (rnd-select (coerce (vec-from-1-to range) 'list) n))

(defun vec-from-1-to (end)
  (declare ((integer 1 *) end))
  (loop :with res := (make-array end)
        :for i :from 0 :below end 
        :do (setf (svref res i) (1+ i))
        :finally (return res)))

LISP引きこもり生活 (10) SWANK環境

| 22:04 | LISP引きこもり生活 (10) SWANK環境 - わだばLisperになる を含むブックマーク はてなブックマーク - LISP引きこもり生活 (10) SWANK環境 - わだばLisperになる

当初身の回りのものを全部CLで揃える試みを綴る予定だったのですが、どんどんひよってきてしまいました。

もっとアグレッシブに行きたいのですが、なかなか難しい…。

ここ最近で変化したことといえば、SBCLでの開発環境をちょっと変更してみていました。

どういう風に変更したかというと、SLIMEはCL側でSWANKというサーバを立てて、EMACS等のクライアントを通信するという形で開発が行われるわけなのですが、SBCLのSWANKサーバを単体の実行ファイルにしてみました。

起動時に色々設定ファイルを読ませる設定を書いたりするより、すっきりするかと思い試してみているのですが、気分的にはなんとなくすっきりするような…。

あんまり役に立ちそうもないですが、なんとなく手順を書いてみます。

1. SBCLは起動時に実行する関数が指定できるので、この機能を利用して、SWANKサーバを起動させます。

(pushnew
  (lambda () (swank:create-server :port 4005 :dont-close 'T))
   sb-ext:*init-hooks*)

sb-ext:*init-hooks*に起動時に実行する関数をリストで指定します。

2. 他、SWANK関係のいつもの設定をいろいろ

(progn
  (setq sb-impl::*default-external-format* :utf-8)
  (setq swank::*coding-system* "utf-8-unix")
  ;; ...
  )

3. 普段、イメージを作成するのと同じようにしてダンプするところで、実行ファイルにするように指定します。

(sb-ext:save-lisp-and-die "/tmp/swank-sbcl" :purify 'T :executable 'T)

これでできた、/tmp/swank-sbclを実行すれば、SWANKサーバが起動します。

ゲスト



トラックバック - http://cadr.g.hatena.ne.jp/g000001/20080530