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-09-21

ClojureでL-99 (P05 コレクションの逆転)

| 21:35 | ClojureでL-99 (P05 コレクションの逆転) - わだばLisperになる を含むブックマーク はてなブックマーク - ClojureでL-99 (P05 コレクションの逆転) - わだばLisperになる

ドキュメントを付けてみました。他にユーザコメントとテストが付けられるようです。

;; P05 (*) Reverse a list.
(defn 
  #^{:doc "P05 (*) Reverse a list."}
  rev [coll]
  (let [str? (string? coll)]
    (loop [coll coll, acc []]
      (if (empty? coll)
        (if str?
          (apply str acc)
          acc)
        (recur (rest coll) (cons (first coll) acc))))))

(rev "foooo")
;=> "oooof"
(rev '[f o o o])
;=> (o o o f)

ClojureでL-99 (P04 リストの長さ)

| 21:35 | ClojureでL-99 (P04 リストの長さ) - わだばLisperになる を含むブックマーク はてなブックマーク - ClojureでL-99 (P04 リストの長さ) - わだばLisperになる

lengthが標準ではないようなのですが、もしかすると無限リストの存在と関係があったりするんでしょうか。

;;P04 (*) Find the number of elements of a list.

(defn length [coll]
  (loop [coll coll, acc 0]
    (if (empty? coll)
      acc
      (recur (rest coll) (+ 1 acc)))))

(length "いろはにほ")
;=> 5
;; これでは無限リストじゃ止まらない。

ClojureでL-99 (P03 K番目の要素)

| 21:35 | ClojureでL-99 (P03 K番目の要素) - わだばLisperになる を含むブックマーク はてなブックマーク - ClojureでL-99 (P03 K番目の要素) - わだばLisperになる

;; P03 (*) Find the K'th element of a list.

(defn element-at [coll pos]
  (loop [coll coll, pos pos]
    (if (>= 1 pos)
      (first coll)
      (recur (rest coll) (- pos 1)))))

(element-at "いろはにほ" 3)

;=> \は

ClojureでSLIME

| 20:32 | ClojureでSLIME - わだばLisperになる を含むブックマーク はてなブックマーク - ClojureでSLIME - わだばLisperになる

開発環境の設定は、Clojureのチュートリアルにも書いてあり、なんとClojure用のSLIMEまであります(*'-')

しかし、どうも更新が激しいらしく、どれを参照して良いものやら、という感じで、実際、上のチュートリアルの通りにしても動かないので今日現在で動く設定を晒してみることにしました。

恐らく、SLIMEもCVS版推奨という感じなのではないかと思います。

run-clojureというコマンドが定義してあるので、これでSLIMEが起動します。

SLIMEの具合ですが、引数の表示、マクロ展開、関数名補完、インスペクタ、ドキュンメントストリングの参照(C-c C-d d)を初めとして普段使いそうな機能は大体動きます。

ということで、CLは嫌いだけど、SLIMEは体験してみたいという向きにもお勧めかもしれません。

#!/bin/sh

#Clojureの置き場所
CLOJURE_HOME=~/Desktop/Clojure

cd $CLOJURE_HOME
java -jar $CLOJURE_HOME/clojure.jar $*
;;;;
;;;; Clojure mode
;;;;
;;;; (require 'cl)してないと動かないw

;; clojure-modeの置き場所
(pushnew "p/a/t/h" load-path)
(require 'clojure-mode)
 
;;;;
;;;; Setup slime
;;;;
;;;;(pushnew "c:/dev/cvstree/slime.cvs" load-path)
;;;; slimeは既に他で設定してある。
 
(setf slime-lisp-implementations
      ;; clojure-initじゃなくて、swank-clojure-initに変更になっていた。
      '((clojure ("~/bin/clojure") :init swank-clojure-init) 
                ))

(require 'slime-autoloads)
;; slime-scratch有効にしてるけど、上手く動かない…。
(slime-setup '(slime-scratch slime-editing-commands))

;; clojure-swankの場所
(pushnew  "/p/a/t/h" load-path)
(require 'swank-clojure)
 
(defun run-clojure ()
  "Starts clojure in slime"
  (interactive)
  (slime 'clojure))

9/20第17回慢性的CL勉強会@Lingr 8時だョ!全員集合まとめ

| 19:00 | 9/20第17回慢性的CL勉強会@Lingr 8時だョ!全員集合まとめ - わだばLisperになる を含むブックマーク はてなブックマーク - 9/20第17回慢性的CL勉強会@Lingr 8時だョ!全員集合まとめ - わだばLisperになる

昨日、9/20 20:00から17回目の勉強会を開催させて頂きました!

発言して頂いた方約14名、observer(ROM)の方約10名前後で、大体24名前後を推移しつつでした。

今週もShibuya.lispのお蔭様か人が多かったような気がします(*'-')

今回のお題は、参加者の環境構築状況を報告し合うというもので、私(g000001)、NANRIさん、onjoさん、quekさんの順に説明をしつつ、参加者と質疑応答という感じでした。

onjoさんは、Google Presentationでの説明とありということで、力作のご提供ありがとうございます!

反省と課題

予め、準備することを強調して告知していなかったため、説明を準備している方が4人という状況でした。

今回に限っては、初回ということもあり、ほぼ説明が重複することもないので丁度ではありましたが、事前にもう少し詳しく参加方法を説明すべきでした。

発表資料

「Common Lisp 環境紹介 for Windows」onjoさん

まとめBlogエントリ

letter: [Common Lisp] 開発環境」quekさん

ログ:

謝辞:

ページへの勉強会のロゴ設置ありがとうございます!

今回も勉強会の一員に加えて頂いてありがとうございます!

屋上屋

| 18:42 | 屋上屋 - わだばLisperになる を含むブックマーク はてなブックマーク - 屋上屋 - わだばLisperになる

(=
 (funcall #'funcall #'funcall #'+ 1 2 3 4)
 (apply #'apply #'+ 1 2 3 4 () ())
 (apply #'apply #'apply #'+ 1 2 3 4 () () ())
 (apply #'apply #'apply #'+ '(1 2 3 4) () ())
 (apply #'apply #'apply #'+ '((1 2 3 4)) ())
 (apply #'apply #'apply #'+ '(((1 2 3 4))))
 (apply #'apply #'apply #'funcall `(((,#'+ 1 2 3 4)))))
;=> T

ゲスト



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