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

PDP-6 LISP -> MacLISP

| 14:27 | PDP-6 LISP -> MacLISP - わだばLisperになる を含むブックマーク はてなブックマーク - PDP-6 LISP -> MacLISP - わだばLisperになる

  • どっからPDP-6 LISPで、どっからMacLISPなのかというのはずっと謎だったが、今日WikipediaのMacLISPの項目を読んでいて、途中から名前が変っただけのものということが分かった。1970年代始めに、同じPDP-6で稼働するBBN LISPが出現したので区別するために、MacLISPと呼ぶようになったとのこと。そういうことか!

CLOSでL-99 (P14 各要素を2倍する)

| 11:10 | CLOSでL-99 (P14 各要素を2倍する) - わだばLisperになる を含むブックマーク はてなブックマーク - CLOSでL-99 (P14 各要素を2倍する) - わだばLisperになる

全体を纏めるdefgenericを根っことして作成して、他の枝葉は、defmethodで書く、というスタイルがあるようなので真似してみました。 確かに分かりやすいかもしれません。
(dupli '(a b c d e f))
;=> (A A B B C C D D E E F F)

(defgeneric DUPLI (lst)
  (:documentation "P14 (*) Duplicate the elements of a list."))

(defmethod DUPLI ((lst null))
  () )

(defmethod DUPLI ((lst cons))
  (destructuring-bind (head &rest tail) lst
    `(,head ,head ,@(DUPLI tail))))

QiでL-99 (P14 各要素を2倍する)

| 10:54 | QiでL-99 (P14 各要素を2倍する) - わだばLisperになる を含むブックマーク はてなブックマーク - QiでL-99 (P14 各要素を2倍する) - わだばLisperになる

割とQiは良いかもしれない…、と思いつつ、未だチュートリアルを開いて見ることさえしていない…。
(dupli [a b c d e])
\=> [a a b b c c d d e e]
\

(define dupli 
  [ ] -> [ ]
  [H | T] -> [H H | (dupli T)])

(setf (values ~))

| 10:40 | (setf (values ~)) - わだばLisperになる を含むブックマーク はてなブックマーク - (setf (values ~)) - わだばLisperになる

気合いを入れてエントリとして纏めるのは面倒だけれど、メモしておきたいことを*standard-output*エントリとして書いてみることにしました。
  • いつもmultiple-value-setqを書いてて思い出すけど、(setf (values x y) (values 1 2))で複数の値を一度にセットできることを忘れがち。
  • MacLISPのコードを読んでいて、(setq x 10 x/' 11 y 20)のような記述を発見。/はエスケープ文字で、Common Lispでは、\になる。エスケープしてまで、x'と表現する意気込みに感心。割とエスケープしてでも意図通りに書く、というのは、MacLISPには多い気もする。

ArcでL-99 (P41c ゴールドバッハ予想をリスト表示)

| 08:17 | ArcでL-99 (P41c ゴールドバッハ予想をリスト表示) - わだばLisperになる を含むブックマーク はてなブックマーク - ArcでL-99 (P41c ゴールドバッハ予想をリスト表示) - わだばLisperになる

前回のものをさらにひねって、2〜3000の範囲で該当するものが何件あるかと求めよ、とのこと。 目視で数えるのはアレなので、数えるプログラムを書いてみました。
(goldbach-list/c 2 3000 50)
;=> 10

(def goldbach-list/c (start end limit)
  (count (fn ((x y)) (< limit (min x y)))
         (trues goldbach (range start end))))

ArcでL-99 (P41b ゴールドバッハ予想をリスト表示)

| 08:17 | ArcでL-99 (P41b ゴールドバッハ予想をリスト表示) - わだばLisperになる を含むブックマーク はてなブックマーク - ArcでL-99 (P41b ゴールドバッハ予想をリスト表示) - わだばLisperになる

前回は範囲をそのまま出力するものでしたが、ちょっとひねって、50より大きいものだけを出力するというものです。 ちょっと改造して終了。
(goldbach-list/b 1 3000 50)
;=> 992 = 73 + 919
;   1382 = 61 + 1321
;   1856 = 67 + 1789
;   1928 = 61 + 1867
;   2078 = 61 + 2017
;   2438 = 61 + 2377
;   2512 = 53 + 2459
;   2530 = 53 + 2477
;   2618 = 61 + 2557
;   2642 = 103 + 2539

(def goldbach-list/b (start end limit)
  (each p (range start end)
    (whenlet (x y) (goldbach p)
      (when (< 50 (min x y))
        (prf "#p = #x + #y\n")))))

ゲスト



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