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

LISP引きこもり生活 (4) はてな日記をCLから更新する その2

| 11:02 | LISP引きこもり生活 (4) はてな日記をCLから更新する その2 - わだばLisperになる を含むブックマーク はてなブックマーク - LISP引きこもり生活 (4) はてな日記をCLから更新する その2 - わだばLisperになる

昨日のコードでは、どうもポストする度にどんどん追記されていってしまうようなので、更新する際には一旦削除してから再度ポストすることにしてみました。

もっとちゃんとした正しい方法があると思うんですが…。

ログアウトしてない所為かと思ってログアウトもするようにしたんですが、ログアウトするかしないかは追記の件とは関係ない様子。

上書きモードとか、追記モードがあるのかしら。

;; 使い方

;; Lispマシン的気分のための設定
(login-setq *hw-base-url* "http://cadr.g.hatena.ne.jp/g000001")

;; ポスト
(let ((cj (hw:login))
      (base *hw-base-url*))
  (hw:delete-entry base cj)
  (hw:post base
	   (hw::file-to-string "g000001/group/cadr/2008-02-29.txt")
	   cj)
  (hw:logout cj))

;; ----------------
(defun delete-entry (base-url cj &optional date)
  (let ((date (or date (today-string))))
    ;; confirm
    (http-request (sconc base-url "/edit") 
		    :external-format-in :utf-8 
		    :external-format-out :utf-8
		    :method :post
		    :cookie-jar cj
		    :parameters 
		    `(("mode" . "delete")
		      ("rkm" . ,(rkm cj base-url))
		      ("date" . ,date)))

    ;; delete
    (http-request (sconc base-url "/deletediary") 
		    :external-format-in :utf-8 
		    :external-format-out :utf-8
		    :method :post
		    :cookie-jar cj
		    :parameters 
		    `(("mode" . "enter")
		      ("rkm" . ,(rkm cj base-url))
		      ("date" . ,date)))))

(defun logout (cj)
  (http-request "https://www.hatena.ne.jp/logout" 
		:external-format-in :utf-8 
		:external-format-out :utf-8
		:cookie-jar cj))

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

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

今回は、ロトくじの様に数列からランダムに任意の個数の数字を抜き出したリストを返すというお題です。

ヒントとして以前に作成したrnd-selectとrangeを使用する、とあります。

前回のお題でも若干疑問に感じていたのですが、並びもランダムにしようと思うと、remove-atのように要素を元のリストから要素を落す方法では、並びは元のリストを継承してしまいます。

その辺をどうするのかと。

問題をみると並びまでばらばらなので、rnd-selectを変更して、残った要素と、落とす要素の二つのリストをリストにして返すことにしました。Arcには多値がないようなのでリストで。

(lotto-select 6 49)
;=> (20 44 31 36 1 9)

(def rnd-select (lst num)
  (and (< 0 num)
       ((afn (lst acc cnt)
	  (if (or no.lst (is len.lst num))
	      (list lst acc)
	      (let pos (+ 1 (rand len.lst))
		(self (remove-at lst pos)
		      (cons (lst (- pos 1)) acc)
		      (+ 1 cnt)))))
	lst () num)))

(def lotto-select (n rng)
  (cadr:rnd-select (range 1 rng) (- rng n)))