g000001 2008-09-20T20:34:47+09:00
(defun&test )とかマクロ組んで、処理系側で作成するなら
簡単ですかねw
やってみないと分からないかも。
一応、どう書くorgに投稿する時とかは、テストしたりはしてみてるんですがw
自分は、これ位ですねー。
とりあえず、後は、思い出したら質問って感じで、
次の方どうでしょう?(*'-')
アルファベット順だと、NANRIさんとかw

名無しさん 2008-09-20T20:37:07+09:00
んじゃ、自分がやります

g000001 2008-09-20T20:37:23+09:00
おねがいしますー(*'-')

名無しさん 2008-09-20T20:37:31+09:00
おねがいしますー
アムロ行ってください笑

g000001 2008-09-20T20:38:14+09:00


名無しさん 2008-09-20T20:38:21+09:00
まずは、OS周りですね。
Mac OS X 10.5 がメイン
Macports で入れた sbcl と clisp を主に使用
cmucl と ecl も入れてあるけど起動するのは稀

サブは Debian testing
Windows機のバーチャルマシンなので最近はあんまり使っていない

ちなみにWindowsにはsbclとclispとeclが一応いれてあるけど、使わない
Windowsで使うLispはxyzzyのみ
という感じです。

g000001 2008-09-20T20:38:55+09:00
おお、なるほど
Win環境が意外w

名無しさん 2008-09-20T20:39:11+09:00
ほとんどsbclオンリーですね
たまにclispという感じで

g000001 2008-09-20T20:39:30+09:00
あれ、CLISPの人だったのではw

名無しさん 2008-09-20T20:40:30+09:00
CGIを書きたいので最終的にはclispになるんですけど、起動するのはsbclという感じで

g000001 2008-09-20T20:40:41+09:00
なるほど(*'-')

名無しさん 2008-09-20T20:41:43+09:00
次はライブラリの整備ですね。

g000001 2008-09-20T20:41:54+09:00
はいー(*'-')

名無しさん 2008-09-20T20:41:56+09:00
極力 sbcl の asdf-install で入れる
  ソース置き場: $HOME/local/share/common-lisp/source
  asd置き場  : $HOME/local/share/common-lisp/systems
  fasl置き場(?): $HOME/local/var/cache/common-lisp
配置は何となくDebianのcommon-lisp-controllerを意識
asdf-addonsは自分も使ってます

g000001 2008-09-20T20:42:38+09:00
なるほど、なるほど。

名無しさん 2008-09-20T20:43:02+09:00
.sbclrcはだいたいこんなものになってます。
-- .sbclrc
(require :asdf)
(push (merge-pathnames "local/share/common-lisp/systems/" (user-homedir-pathname)) asdf:*central-registry*)
(require :asdf-install)
(pushnew (list (merge-pathnames "local/share/common-lisp/source/" (user-homedir-pathname))
               (merge-pathnames "local/share/common-lisp/systems/" (user-homedir-pathname))
               "Common install")
         asdf-install:*locations*
         :test #'equal)
(asdf:oos 'asdf:load-op :swank)

(load (merge-pathnames "local/share/common-lisp/source/asdf-addons/asdf-cache.lisp" (user-homedir-pathname)))
;(compile-file (merge-pathnames "local/share/common-lisp/source/asdf-addons/asdf-cache.lisp" (user-homedir-pathname)))
(setf asdf-cache:*asdf-cache* (merge-pathnames "local/var/cache/common-lisp/" (user-homedir-pathname)))

#+sbcl (setq sb-impl::*default-external-format* :utf-8)

(asdf:oos 'asdf:load-op :cl-fad)
(asdf:oos 'asdf:load-op :jp)
-- 
他の処理系についても似たようなもので初期化ファイルには asdf-cache と compatibility layer を書いているくらいですね。

g000001 2008-09-20T20:44:07+09:00
なるほど、なるほど(*'-')
asdf-addons使ってるので、それようの設定がされてますね。

名無しさん 2008-09-20T20:47:13+09:00
初期化ファイルがこんな感じなので、コアイメージはデフォルトのままです。

g000001 2008-09-20T20:47:34+09:00
なるほど。.sbclrcで設定する派ということですね

名無しさん 2008-09-20T20:48:19+09:00
ライブラリをロードするのは必要な時に必要な分だけという感じになってます。
.sbclrcで設定するというより、まだ手探り中という感じでしょうか

g000001 2008-09-20T20:49:07+09:00
なるほど(*'-')

名無しさん 2008-09-20T20:49:47+09:00
SLIMEや、Emacsの設定ですけど、Emacsはあんまりいじってません。
-- .emacs
(setq browse-url-browser-function 'w3m-browse-url)

(setq-default indent-tabs-mode nil) 
;(setq inferior-lisp-program "clisp -K full -E UTF-8")
(setq inferior-lisp-program "sbcl")
(setq load-path (cons "~/.emacs.d/site-lisp/slime/" load-path))
(require 'slime)
(slime-setup '(inferior-slime
	       slime-asdf
	       slime-banner
	       slime-editing-commands
	       slime-fancy-inspector
	       slime-fuzzy
	      ;slime-highlight-edits
	       slime-indentation
	       slime-parse
	       slime-presentations
	       slime-references
	      ;slime-scheme
	       slime-scratch
	       slime-tramp
	      ;slime-typeout-frame
	       slime-xref-browser))
(setq lisp-indent-function 'cl-indent:function)
(setq slime-lisp-implementations '((sbcl  ("sbcl") :coding-system utf-8-unix)
				   (clisp ("clisp" "-K" "full" "-E" "UTF-8") :coding-system utf-8-unix)
				   (ecl   ("ecl") :coding-system nil)
				   (cmucl ("cmucl") :coding-system nil)))
(setq slime-net-coding-system 'utf-8-unix)
(setq common-lisp-hyperspec-root "/opt/local/share/doc/lisp/HyperSpec-7-0/HyperSpec/")
(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(slime-complete-symbol-function (quote slime-fuzzy-complete-symbol)))
--
slime周りはこんな感じです。

g000001 2008-09-20T20:51:01+09:00
なるほど、

名無しさん 2008-09-20T20:51:07+09:00
補完はfuzzyですね。

g000001 2008-09-20T20:51:10+09:00
w3mでEMACS内で完結、みたいな
SLIMEはSWANKに接続というより、M-x slimeでemacs内から起動という
感じなんでしょうか

名無しさん 2008-09-20T20:52:06+09:00
あ、その通りです>M-x slime
emacsはversion 22?
ですね。>version
なるほど、23にしてからw3mがうまく動かせてなかったからつかえなくなったんだよね…
23 スルーして正解だったかw

g000001 2008-09-20T20:53:54+09:00
自分、23とか、22混在ですねー
HyperSpecはFireFoxで観てるので
気付かなかったw

名無しさん 2008-09-20T20:54:35+09:00
使えないからあれこれ工夫はしたものの http://lisp.xrea.cc/hapropos.cgi を自宅サーバーにおいて解決^^;
ドキュメントの参照方法はslime使っている時はslimeからなんですが、lispdoc(http://lispdoc.com/)を使うことが結構多いです。
これ CLISP 製なんですか?
うん
Firefoxのsearch pluginがあるからかなと。

g000001 2008-09-20T20:57:54+09:00
なるほど、後でみんなのドキュメント参照方法を詳しく
語りましょうw
色々あるようですね(*'-')

名無しさん 2008-09-20T20:59:17+09:00
開発サイクルは何とも言えないですね。ライブラリの使い方が分からず、試行錯誤しながらやってます。
という感じです。

g000001 2008-09-20T20:59:35+09:00
なるほど、なるほど。
テストは特に利用してない、みたいな。

名無しさん 2008-09-20T20:59:56+09:00
はい。

g000001 2008-09-20T21:00:22+09:00
なるほどー。
大体、一人30分で、良い感じですねw

名無しさん 2008-09-20T21:02:56+09:00
firefox の検索プラグインってどんな感じなんですかね > lispdoc.com
http://lispdoc.com/のページで「firefox plugin」というリンクがあります。
その先です。

quek 2008-09-20T21:04:49+09:00
Opera 用はないですよね。。。

名無しさん 2008-09-20T21:05:18+09:00
あ、見つかった。なんて控えめなリンクだ。
あとfirefox側の設定で中クリックでクリップボードの単語を検索するようにしてます。

g000001 2008-09-20T21:06:22+09:00
おー、そんな便利な機能が
ということで、NANRIさんは、
以上でしょうか(*'-')
後程また、足りないところは、補足ということで(*'-')

名無しさん 2008-09-20T21:07:51+09:00
はい、です。

g000001 2008-09-20T21:08:12+09:00
ではでは、
onjoさんお願いしますー

名無しさん 2008-09-20T21:08:29+09:00
そんでは、まずテキストで必須項目を…(スライドはWindowsの入門用です)
OS は主に WindowsXP です。VMware で Linux 動かしてます。
Linux 上が実質のメイン環境で、 ~/lisp 以下に
build - 処理系のソース
doc - ドキュメント
lib - ライブラリのソース
user - ゴミ
があります。処理系やライブラリは全部 CVS のカレントを追っかけてます。

g000001 2008-09-20T21:11:16+09:00
おお、全部カレントw

haiju 2008-09-20T21:11:31+09:00
凄い

名無しさん 2008-09-20T21:11:43+09:00
ローカルでは git でミラーしてて、手に負えない感じのときは安定版に戻ります。

g000001 2008-09-20T21:12:07+09:00
おおー、格好良いですね。

名無しさん 2008-09-20T21:13:07+09:00
で、 ~/lisp 以下の .git のあるフォルダを全部更新するシェルスクリプトを使ってコマンド一発で全部最新化

g000001 2008-09-20T21:13:36+09:00
おおー、便利そう!

haiju 2008-09-20T21:14:00+09:00
詳細が知りたいです

名無しさん 2008-09-20T21:14:34+09:00
え、たいしたもんではなくこのライブラリをおっかけるぞ~と決意したときに、
コマンドをシェルスクリプトに足してるだけですけどw
git で svn をミラーする場合は git-svn clone -> git-svn rebase で簡単です。CVS は git-cvsimport ですね。まぁ、たまに追跡不能になったりしますが。
!/bin/sh ? !/usr/local/bin/clisp ?w

g000001 2008-09-20T21:17:08+09:00
おおー、git便利ですねー

名無しさん 2008-09-20T21:17:22+09:00
/usr/local/bin/clisp --> /home/onjo/local/bin/clisp
おぉ

g000001 2008-09-20T21:17:39+09:00
ホームディレクトリが巨大そうですねw

名無しさん 2008-09-20T21:18:02+09:00
そう、実質すべて HOME にブチ込んでます。

g000001 2008-09-20T21:18:19+09:00
自分も最近そっちの方が良いかなーとか思います。
まえは、律義に/usr/localとかシステム管理な感じでやってましたが、面倒臭いというw

名無しさん 2008-09-20T21:19:02+09:00
どーせ個人用だしね。FreeBSD -> DigitalUNIX -> NetBSD -> Linux ときてるのでたまに変なバイナリが混ざってるw
digitalunix!
もうLinuxしかないので古い資産はマメに消す。
で、CLISP / SBCL でライブラリはひたすらビルドしてみて、安定してるような気配だったら Windows にコピー
~/local/site-lisp/
~/lisp/lib/
あたりをごそっとコピーします。

g000001 2008-09-20T21:22:17+09:00
なるほどー

名無しさん 2008-09-20T21:22:39+09:00
Windows では AllegroCL / LispWorks / CLISP を使ってます。安定指向なので SBCL は使わないw
こーるまん?
Corman CL は買ったけど使ってないw
ソースがついてくるのはいいんですが、
list を find source すると、どうみてもアセンブラです。本当にありがとうございました。な感じなので。
ほほぉ

g000001 2008-09-20T21:24:30+09:00
なるほどw

haiju 2008-09-20T21:25:12+09:00
アセンブラか・・・凄いな

名無しさん 2008-09-20T21:26:07+09:00
で、GNU CLISP 向けのお手軽環境をつくろうとごった煮(もっと良い名前をダサい)
として、設定ファイルとか日本語エンコーディングをつけた LTK 込みのパッケージを作成中。

g000001 2008-09-20T21:27:33+09:00
海外で良くあるsumoってのは、ごった煮的な意味なんですかね

名無しさん 2008-09-20T21:28:28+09:00
相撲?

g000001 2008-09-20T21:28:56+09:00
emacs-sumoとか、e7-sumoとか

haiju 2008-09-20T21:29:01+09:00
sumo???

g000001 2008-09-20T21:29:15+09:00
最初からなんでも付いてくるのって、sumoって付いてることがたまにあるんですよね。

quek 2008-09-20T21:29:16+09:00
あぁ、そういう意味, ちゃんこ なんですか。>sumo

名無しさん 2008-09-20T21:29:19+09:00
というわけで、こっからGoogle Presentation~
Windows の入門者向けですw 玄人は退屈したら寝ててください

http://docs.google.com/Presentation?id=dhdp5xrt_10cbfjtdf5

haiju 2008-09-20T21:29:37+09:00
ちゃんこか・・・

quek 2008-09-20T21:30:20+09:00
おぉ、スライドすばらいい!!

g000001 2008-09-20T21:30:34+09:00
おお、きた!

haiju 2008-09-20T21:33:26+09:00
別にログインしなくても良かったのかなぁ・・・

名無しさん 2008-09-20T21:35:41+09:00
Google Docsにチャットってこういうことだったのか

g000001 2008-09-20T21:36:10+09:00
ですね、こういう便利な機能があるという(*'-')

名無しさん 2008-09-20T21:37:20+09:00
背景が黒板みたい

haiju 2008-09-20T21:38:15+09:00
ページが進むごとに音が鳴るんですね
というよりはチャットに入力するごとに音が鳴るのか・・・

名無しさん 2008-09-20T21:43:43+09:00
そういえば、FirefoxだとFlashの入力欄に日本語入力するにはコピペしないといけないんだった

g000001 2008-09-20T21:45:45+09:00
おお、そうなんですね、自分、64bitだから日本語書けないんだと思ってましたw

名無しさん 2008-09-20T21:48:38+09:00
ごおぐる毒のプレゼンツールはつかえるねぇ。
バグとして認識されてはいるのでそのうち直ると思います
うちの64環境では日本語が打てん。
黒板はcommon lisperの伝統でしょう 笑

quek 2008-09-20T21:53:43+09:00
qemu(kvm)の Vista 起動してようやくチャットがみれたw

名無しさん 2008-09-20T21:54:41+09:00
clispの引数のところがarg0, arg1, ... とかになるのがなければclispメインでもおっけーなんだけどなぁ
clispのarg0, arg1は結構辛いですね
けど、キーワード引数は見れるからそれなりに満足してます
あ、そうだそうだ。ソースに飛べるってのも重要、sbclをメインにしている理由です。
Google Docsのチャットは発言の保存はできるのかな。できなかったらもったいないな。

g000001 2008-09-20T22:03:50+09:00
たしか、保存できたような。
ハンドルと一致していないので、誰が誰だか分からないw
ありがとうございました! > onjoさん

名無しさん 2008-09-20T22:05:43+09:00
CLISPごった煮のおかげでarglistが便利になりそうな予感w

haiju 2008-09-20T22:05:53+09:00
とても分かりやすかったです>onjoさん

g000001 2008-09-20T22:06:26+09:00
arglist機能は、30年前のLispマシンからある機能で、
これがない開発環境とか、むしろ30年前以前w

名無しさん 2008-09-20T22:06:57+09:00
全員見れたようで良かった。w3m オンリーの人とかいないか心配してた。

g000001 2008-09-20T22:06:58+09:00
と煽ってみるw
ソースに飛ぶ機能も30年前からありますねー(*'-')

名無しさん 2008-09-20T22:07:51+09:00
全部引数名保存でもいいんでしょうが、機械的に関数を大量生成する場合なんかだとオーバーヘッドがバカにならんのでしょう。
ぐはっ(驚)>30年前

g000001 2008-09-20T22:08:09+09:00
30年前のLispマシンの場合は、リアルタイムではなくて、
そういうコマンドを発行するんですね(*'-')
ということで、3名終了ですが、
他に説明されたい方は!
もしくは質問とか、

名無しさん 2008-09-20T22:10:34+09:00
むー発言は保存できないようだ。
まぁ、リアルタイムにつきあってくれた方々へのボーナスってことで。

g000001 2008-09-20T22:10:39+09:00
自分、NANRIさんとか、onjoさんの解説を聴きながらメモったところで、

haiju 2008-09-20T22:10:58+09:00
sbclを使われてる皆さんは、バイナリを使われてるのでしょうか?

g000001 2008-09-20T22:11:02+09:00
おお、もったいない(^^;
自分はソースからビルド派ですね。

名無しさん 2008-09-20T22:11:18+09:00
テキストの選択すらできないw

g000001 2008-09-20T22:11:22+09:00
マルチスレッド有効にしてビルドです

haiju 2008-09-20T22:11:30+09:00
ソースからビルドする場合の方法とか知りたいです

g000001 2008-09-20T22:11:38+09:00
そうなんですよねー。自分も試してみました >テキスト
tar zxvf sbcl.tar.gz ;cd sbcl;sh make.sh;sh install.shですねw
マルチスレッド有効にするために
あ、前に記事にしてました。
基本的に最新版もかわりません。
http://cadr.g.hatena.ne.jp/g000001/20071228/1198859764

名無しさん 2008-09-20T22:13:39+09:00
ソースからビルド派ですね。
(INSTALL_ROOT=$HOME/local; sh make.sh; unset SBCL_HOME; sh install.sh)     
Macports任せです。

g000001 2008-09-20T22:14:19+09:00
customize-target-features.lispでマルチスレッドを有効にしてます。
パッケージだとマルチスレッドって有効になるんですかね
パッケージャ次第?(*'-')

quek 2008-09-20T22:15:55+09:00
Debian(unstable)ではマルチスレッド有効になってます。

g000001 2008-09-20T22:16:11+09:00
おおー、なるほど。
折角、ソースからビルドしてもデフォルトでそのままビルドしても有効にならない罠w

quek 2008-09-20T22:17:10+09:00
えぇ、そうなんですか。。。

g000001 2008-09-20T22:17:25+09:00
ちゃんと確認してないのですが、
customize-target-features.lispで指定するみたいです
で、デフォルトでは存在していないので…。

quek 2008-09-20T22:18:47+09:00
全OSでサポートしてないと、そうするしかないのかも、ですね。

g000001 2008-09-20T22:18:59+09:00
ですねー。
そうそう、発表を聴きながらメモったんですが、
自分は、.sbclrcは空っぽ派ですね
良かったら、quekさんとか、yasさんの環境構築を
さらっと解説して頂いたりとか(*'-')

quek 2008-09-20T22:20:55+09:00
それじゃ、さらっと。よいですか?

g000001 2008-09-20T22:21:00+09:00
はいー(*'-')

quek 2008-09-20T22:21:09+09:00
OS は Debian sid(unstable) x86_64
処理系は SBCL で Debian パッケージです。
あと common-lisp-controller も Debian パッケージで知らないうちに(コアに組み込まれている)使ってます。

名無しさん 2008-09-20T22:21:11+09:00
おー、おねがいします。

quek 2008-09-20T22:21:29+09:00
g000001 さんの fasl ファイルが混ざる、というお話できづいたのですが、
common-lisp-controller は
/var/cache/common-lisp-controller/[uid]/[処理系]/[ソースのパス].fasl といったかんじでコンパイル済ファイルを配置してくれます。

g000001 2008-09-20T22:21:47+09:00
おおー、知らなかったw

quek 2008-09-20T22:22:02+09:00
ライブラリの取得は clbuild です。
./clbuild update --all-projects
でどかんと 137 個ほどのライブラリを git, darcs, cvs, svn といったリポジトリからとってくれます。
ちなみに clbuild は ./clbuild run climacs とかすると Climacs を起動してくれたりもします。

名無しさん 2008-09-20T22:22:27+09:00
common-lisp-controllerがasdf-addonsを基にそう作ってあるということだったはずです

g000001 2008-09-20T22:22:50+09:00
おおー、さらになるほどw

quek 2008-09-20T22:22:51+09:00
なるほど。
自作ライブラリは ~/letter/lisp/lib の下に配置して ~/.sbclrc から asdf:*central-registry* に登録しています。
~/.sbclrc は
;;;;; -*-lisp-*-

;;デバッグ用セッティング
(declaim (optimize (debug 3)))
;;(declaim (optimize (debug 0) (safety 0) (speed 3) (space 0)
;;                   (compilation-speed 0)))

(setf (logical-pathname-translations "ancient")
      `(("**;*.*" "/home/ancient/letter/lisp/**/*.*")))

;; ~/letter/lib 以下の asd を登録する。
(loop for path in (directory (translate-logical-pathname
                                       "ancient:lib;**;*.asd"))
      do (let ((pd (pathname-directory path)))
           (unless (member "_darcs" pd :test #'equal)
             (pushnew (make-pathname :directory pd)
                      asdf:*central-registry*
                      :test #'equal))))

;; clbuild
(pushnew (translate-logical-pathname "ancient:clbuild;systems;")
         asdf:*central-registry*)

(defun climacs ()
  "Climacs を起動する。"
  (load (merge-pathnames ".climacs.lisp" (user-homedir-pathname))))


(defun maxima ()
  "Maxima を起動する。"
  (let ((*default-pathname-defaults*
         (translate-logical-pathname "ancient:clbuild;source;maxima;src;")))
    (load "maxima-build.lisp")
    (maxima-load)
    (cl-user::run)))


;;; If the first user-processable command-line argument is a filename,
;;; disable the debugger, load the file handling shebang-line and quit.
(let ((script (and (second *posix-argv*)
                   (probe-file (second *posix-argv*)))))
  (when script
    ;; Handle shebang-line
    (set-dispatch-macro-character #\# #\!
                                  (lambda (stream char arg)
                                    (declare (ignore char arg))
                                    (read-line stream)))
    ;; Disable debugger
    (setf *invoke-debugger-hook*
          (lambda (condition hook)
            (declare (ignore hook))
            ;; Uncomment to get backtraces on errors
            ;; (sb-debug:backtrace 20)
            (format *error-output* "Error: ~A~%" condition)
            (quit)))
    (load script)
    (quit)))

名無しさん 2008-09-20T22:23:46+09:00
clbuildは自分もHEADのお試し用に使ってます。

g000001 2008-09-20T22:24:03+09:00
maxima!!

quek 2008-09-20T22:24:12+09:00
コアは素のままなので、色々書いてます。

g000001 2008-09-20T22:25:15+09:00
なるほどー。

quek 2008-09-20T22:25:19+09:00
最後の方のは SBCL のマニュアルにあるコマンドラインから起動用そのまんまです。
Emacs から M-x slime して開発してます。
キーボードですが、
Kinesis で Dvorak 配列。
Qwerty での W と E のキーを ( と ) にしています。
で http://bc.tech.coop/blog/060131.html にあるのと同じようにタッチパッドをくっつけて、膝の上においてタイプしてます。

g000001 2008-09-20T22:26:13+09:00
凄い!!w

quek 2008-09-20T22:26:24+09:00
とまぁ、以上のような感じです。

名無しさん 2008-09-20T22:26:35+09:00
キーボードまで!?

quek 2008-09-20T22:27:09+09:00
やはり括弧の位置は重要ですw

g000001 2008-09-20T22:27:22+09:00
そういえば、
括弧は最初に対で入力する派ですか?
それとも、先から書いて行く派ですか?
自分は、() -> (defun foo) -> (defun foo (n)) ->って感じです

quek 2008-09-20T22:28:21+09:00
先から書いていく派です。

名無しさん 2008-09-20T22:28:30+09:00
基本的に先から書いていきます。

quek 2008-09-20T22:28:58+09:00
最後にまとめて )を入力するのがちょっと好きです。

名無しさん 2008-09-20T22:29:10+09:00
同じく(笑)
同じく最後に)をまとめて入れてます

g000001 2008-09-20T22:29:25+09:00
自分m-(で、()が入力されるので、そっちを愛用してるんですよねー
m-)で、適宜改行してくれるという

名無しさん 2008-09-20T22:29:57+09:00
最後のカッコをどりゃーっと入れていると爽快感がある。

g000001 2008-09-20T22:30:09+09:00
みんな、そうなのかw

名無しさん 2008-09-20T22:30:20+09:00
なんていうか綴じ括弧を連続で入れてるとテンションが上がってくるんですよww

quek 2008-09-20T22:30:20+09:00
m-) の動作っておもしろいですよね。

名無しさん 2008-09-20T22:30:44+09:00
ちょっとだけお邪魔しにきました。私もkinesisなんですが、dovorakでeditorのキー体系って破綻したりしませんか?> quekさん

g000001 2008-09-20T22:30:48+09:00
(define-key slime-mode-map [(control ?c) ?\;] 'slime-insert-balanced-comments)
じゃ、これ最高じゃないですか?(*'-')
あ、ちがった

名無しさん 2008-09-20T22:31:09+09:00
自分は()対で入力しますね。

quek 2008-09-20T22:31:17+09:00
vi はちょっと無理がありますが、emacs だと問題ありません。>akaさん

名無しさん 2008-09-20T22:31:59+09:00
一画面内に関数を収めたくてしょうがないという無意識への影響も考慮すべき。>手動カッコ

quek 2008-09-20T22:33:01+09:00
むしろ ls が非常に打ちにくい > dvorak

名無しさん 2008-09-20T22:33:07+09:00
なるほどです。そうか、dvorakかぁ。。。参考になります。> quekさん
でも、たまに paredit の練習したりしてますけど。
タイプ数を考えると paredit は使ったほうがいいのかもとたまに思うんですよね。
kinesis打鍵音どうですか?

g000001 2008-09-20T22:34:08+09:00
ですね、pareditは結構良いかもと思いますねー
()を対で入力する派にはw

名無しさん 2008-09-20T22:34:44+09:00
全然気になりませんが、大きいとかの評判があるんですか? > snmstsさん

g000001 2008-09-20T22:35:14+09:00
ああ、最後の括弧を大量に閉じるのは、
slime-close-all-parens-in-sexp
でした(*'-')

quek 2008-09-20T22:35:35+09:00
paredit って何ですか?

名無しさん 2008-09-20T22:36:14+09:00
kinesisっていうか茶軸はカチって音が気になるなーと思ってました。

g000001 2008-09-20T22:36:39+09:00
LISP系言語の入力を簡便にするelispですねー > paredit.el
http://mumble.net/~campbell/emacs/paredit.el
(で、M-(の動きとかになるので、嫌な人は嫌かもw

名無しさん 2008-09-20T22:37:38+09:00
むむ、すいません、茶軸がわからなくて、、、kinesisはそもそも指の動きが小さくなってソフトタッチになるので、打鍵音に対する意識は他のキーボードのときよりも小さいです。> snmstsさん
(を入力したら勝手に(カーソル位置)となります^^;
こう、言葉では説明しにくいんですが括弧編集用マイナーモードです。 ロードして M-x paredit-mode で LISP ソースを書いてみると…

quek 2008-09-20T22:37:56+09:00
おぉ、ありがとうございます。

名無しさん 2008-09-20T22:38:28+09:00
うちは黒軸
ちゃじく、くろじく?
cherryのスイッチの名前です
キーボードの種類>aka
そ、そなんですね。どうもです。> snmstsさん、yasさん
キートップ剥がして軸が何色してるかで、中のばねとかの構造が違います。
「黒軸 茶軸」で検索してみたら見つけたhttp://park16.wakwak.com/~ex4/kb/tech_cherry_mx.htm

quek 2008-09-20T22:40:55+09:00
乗り物酔いしそうです。> paredit

名無しさん 2008-09-20T22:41:18+09:00
一応使えるようになりつつあるんだけど、
集中してくるとミス括弧が増えるのでまだ常用できない→ paredit
ato

g000001 2008-09-20T22:42:35+09:00
先から括弧派の人は多分、そういう感じだと思います(^^; > 船酔い

名無しさん 2008-09-20T22:43:29+09:00
括弧を閉じて使う時はM-aやM-@のお世話にかなりなる。
インデントは欲しいけど括弧のハイライトはなくても平気…という原始人です。
一行に収まる範囲の実験なら生replでも全然…

g000001 2008-09-20T22:44:35+09:00
40年前の環境でも平気ですねw

名無しさん 2008-09-20T22:44:47+09:00
多分余裕です
meta系を多用しないとわけわかめになる印象がある。

g000001 2008-09-20T22:45:34+09:00
キーバインドっていえば、

haiju 2008-09-20T22:45:35+09:00
私も割と括弧のハイライトなくても大丈夫な初心者です

名無しさん 2008-09-20T22:45:41+09:00
まぁ生replは編集じゃなくて書き下しですからね…

g000001 2008-09-20T22:45:56+09:00
kill-backward-up-listが便利です(*'-')
http://cadr.g.hatena.ne.jp/g000001/20080222/1203690798
pareditでも標準であるらしいです
いや、昔からの環境を追っ掛けてみてるんですけど、
生replで書いた環境というのは、
INTERLISP以外では、なかったっぽいです
で、INTERLISPは、別にS式単位で、
編集できるREPLだったという。
って誰もそんなこと、きいてませんでしたw

名無しさん 2008-09-20T22:48:33+09:00
つまり私は昔よりも原始人と
ffi使ってmakeの部分にlispを使ったりしてるのですが
賞味まだ、この環境でswankとか無理です。

g000001 2008-09-20T22:49:38+09:00
いや、一般的に生REPLで書くのが、標準と思われてますよね、多分(*'-')

名無しさん 2008-09-20T22:49:39+09:00
っていうか永久に無理っぽいです。
そうなのか…

g000001 2008-09-20T22:51:32+09:00
他の言語で、開発環境に力をいれてるのは、
SmallTalkくらいみたいなので、

名無しさん 2008-09-20T22:51:41+09:00
xyzzy なら swank 要らないような
Smalltalk って書かないと怖い人に怒られますよw

g000001 2008-09-20T22:52:15+09:00
そうなんですかw
Small Talkとか書いてしまうw

名無しさん 2008-09-20T22:52:28+09:00
windows+ntemacs+tramp+vmware+swank+lisp+linuxなんてひといる?
それをやったら本気で怒られるとかww>Small Talk
その+演算子がわかるようでわからないw

g000001 2008-09-20T22:53:41+09:00
いや、私の環境をvmware上に構築して、
ホストをWindowsにしたような感じですよね?(*'-')

名無しさん 2008-09-20T22:54:03+09:00
うぅ。

g000001 2008-09-20T22:54:17+09:00
ホストというか、メインOSをWindowsにして、
CLは、vmware上という。

名無しさん 2008-09-20T22:55:31+09:00
Windowsにemacs入れたくないので、sshで入っちゃいます
うん

g000001 2008-09-20T22:56:02+09:00
ssh+swankの際は、ディレクトリ構造を合せないといけないんですよね

名無しさん 2008-09-20T22:56:04+09:00
んで、ターミナルでemacs+slimeと

g000001 2008-09-20T22:57:21+09:00
自分は、swank起動して、他のマシンから複数同時に接続とかしてます
マシンを移動しても、環境は同じなので便利w

名無しさん 2008-09-20T22:58:23+09:00
あー tramp 使えばあと一歩だろうけど… screen な端末が快適なので tramp 使おうとは思わないな。

quek 2008-09-20T22:58:32+09:00
ntemacs+tramp のかわりに meadow+ssh でなら会社でこっそりと構築してます。 > yas さん

名無しさん 2008-09-20T22:58:36+09:00
うん。sshでトンネル掘ってディレクトリも合わす。面倒

g000001 2008-09-20T22:58:59+09:00
SLIMEの配布物のなかに、調整するelがありますよね。
自分のところは、NFSでどのマシンからもパスが同じになってるので、

名無しさん 2008-09-20T22:59:30+09:00
おおお

g000001 2008-09-20T22:59:31+09:00
何もしなくても大丈夫です。
調整したというより、たまたまなんですけどw
どっちかというと、trampの方がスマートですね(*'-')

名無しさん 2008-09-20T23:00:42+09:00
私はバラバラなので共有してる .emacs が酷いことに。 *features* で環境を判定してる。

g000001 2008-09-20T23:01:31+09:00
MacosxもLinuxも大体同じですけど、Windowsで苦労します(^^;

名無しさん 2008-09-20T23:02:11+09:00
Meadow+SLIMEってどなたかやってます?

g000001 2008-09-20T23:02:36+09:00
自分Windows上では、それですね

名無しさん 2008-09-20T23:02:59+09:00
何故か動作がおかしいんですよ

g000001 2008-09-20T23:03:06+09:00
ただ、色々変なんですよねw
あ、被ったw

名無しさん 2008-09-20T23:03:11+09:00
NTEmacs+SLIMEならありますが。

g000001 2008-09-20T23:03:52+09:00
anything.el+SLIMEとか、どなたか、便利に使ってる方とか
いらっしゃらないですかねー。

haiju 2008-09-20T23:04:51+09:00
あまり使ってないですけど、Meadow3+SLIME環境あります(ただし会社のPCですが)

名無しさん 2008-09-20T23:06:14+09:00
動作が変なんですか。動かない、とかじゃなくて?

g000001 2008-09-20T23:06:33+09:00
動いてはいますね。
ただ、最近使ってないから確認してみないと(*'-')
でも、asdf-installとか、他のUNIX環境とファイルを共有したりしたいので、

名無しさん 2008-09-20T23:07:25+09:00
画面下のミニバッファに
Polling "c:/tmp/slime.1234" ..
とで続けて、色々機能が使えないんです

g000001 2008-09-20T23:07:30+09:00
ちょっとWindowsは放置ですね。
最初の接続のときですか?(*'-')

名無しさん 2008-09-20T23:08:21+09:00
そです。

g000001 2008-09-20T23:09:46+09:00
多分、*slime-events*バッファで
なにか止ってる様子が確認できるような(*'-')
ちょっと自分も今度Meadow上で、環境構築の記事を書いてみよう!

名無しさん 2008-09-20T23:10:53+09:00
ふーむ。Meadow で動かないと日本での普及は厳しいですね

g000001 2008-09-20T23:11:16+09:00
多分、vmware上で、CLを動かして、接続する方が簡単な気はしますが…。
Meadowからでも。

名無しさん 2008-09-20T23:11:25+09:00
swankが通信ポートをemacsに教える部分ですね

g000001 2008-09-20T23:11:43+09:00
asdf-installとか、色々考えると、
面倒なんですよねー > Windows環境。
論理パスを導入して、OS間の違いを吸収ってのに燃えてたんですが、
ライブラリ書いてる人も論理パスのこととか考えてなくて、
あえなく撃沈しましたw
cl+sslとか、論理パスにマッピングができませんでしたw
+が使われているので…。
あと、
話は、かわりますが、
SLIMEの設定等をLambdaReposや、CodeResposに置くと面白いかもしれないですね。

名無しさん 2008-09-20T23:18:13+09:00
windowsはパスが鬼門だからね。

g000001 2008-09-20T23:18:36+09:00
ですねー。

名無しさん 2008-09-20T23:19:10+09:00
あんなウザい問題に手を出したくないよ。 笑

g000001 2008-09-20T23:19:34+09:00
Windows専門ってことだと、
良いとは思うんですけど、
他の環境と共用しようと思うと、なかなか。
ということで、今日は大分勉強になりました!!
大分長くなってしまいましたが、
皆さん手の内公開ありがとうございます!
あ、来週、akaさん進行やっても良いよ、みたいな感じだったと思うんですが、
落ちてしまいましたねw
あ、あと、10/18日にも勉強会したいと思うんですが、
私、10/18日にShibuya.lispの運用の方にいると思うので、
20時までに、自宅に戻れない気がするんですね、
なので、どなたか、何かネタをやってみたいなー、みたいな方を募集しているのですが、
どんなもんですかね、みたいな。

名無しさん 2008-09-20T23:24:12+09:00
人集まりますかね? >10/18
10がつ18?

g000001 2008-09-20T23:24:42+09:00
どうなんですかね、

quek 2008-09-20T23:24:59+09:00
きっと私は Shibuya.lisp の方です。

g000001 2008-09-20T23:25:13+09:00
割とここって、東京に集中してるわけでもないんですよね
なので、それなりに、ここには集まるような気もします。

名無しさん 2008-09-20T23:25:39+09:00
時間をずらして遅くすればShibuya.lispの反省会になるのでは?
裏番組なのね。<ここの10/18

g000001 2008-09-20T23:25:48+09:00
反省会w
そういえば、Shibuya.lispのLingrできましたんで
反省会があるとしても、そっちですかねー(*'-')
おー、quekさんもいらっしゃる! > Shibuya.lisp

haiju 2008-09-20T23:26:55+09:00
わたしもShibuya.lispに行きますよ

g000001 2008-09-20T23:27:35+09:00
多分、3、4人位いないだけですねー。> 10/18日

quek 2008-09-20T23:27:40+09:00
はい、行きたいです。

名無しさん 2008-09-20T23:27:43+09:00
関東顧問栗鼠府がんばってくださいw

g000001 2008-09-20T23:28:22+09:00
どんな感じになるんでしょうねー > Shibuya.lisp
いまいち、そうぞうが付かないw

haiju 2008-09-20T23:29:03+09:00
スタッフ含めて50人ってなると席が争奪戦にならないか心配です

名無しさん 2008-09-20T23:29:08+09:00
そのての会に行ったことがないから予想しづらい^^;
関東Common Lispか、すごい漢字だ(笑)>関東顧問栗鼠府

haiju 2008-09-20T23:29:34+09:00
SICPとかSchemeの人とか多そうで心配・・・

g000001 2008-09-20T23:29:37+09:00
そんなにlispって人気あるんですかねえw > 争奪戦

名無しさん 2008-09-20T23:29:57+09:00
関東顧問栗鼠府連合にすれば珍走団風です。w
争奪戦てことは無いんじゃないですかねぇ…

g000001 2008-09-20T23:31:17+09:00
私の予想では、SICPよりSchemeよりMatz Lisp勢が多いようなw

名無しさん 2008-09-20T23:31:39+09:00
なしてMatz Lisperが増えたの?

haiju 2008-09-20T23:31:42+09:00
Matz Lisp勢は侮れないと思いますよ・・・

名無しさん 2008-09-20T23:32:03+09:00
gauche nightもshiroさんが来る!って状態になってから加速がかかったような…
Matz Lisp勢って何者?
それはちょっといやかもw>Matz Lisp勢が多い
ruby >zickさん

g000001 2008-09-20T23:32:32+09:00
やっぱり世相を反映してるんじゃないですかね、飽くまで予想ですがw

名無しさん 2008-09-20T23:32:42+09:00
うちらは関西顧問栗鼠府連合w
喧嘩しそうだ…
Shibuya.lisp早くも分裂の危機www
ハッカーのサナギが多い?ハッカーの卵が多い?

haiju 2008-09-20T23:33:34+09:00
内輪ネタ的な盛り上がり方が苦手です・・・

名無しさん 2008-09-20T23:33:50+09:00
<るびいすと@しぶやりすぷ

g000001 2008-09-20T23:34:07+09:00
ハッカーのサナギ説ということなんじゃないですかねー > Matz lispの多さ

名無しさん 2008-09-20T23:34:22+09:00
Ruby とは普通に共存できる気がする。
るびきちさんとか気がついたら Emacs Lisp ハッカーになっとるし。

g000001 2008-09-20T23:34:29+09:00
勉強家が多いのでは? >Ruby

名無しさん 2008-09-20T23:34:39+09:00
るびきちさんすごいよね。

g000001 2008-09-20T23:34:44+09:00
ですね、去年は、CLも書いてましたね。
というか、どう書くorgだと、10種類位の言語に
手を出していたw

名無しさん 2008-09-20T23:35:06+09:00
rubyはrails以前と以後で印象が違いすぎる

g000001 2008-09-20T23:35:42+09:00
まあ、飽くまで、メンバーのブログをざーっと眺めた感じなので、
正確なところではないですが…

haiju 2008-09-20T23:35:56+09:00
rails以前は利用者メインより開発に関わる人が多かった印象があります
あくまでも印象ですが

g000001 2008-09-20T23:36:25+09:00
Shibuya.lispで発見できたCLerが一人もいないのは確かw

名無しさん 2008-09-20T23:36:29+09:00
rubyも触ってておもろい言語やけどね。

g000001 2008-09-20T23:36:39+09:00
初めてってことですね > 発見

名無しさん 2008-09-20T23:36:43+09:00
g000001さんは全ブログをチェックしているんでしたね。予感が当たりそうだ

quek 2008-09-20T23:36:52+09:00
CLer 少ない。。。

haiju 2008-09-20T23:37:13+09:00
MLの自己紹介を読んでもRubyから流れた人は多そうです

名無しさん 2008-09-20T23:37:26+09:00
みんなですみっこでイジケテヨウゼ…

g000001 2008-09-20T23:37:32+09:00
Shibuya.lispのCLerで、私が話したことがない人はいませんw

名無しさん 2008-09-20T23:38:13+09:00
関西のCLerもしらないんだよな。。。(ぼそっ)

haiju 2008-09-20T23:38:32+09:00
Zickさんとyasさん

g000001 2008-09-20T23:38:59+09:00
京都は、潜んでる方は多いですよ、多分。
なんといってもKCL

名無しさん 2008-09-20T23:39:23+09:00
kyoto common lispの国ですもんな。w

quek 2008-09-20T23:39:48+09:00
かっこいい

名無しさん 2008-09-20T23:39:59+09:00
関東はg000001,haiju,quekさんたちの3にんくらい?
誰か後継の GCL メンテナンスしてあげてください
GCL...

g000001 2008-09-20T23:40:30+09:00
NANRIさんsnmstsさん、tszさん、

名無しさん 2008-09-20T23:40:41+09:00
いるやん。ようけw

g000001 2008-09-20T23:40:46+09:00
youzさん
いや、youzさんは

haiju 2008-09-20T23:41:09+09:00
たしかpocketさん?って人も・・・

g000001 2008-09-20T23:41:17+09:00
どこに住んでるか分からないw

haiju 2008-09-20T23:41:28+09:00
確かに場所はわからないですね

g000001 2008-09-20T23:41:33+09:00
あと、youzさんはまだお話したことないかも。
日記にトラックバックはありますけど

haiju 2008-09-20T23:42:06+09:00
hoppyさんは?

g000001 2008-09-20T23:42:14+09:00
あと、xyzzy方面の方とか、

名無しさん 2008-09-20T23:42:34+09:00
http://www.gnu.org/software/gcl/ 200508からとまってる。。。

g000001 2008-09-20T23:42:38+09:00
CL/xyzzyで、bulbさんとか
mokeheheさんは、Schemeよりですが、SLIME勉強会には来てもらえました。

名無しさん 2008-09-20T23:43:39+09:00
あの中学生ってどのLisperなんでしょう?

g000001 2008-09-20T23:43:56+09:00
tazantさんですか?(*'-')

名無しさん 2008-09-20T23:43:59+09:00
タンザナイトって青い宝石のひと。

g000001 2008-09-20T23:44:02+09:00
Schemeに行くんじゃないかなあw

名無しさん 2008-09-20T23:44:11+09:00
綺麗な宝石ですよ。

haiju 2008-09-20T23:44:25+09:00
日記の内容的には行っちゃうかもしれないですね

g000001 2008-09-20T23:44:26+09:00
なんとなくですがw
でも、俺処理系だから。

名無しさん 2008-09-20T23:44:52+09:00
あの子は実装者になりそうやね。

g000001 2008-09-20T23:44:55+09:00
zickさんとかは、凄い変わり種ですよねー。

名無しさん 2008-09-20T23:45:17+09:00
自分じゃよくわかりませんがw
異彩をはなってまっせ>zickどん

g000001 2008-09-20T23:45:39+09:00
CLに興味を持たれるとは思いませんでした(*'-')

quek 2008-09-20T23:46:05+09:00
禁断の乗り物CDR!!

g000001 2008-09-20T23:46:05+09:00
lisp+prolog+Smalltalkな処理系を是非
zickさんに
その名も、TAO!

名無しさん 2008-09-20T23:46:23+09:00
くだー?

haiju 2008-09-20T23:46:31+09:00
たお

quek 2008-09-20T23:47:05+09:00
大好きです。http://blog.bugyo.tk/lyrical/2008/08/cdr.html

名無しさん 2008-09-20T23:47:48+09:00
クダーが思いのほか好評で思わず笑ってしまいました。

haiju 2008-09-20T23:48:14+09:00
切り口が面白いですよね

名無しさん 2008-09-20T23:48:56+09:00
なかなかツボですよ>CDR
「そんなCDRらないことを聞くな。」
辺りまでは全部実話なんですけどねww
http://gogen-allguide.com/ku/kudawomaku.html くだくだいうなっていうばあいもあるかもw

g000001 2008-09-20T23:49:53+09:00
自分はCDRに馴れてしまって、最早、restの方が気持ち悪いですw

名無しさん 2008-09-20T23:50:52+09:00
firstやsecondはまだ大丈夫ですが、restはどうしても違和感がありますね

g000001 2008-09-20T23:51:56+09:00
ですねー。
どっちかというと、tailの方がしっくりきます
tailって処理系も多いし

名無しさん 2008-09-20T23:54:34+09:00
その場合headがcarっすか?
tailはlastっぽいなーと思った…

g000001 2008-09-20T23:55:39+09:00
head、tailですね、
hd - tlとか

名無しさん 2008-09-20T23:55:48+09:00
haskellとかそうやね。

haiju 2008-09-20T23:55:58+09:00
Cでリスト処理を書いてた頃の変数名を思い出すなぁ・・・

g000001 2008-09-20T23:56:10+09:00
Dylanとか、GOOとか、Qiは、headとtailじゃなかったかと
Clojureは、firstとrestで、
ここでrestに最近違和感を感じたと。
でも、frestとか、rrestとか、rfristとか名前が合成されてるのが、
面白いw
変なところで、伝統を引き継いでいるという。

名無しさん 2008-09-20T23:58:11+09:00
なんて発音するんだwww
first / rest は car/cdr の意味不明さを解消するために導入されたはずなのに叩かれてかわいそう

g000001 2008-09-20T23:58:23+09:00
その辺も同じwww

名無しさん 2008-09-20T23:59:11+09:00
ふれすと、るれすと、るふりすと? 最後typo?

g000001 2008-09-20T23:59:28+09:00
あ、最後typoですね(*'-')
rrrestとかは標準ではないですね。
巻舌すぐるw

名無しさん 2008-09-21T00:00:40+09:00
るるれすと 日本語ならつらくない。英語はわたしゃムリ
# g000001 (8:59pm)
# なるほど、後でみんなのドキュメント参照方法を詳しく
# 語りましょうw
# 色々あるようですね(*'-')
どうしましょう
f-rest r-rest r-fist でええんちゃう。

g000001 2008-09-21T00:01:45+09:00
あ、すいません、わすれてましたw

名無しさん 2008-09-21T00:02:10+09:00
<はつおん

g000001 2008-09-21T00:02:11+09:00
lispdocとか便利にslimeから参照する方法とか
あったりした気がするんですが
使ってる方とかは、いらっしゃいませんか?

名無しさん 2008-09-21T00:02:35+09:00
http://gigazine.net/index.php?/news/comments/20070427_mcflurry/  日本語でもムリ。
来週のネタでも良いかも>
なんかRPGみたい、snmstsは「フルリレロ~ 」唱えた。マックは古ーリーを100円下げた。。 ってかんじ。
>参照方法

g000001 2008-09-21T00:04:27+09:00
そういえば、0時でしたね(^^;
環境話は割とネタ的にいろいろありましたね。
Symbolicsとか、ドキュメントも開発環境と統合されてるので、
例題が簡単に実行できたりとか、便利そうなんですよねー。
SLIMEもそうならないものかと。
あと、例題のグラフィックスのオブジェクトとかも、掴めたりしたのかな?、たしか。

quek 2008-09-21T00:11:44+09:00
例題はいいですねぇ。

g000001 2008-09-21T00:12:09+09:00
HyperSpecの例が簡単に実行できるような感じですね(*'-')
あと、replでも、マウスでグラフィックスのオブジェクトが掴めるという。

quek 2008-09-21T00:13:23+09:00
Smalltalk みたい

名無しさん 2008-09-21T00:13:28+09:00
SymbolicsはSmalltalkみたいという噂を聞いたことがあります。
あ、被ったww

quek 2008-09-21T00:13:44+09:00
www

g000001 2008-09-21T00:14:10+09:00
ですね、Smalltalkみたいな統合環境は、見直されるべきw
発想がUNIX的ばかりだと、つまらないと主張したいw
ですが、UNIXも好きです。
来週どうしようかなと、考えるのですが、
やはり、もっと参加者主体な感じに
していければ良いなーと
今回、感じました。
しかし、そういうネタが思い付かないという…。

名無しさん 2008-09-21T00:17:12+09:00
g000001さんが予習をしないというのはどうでしょうか!

g000001 2008-09-21T00:17:45+09:00
そうですねー、その辺の出発点で、ちょっと失敗してるんじゃないかと
思ってはいるんですよねー。
ただ、リアルタイムの相互のチャットを主体とした展開が

名無しさん 2008-09-21T00:18:31+09:00
個人的に予習していないのが問題なんですが、読んで理解して書こうとしたときには

g000001 2008-09-21T00:18:33+09:00
どうなるのかというw

名無しさん 2008-09-21T00:18:36+09:00
次のトピックになってたりするので
お蔵入り…
ということは少なくとも何回かありました

g000001 2008-09-21T00:19:01+09:00
おおー。それは、遮って投稿して欲しいところですねー。

名無しさん 2008-09-21T00:19:11+09:00
なにがいいやろね。今は僕もネタが思い浮かばない。
純粋にぼんやりしていることの方が多いですが。

g000001 2008-09-21T00:19:38+09:00
自分は、レスがないと、空間恐怖症なので、
先に行かざるを得ないわけですw

名無しさん 2008-09-21T00:20:09+09:00
。。。ということはonjoさんに温情をかんじてるな。>g000001さん

g000001 2008-09-21T00:20:42+09:00
その通りですw
つっこみを入れて頂いてる方には常に感じていますw

名無しさん 2008-09-21T00:21:03+09:00
それはひょっとして。。。
遅れて失礼します。今日は会社の勉強会でした。

g000001 2008-09-21T00:21:20+09:00
こんばんはー(*'-')

名無しさん 2008-09-21T00:21:27+09:00
今きがついた…yasさん にツッコミを入れないと…
そこはやさしくスルーする本人w
yasさん、この部屋は関西人が少ないですよ!
そうみたいやね。べつにきにせんとってね>snmstsさん
そんなことあらへんやろー。チッチキチー
スライドを起動した瞬間とか他人のビューがわからないから。
あれって他のひとも左側スライド、右側チャット窓の表示なんですか?

g000001 2008-09-21T00:24:20+09:00
自分も、そういうビューですしたね > 構成

名無しさん 2008-09-21T00:25:35+09:00
Google毒の話ですか?同じく左スライド、右チャットでしたよ

haiju 2008-09-21T00:25:37+09:00
右側チャット窓の面積狭かったですよね

名無しさん 2008-09-21T00:25:57+09:00
コントロールをとった人がスライドうごかすとみんなのも勝手に動くのかな。

g000001 2008-09-21T00:26:06+09:00
動きます、動きます
あれ良いですよねー。
自分も最初あれで、勉強会やろうと思ってたんですけど、
flashに日本語が入力できないので、
こちらにしたというw

名無しさん 2008-09-21T00:27:10+09:00
そうかー。Linux の人が見てるだけになるのか。

g000001 2008-09-21T00:27:35+09:00
コピペすれば、OKなんですけれども

名無しさん 2008-09-21T00:27:45+09:00
こういうところだけWindowsが得をしますね…>flashの日本語入力

g000001 2008-09-21T00:29:10+09:00
あと、スライドとLingrを一緒にってのもやってみたんですが、
無理目でしたw

名無しさん 2008-09-21T00:29:30+09:00
すらいどしぇあをつかったころあったもんな

haiju 2008-09-21T00:29:45+09:00
ありましたね!

g000001 2008-09-21T00:29:48+09:00
やっぱり、窓は一緒じゃないと無理だというw
でも、今日のonjoさんのGoogle Presentationは

名無しさん 2008-09-21T00:30:52+09:00
画面が三枚くらいあれば…

g000001 2008-09-21T00:31:04+09:00
綺麗で分かり易いし、やっぱり、良いなあと思いました。
もちろん内容がまとまってるからですけども(*'-')
スライドをプレゼンターと連動できる仕組みがなにかあればという。

名無しさん 2008-09-21T00:32:34+09:00
Google アカウント無しだと見れなかったりするのかなとちょっと心配したんですが
1. 問題なかった  2. 全員アカウントもってた
どちらだろうw
2.持ってます

g000001 2008-09-21T00:33:30+09:00
2. 全員アカウントもってた っぽいですよねw

haiju 2008-09-21T00:33:39+09:00
特別な機能を利用する場合はログインしてくださいって表示でした

g000001 2008-09-21T00:33:47+09:00
Shibuya.lispのMLもそうなんですけど(^^;
おお、じゃ、アカウントなくても良いんだ。

名無しさん 2008-09-21T00:34:15+09:00
特別な機能?共同編集とかかな。

g000001 2008-09-21T00:34:38+09:00
発言とかw

名無しさん 2008-09-21T00:35:05+09:00
MLは作る手がいくつかあるけど
g000001 2008-09-21T00:35:35+09:00
なるほど、たしかに。そういえば。

名無しさん 2008-09-21T00:35:40+09:00
yahooグループはメールの配信が遅くてとても悲しいです

g000001 2008-09-21T00:35:45+09:00
全然考えてませんでしたw

9NNm9zkREVm 2008-09-21T00:35:47+09:00
こんばんわ。ログを読んでたら名前が出てたので、とりあえず挨拶しに参りました。

g000001 2008-09-21T00:36:03+09:00
おおー!、初めまして

名無しさん 2008-09-21T00:36:03+09:00
こんばんわ

g000001 2008-09-21T00:36:10+09:00
ブログ拝見してます(*'-')

9NNm9zkREVm 2008-09-21T00:36:16+09:00
しまった、初めましてだった。

haiju 2008-09-21T00:36:19+09:00
こんばんわ

名無しさん 2008-09-21T00:36:22+09:00
こんばんわー

quek 2008-09-21T00:36:30+09:00
こんばんわ

名無しさん 2008-09-21T00:36:48+09:00
おばんです。
ちょっとubuntuからみてみます

g000001 2008-09-21T00:37:19+09:00
you_zさんは面白いネタたくさんブログに書いてらっしゃるんですよねー。
CLネタも多いという。

9NNm9zkREVm 2008-09-21T00:37:44+09:00
恐縮です。>g00001 すみません、最近は草植えてばっかでした・・

名無しさん 2008-09-21T00:38:02+09:00
パワーポイントがあればもっと手軽につくれるんだろうな~>スライド

g000001 2008-09-21T00:38:05+09:00
you_zさんは、東京近郊の方なんですか?
pptから変換とかできますよね(*'-') > プレゼン

9NNm9zkREVm 2008-09-21T00:39:05+09:00
長野県の長野市に住んでいます。 年は、確か佐野さんと同年代のはずです。

名無しさん 2008-09-21T00:39:08+09:00
勉強になった。arg0 arg1 が CLISP 不人気の一因になっていたとは。
(SPACE 1) 以下でコンパイルするれば残るよ!と広報すべきだな~

g000001 2008-09-21T00:39:21+09:00
Shibuya.lispのLTとか、どうですか?(*'-') とブログのコメントに書こうと思ってたんですが、
なるほどー、長野件ですか(*'-')
そういえば、quekさんも会場にいらっしゃるなら、LTはどうですか!!

名無しさん 2008-09-21T00:39:53+09:00
年代…

quek 2008-09-21T00:40:29+09:00
今回は観客で。。。w

名無しさん 2008-09-21T00:41:04+09:00
そのうち刺客で?w

g000001 2008-09-21T00:41:20+09:00
刺客はw

quek 2008-09-21T00:41:26+09:00
ターゲットは?w

haiju 2008-09-21T00:41:33+09:00
CLの刺客

名無しさん 2008-09-21T00:42:00+09:00
本丸は誰だw

haiju 2008-09-21T00:42:28+09:00
本丸って・・・

g000001 2008-09-21T00:42:47+09:00
CLは多分すぐネタ切れするので、quekさんはTTを是非! という(*'-')
TTで、刺客w

quek 2008-09-21T00:43:13+09:00
いや、刺さないかなねw

g000001 2008-09-21T00:43:15+09:00
レーザーポインタでw

quek 2008-09-21T00:43:17+09:00
あぁ、勉強しないとなぁ。

9NNm9zkREVm 2008-09-21T00:44:01+09:00
決起集会はust中継とかありますかね?

g000001 2008-09-21T00:44:13+09:00
その予定にはなっています(*'-')

名無しさん 2008-09-21T00:44:26+09:00
ubuntuからはプレゼン見れました。最初右側にログインフォームがありましたが、真ん中のスライドを大きく表示するで表示されました。
血気は前やったやつでは?

9NNm9zkREVm 2008-09-21T00:44:55+09:00
あれ、

g000001 2008-09-21T00:44:57+09:00
10/18日ですんで、もしちょうど東京にいらっしゃったら、是非LTでもw > you_zさん

名無しさん 2008-09-21T00:45:11+09:00
おぉ、もう閉じてるのに。するとチャット窓無しで自力でページめくる?

g000001 2008-09-21T00:45:17+09:00
あ、決起集会かw
mp3がありますねw

名無しさん 2008-09-21T00:45:35+09:00
きっと暴動が起きるんだよ<血気集会

9NNm9zkREVm 2008-09-21T00:45:35+09:00
すみません、勘違いしてました。

名無しさん 2008-09-21T00:46:00+09:00
連盟の血気集会ですからね

9NNm9zkREVm 2008-09-21T00:46:13+09:00
18・19日とはずせない予定があるので残念ながら見に行けません… というか参加表明まだしてないや

g000001 2008-09-21T00:46:40+09:00
CLでGrassとかですね、色々。

名無しさん 2008-09-21T00:46:56+09:00
onjoさん、全画面表示・ウインドウ表示ともページめくれます

g000001 2008-09-21T00:46:58+09:00
期待大という(*'-')

haiju 2008-09-21T00:47:01+09:00
草植え

9NNm9zkREVm 2008-09-21T00:47:51+09:00
あー、マクロでGrassコードをそのまま実行しちゃおうって言うネタは考えてるんですが

名無しさん 2008-09-21T00:47:58+09:00
@firefox
スタンドアロンで見れるならこのまま公開でほっとけばいいのかな>スライド

g000001 2008-09-21T00:49:48+09:00
マクロでGrass!

9NNm9zkREVm 2008-09-21T00:49:52+09:00
手を動かさないと…

g000001 2008-09-21T00:50:00+09:00
多分、そのままでOKだったような > スライド
自分は、なんとなく、slideshareにアップしてみたんですけども。

9NNm9zkREVm 2008-09-21T00:50:40+09:00
そうだ、Grass.elを使いたいがために最近Meadowを使い始めたのですが、うちではSlimeも問題なく動いてます。

g000001 2008-09-21T00:50:42+09:00
でも、いまいち、SlideShareのメリットが分からないw

名無しさん 2008-09-21T00:51:18+09:00
お、Meadow でいけましたか。バージョンとかの問題なのかな。
google毒があれだけできるんだったらメリットないかもね<g000001さん

g000001 2008-09-21T00:51:54+09:00
そうなんですよねえ > 毒

quek 2008-09-21T00:52:03+09:00
あ、私も Meadow Slime Clisp で(仕事ばでこっそり)動いてます。

名無しさん 2008-09-21T00:52:43+09:00
こっそりw

g000001 2008-09-21T00:52:45+09:00
そういえば、たしか、$HOMEとか解釈しようとすると、面倒だった気が
どうだったかなー。

名無しさん 2008-09-21T00:53:32+09:00
とりあえず、後でMeadowのバージョン新しくして試してみます

9NNm9zkREVm 2008-09-21T00:53:36+09:00
本体はMeadow3.00のNetInstallっていうのを入れて、CL処理系はSBCL1.0.20を使っています。

g000001 2008-09-21T00:53:39+09:00
職場でw

quek 2008-09-21T00:53:40+09:00
cygwin 版の clisp なんで、なんか c: を /c にマウントしたりしたと思います。

g000001 2008-09-21T00:54:06+09:00
cygwinとか、あんまりこっそりじゃないようなw

quek 2008-09-21T00:55:05+09:00
いやぁ、Windows Installer が動くものは監視されれてるっぽいので。cygwin とかのほうがこっそりなんですw

名無しさん 2008-09-21T00:55:28+09:00
なるほど

g000001 2008-09-21T00:55:38+09:00
なるほどw

haiju 2008-09-21T00:55:45+09:00
なるほど・・・
堂々とドイツ語版Windowsに入れちゃったりしてました

名無しさん 2008-09-21T00:56:19+09:00
うちはultimateなんで何語でも対応w

haiju 2008-09-21T00:57:10+09:00
ホストのWindowsにも入れて、VMWare上のLinuxにも入れたりとか遊んでます

quek 2008-09-21T00:57:30+09:00
http://www.cliki.net/SLIME%20Tips このページに書いてあるやつです。 > c: のマウント
ドイツ語!

9NNm9zkREVm 2008-09-21T00:58:37+09:00
うちも監視されてるはずなんですが、色々入れても注意されたことがない、というかゲームとか以外はスルーされてるような気が。。

名無しさん 2008-09-21T00:59:15+09:00
監視者も忙しいのでは?w
ブラックリスト方式だと Emacs や CLISP は監視リストの対照に入らなさそう

g000001 2008-09-21T00:59:39+09:00
なるほどー、mountですか > cliki

名無しさん 2008-09-21T00:59:50+09:00
Emacs / Vi 禁止だったら開発者が逃げ出しそうw
みんながclispにかまけて仕事にならない会社かー
うちではwebmailは警告メールが全員に来ました。

quek 2008-09-21T01:00:55+09:00
仕事中に S 式いじれなくなったら辞めてやるw

名無しさん 2008-09-21T01:01:41+09:00
Google毒はもうちょっと安定してくれたらすごいかもしれませんね。

g000001 2008-09-21T01:01:43+09:00
Lisperの鑑のような発言ですねw

名無しさん 2008-09-21T01:01:55+09:00
おおおさん、こんばんは。
あ、こんばんわ

9NNm9zkREVm 2008-09-21T01:02:32+09:00
こんばんわ。

名無しさん 2008-09-21T01:03:23+09:00
こんばんわ
日本語ネーム使えたんだ

haiju 2008-09-21T01:05:10+09:00
hoppyさんは基本、ひらがななんですか?

名無しさん 2008-09-21T01:05:54+09:00
もとはそうですね。前の職場で名づけられました
8人もobserverがいる!怖くないから入っておいでよ^^;

haiju 2008-09-21T01:07:35+09:00
どうりでMLでも・・・

名無しさん 2008-09-21T01:08:09+09:00
わしゃ、酒か?って思いましたけど
そういうのが一番怖いす>hoppyさん

g000001 2008-09-21T01:09:01+09:00
うは、佐野節w

名無しさん 2008-09-21T01:09:28+09:00
私は全員参加とか言われると休む人です

g000001 2008-09-21T01:09:52+09:00
自分もそうですねw

名無しさん 2008-09-21T01:10:15+09:00
今日は1時過ぎたのに人多いですね
そろそろねるわ。おやすみ

g000001 2008-09-21T01:10:23+09:00
observerってブラウザ開いてるだけでも、

名無しさん 2008-09-21T01:10:24+09:00
そうですか。じゃ、気が向いたらどうぞ>snmstsさん>observerの皆様

g000001 2008-09-21T01:10:28+09:00
カウントされるんで、
おやすみなさいー。

名無しさん 2008-09-21T01:10:52+09:00
おやすみなさいー
おやすみなさい

g000001 2008-09-21T01:11:05+09:00
いまいちどういう風にカウントされてるのか謎ですよね。

haiju 2008-09-21T01:11:14+09:00
おやすみなさい

9NNm9zkREVm 2008-09-21T01:11:14+09:00
おやすみなさい

g000001 2008-09-21T01:11:17+09:00
自分一人だけでも、3とかでるときあるし

haiju 2008-09-21T01:11:57+09:00
naoya_tさんたちみたいにDisableな方々もChatterにカウントされてますよね。あれは?

名無しさん 2008-09-21T01:12:19+09:00
10に増えた!

g000001 2008-09-21T01:12:29+09:00
多分、15位でチャットしてると、なんだかんだで、ブラウザ開いてて、

名無しさん 2008-09-21T01:12:44+09:00
あ、私も開いてたw

g000001 2008-09-21T01:12:44+09:00
カウントされてるんじゃないかなあと思ってました。
灰色な方々は、Linger Raderを使ってる方だと
思います。

名無しさん 2008-09-21T01:13:51+09:00
なるほどぉ。

g000001 2008-09-21T01:14:23+09:00
Linger Rader使うと、ブラウザを使わなくても、
キャッチできるんですね。

名無しさん 2008-09-21T01:14:31+09:00
Google毒おもしろいけどネタがない~

g000001 2008-09-21T01:14:40+09:00
で、面白そうなら、ブラウザを立ち上げて参戦!、みたいな。

haiju 2008-09-21T01:14:45+09:00
Raderかぁ・・・なるほど

g000001 2008-09-21T01:15:04+09:00
onjoさんは、沢山ネタあるじゃないですか!(*'-')
リクエストとかしても良いなら
リクエストさせて頂きますw

名無しさん 2008-09-21T01:17:32+09:00
どーぞどーぞ
そろそろ寝ます。
おやすみなさい。

g000001 2008-09-21T01:18:58+09:00
おやすみなさいましー

名無しさん 2008-09-21T01:19:02+09:00
おやすみなさい。
TTってまだお二人しか決まってないんですか?

haiju 2008-09-21T01:20:07+09:00
おやすみなさい

9NNm9zkREVm 2008-09-21T01:20:11+09:00
おやすみなさい

g000001 2008-09-21T01:20:17+09:00
来週頭には、色々決まると思います(*'-')
Shibuya.lisp運営部屋がLingrにあるので、
詳しくはそちらで話すことができます(*'-')
今、だれも居ませんがw

名無しさん 2008-09-21T01:21:11+09:00
ほい。ログ読みしてみます。

g000001 2008-09-21T01:21:37+09:00
あ、パスワードで保護されています(^^;

名無しさん 2008-09-21T01:21:38+09:00
観察ってはいます…

g000001 2008-09-21T01:22:00+09:00
4人observeっておかしいw

名無しさん 2008-09-21T01:22:21+09:00
陰謀を和訳してくだしあ
そうですか。ではそのうち出世したら鍵を手に入れますw
英訳だった
conspiracy

g000001 2008-09-21T01:22:53+09:00
鍵は、昨日のIRCの#lisp_scheme部屋のログに書いてあります

名無しさん 2008-09-21T01:22:54+09:00
conspiraty theory 陰謀論
sからはじまるやつではw
sで始まる…

g000001 2008-09-21T01:23:07+09:00
そして、その部屋にはパスワードが掛っていますw
SNMSTSではないのは確かです!

haiju 2008-09-21T01:24:39+09:00
陰謀論???

名無しさん 2008-09-21T01:25:07+09:00
lispっぽい単語を辞書で引くとわかるよ。
分かりました。

g000001 2008-09-21T01:25:21+09:00
ああ、なるほど。
気付かなかったw

名無しさん 2008-09-21T01:25:36+09:00
でもいろんな人が見てるから・・・・

g000001 2008-09-21T01:26:10+09:00
いや、将来的には、オープンにするかもしれないんで
大丈夫です。

名無しさん 2008-09-21T01:26:18+09:00
ほっ。

g000001 2008-09-21T01:26:18+09:00
だと思います。

名無しさん 2008-09-21T01:26:31+09:00
スパマーを避けるくらいの意図だったはずなので、
これくらい陰ならセーフなはず

g000001 2008-09-21T01:26:40+09:00
ですね。
そういえば、ここってスパム少ないなー

名無しさん 2008-09-21T01:28:31+09:00
探しましたがshibuya.jsしか見つかりませんでした。

g000001 2008-09-21T01:29:34+09:00
あれ、Shibyya.lispとShibyya.lisp運用があるはず。
http://www.lingr.com/room/shibuya.lisp.team
おお、アイコン付きで貼れるんだ。

名無しさん 2008-09-21T01:30:14+09:00
このアイコンはなんだろう…

g000001 2008-09-21T01:30:26+09:00
木村迦楼羅ですね。

名無しさん 2008-09-21T01:32:04+09:00
全くわからなかった…
ありがとうございます。見てみます。

g000001 2008-09-21T01:32:42+09:00
はいー
そういえば、clojureってわりと良い感じなんですよね、
まだ、良く分かってないんですが、Arcよりは良いんじゃないかとw

9NNm9zkREVm 2008-09-21T01:39:30+09:00
まだちゃんと見てないですけど、チュートリアルとか凄いしっかり書いてるなーとか思いました。http://en.wikibooks.org/wiki/Clojure_Programming#Emacs_.2F_Slime_Integration 

g000001 2008-09-21T01:39:59+09:00
zickさんが、スペシャル関数 についてブログのエントリにしてたと思うんですが、
Clojureの作者もそんなことプレゼンしてて
面白いと思いました。
おお!、これ知りませんでした > チュートリアル
ブログの内容を読む限りでは、you_zさんとかは好きかもと思いますw > clojure
Lisp1だけど、CL的でもあります。
スペシャル変数みたいなVarsっていう仕組みがあって、
LISP1なので、これに、関数を詰めれば、スペシャル関数みたいなw
アスペクト思考とか、コンテクスト指向的に便利ってことなんですが、
どういう風に便利なのかという。

9NNm9zkREVm 2008-09-21T01:43:57+09:00
CLもわかってない事だらけで、他のLispにも手をだしたら混乱しそうだなーという弱気な理由で、まだSchemeもろくに勉強してないんですが、
余裕が出てきたら試してみたいですね。

g000001 2008-09-21T01:44:19+09:00
you_zさんは、Schemeやっても凄いことできますよ、きっと。
というか、Gauche使ったら、そっちに行っちゃいそうw

9NNm9zkREVm 2008-09-21T01:47:01+09:00
すみません、まだCLでもろくなコード書いてないっす、

g000001 2008-09-21T01:48:34+09:00
いやいや、そんなw

9NNm9zkREVm 2008-09-21T01:48:36+09:00
今まで書いたLispコードの7割がちゃんと本読む前に書いたProject Eulerのコードのような気がする…

名無しさん 2008-09-21T01:49:12+09:00
みんなそうじゃないっすかね
ちゃんと本読むのハードルが果てしないっす…

g000001 2008-09-21T01:51:11+09:00
ちゃんとを目指すと、大変そうw
とりあえず、PAIPは制覇
するのかなw

名無しさん 2008-09-21T01:51:56+09:00
cltl2を"ちゃんと"ってあたりで挫折

g000001 2008-09-21T01:51:59+09:00
HyperSpec、CLtL2は必読だって、
K田さんが、
あ、被ったw
あと、もう一冊なんかあったような。

名無しさん 2008-09-21T01:52:54+09:00
なんとなしドリルを絶賛していたきがしますね

g000001 2008-09-21T01:53:44+09:00
あ、そうなんですか、

名無しさん 2008-09-21T01:54:05+09:00
別のものですかね

g000001 2008-09-21T01:54:05+09:00
図書館にあるから借りようw

名無しさん 2008-09-21T01:54:21+09:00
よし負けずに
必要になったら、もしくは興味がでたら読むでいいのでは>HyperSpec / CLtL2

9NNm9zkREVm 2008-09-21T01:54:31+09:00
OnLispがやっと11章まで、,

g000001 2008-09-21T01:54:55+09:00
いや、On Lispは入門書じゃないじゃないですかw

名無しさん 2008-09-21T01:55:03+09:00
実践CLを詠み始めてます。分かりやすいです。
On Lisp を読むとスムーズに Schemer になれますw

9NNm9zkREVm 2008-09-21T01:55:07+09:00
うわ、CLtL2の日本語版、8400円とかなんですね、

haiju 2008-09-21T01:55:28+09:00
8400円って・・・高い

g000001 2008-09-21T01:55:34+09:00
そうyou_zさんは、ポール・グレアム的なスタイルは好きだと思いますよ。
古本屋でって感じですよねー。 > CLtL2
でも、ページで割ると、その値段も、まあ、しょうがないという

名無しさん 2008-09-21T01:57:40+09:00
CLtL2英語版2万とかついてましたが。
http://item.rakuten.co.jp/book/4823824/
無茶な値段だなぁ。オンラインで読めるのに…

g000001 2008-09-21T01:58:33+09:00
英語版なら、オンラインで読める ということを考えると
被ったw

9NNm9zkREVm 2008-09-21T02:00:14+09:00
とりあえずchm版で我慢しとこう(汗

名無しさん 2008-09-21T02:02:32+09:00
http://www.amazon.co.jp/Common-LISP%E2%80%95Common-LISP%E8%A8%80%E8%AA%9E%E4%BB%95%E6%A7%98%E6%9B%B8-Guy-Steele/dp/4320022718
これは1版ですか?

g000001 2008-09-21T02:04:26+09:00
これは、1版じゃないですかねー
そういえば、中古でCLtL買うときは、1か、2か注意しないといけないという
SPICE LISP、Zetalisp、MacLISPとか、書いてるやつは、1版だったような

名無しさん 2008-09-21T02:09:06+09:00
http://www.meirinkanshoten.com/book.asp?id=223033
明倫館探してみたらこれしかなかった
そろそろ寝ますー。
おやすみなさい。

g000001 2008-09-21T02:13:53+09:00
はいー、おやすみなさいまし。

haiju 2008-09-21T02:13:58+09:00
おやすみなさい

9NNm9zkREVm 2008-09-21T02:19:30+09:00
私もそろそろ落ちます。おやすみなさいー 

g000001 2008-09-21T02:20:52+09:00
はいー、おやすみなさいまし(*'-')

haiju 2008-09-21T02:21:04+09:00
おやすみなさい

名無しさん 2008-09-21T02:22:14+09:00
(defmacro desun (name args &body body)
  (let ((a (gensym))
	(b (gensym)))
    `(progn
       (defparameter ,a #'(lambda ,args ,@body))
       (defun ,name (&rest ,b) (apply ,a ,b))
       (setf (get ',name :spfun) ',a)
       ',name)))


(defmacro slet (l-list &body body)
  `(let ,(mapcar #'(lambda (x)
		     (if (get (car x) :spfun)
			 `(,(get (car x) :spfun) #'(lambda ,(cadr x) ,@(cddr x)))
		       (error "~S is not special function " (car x)))) l-list)
     ,@body))
ぼんやりとzickさんのを変数使わないようにしてみた
添削よろ

quek 2008-09-21T02:32:52+09:00
それでは、みなさん、おやすみなさい。

haiju 2008-09-21T02:34:12+09:00
おやすみなさい。わたしもそろそろLingrの方はおちます。

名無しさん 2008-09-21T02:34:49+09:00
おやすみなさいー

g000001 2008-09-21T02:35:24+09:00
おやすみなさいましー

名無しさん 2008-09-21T02:38:10+09:00
中身落ちします

g000001 2008-09-21T02:43:35+09:00
はいでは、中身だけお休みなさいましー(*'-')

名無しさん 2008-09-21T02:45:08+09:00
あ、そういえばJLUGは?

g000001 2008-09-21T02:49:08+09:00
あ、具体的なお返事が、
まだ、ありません(^^;;
ごめんなさい(^^;
一応色々補足のメールだしてみました。

名無しさん 2008-09-21T02:50:01+09:00
告知 or 募集をするんじゃなかったのかなと思ったのでした

g000001 2008-09-21T02:51:05+09:00
そうなんですね、どう動いて行くのか、
お返事まちという感じなのですが、
一気に無くなったら、ごめんなさい(^^;
あんまり、巨大な話になっても大変なんですが…
素直に、common-lisp-users.jpとかドメインとってやってみた方が良いのかなー
長いけど…。

名無しさん 2008-09-21T03:00:22+09:00
やー、特に何もしなくてよいのでは?
公開する場所はどこでもいいんですし

g000001 2008-09-21T03:01:15+09:00
なんか皆なでメンテナンスできる場所があると良いですよね。

名無しさん 2008-09-21T03:01:43+09:00
Shibuya.lisp系列でもいいでしょうし、sf.jpとかでも多分いけると思いますよ。

g000001 2008-09-21T03:02:33+09:00
なるほど、なるほど。自分google sitesでcl-jp作ってなげだしてしまったんですがw
ちゃんと有志を集められれば、それで良いのかな(*'-')
紫藤さんのところは、
http://sites.google.com/site/shidoinfo/
どんどん情報は充実しつつあるのですが、
やっぱりメンテナが重要みたいな。
sf.jpは考えてませんでしたねー。

名無しさん 2008-09-21T03:04:33+09:00
立ち上げるのと続けていくのは別次元の難しさなので、何とも言えません(^^;

g000001 2008-09-21T03:05:13+09:00
今、ウェブ上で、コンテンツの置場をつくるのは
非常に簡単なんですけど、
中身の継続となると、なかなかw

名無しさん 2008-09-21T03:10:48+09:00
おばんです。

g000001 2008-09-21T03:10:54+09:00
こんばんはー(*'-')

名無しさん 2008-09-21T03:11:10+09:00
すごいですね。今日は深くまで、、、

g000001 2008-09-21T03:11:18+09:00
いや、なんででしょうねw
たまーに、こういう時もありますね。
環境説明で、もりあがったからかな?(*'-')

名無しさん 2008-09-21T03:12:28+09:00
なるほどです。来週Shibuya.lispがあるんですね。しらんかったです。

g000001 2008-09-21T03:13:04+09:00
あ、10/18日ですね。
第1回のTech Talkですが

名無しさん 2008-09-21T03:13:50+09:00
あ、そっか。全然来週じゃないですね。
おもしろそうなんですかね???

g000001 2008-09-21T03:14:26+09:00
Tech Talkが、2時間程度で、
LTが30時間分程度でという感じで、
Tech Talkは面白いものになって行くと思います!

名無しさん 2008-09-21T03:15:27+09:00
う、すいません、LTってどんなものですか。

g000001 2008-09-21T03:15:35+09:00
LTも初回なので、新鮮なネタが多いと
ライトニングトークで、最近流行ってる感じなのですが、
5分とか決めて、自分のもちねたを披露するんですね、
で、リミットが来たら、有無を言わさず退場というw

名無しさん 2008-09-21T03:17:10+09:00
にゃるほど。おしえていただいてありがたいです。m(_ _)m

g000001 2008-09-21T03:17:51+09:00
LTは6名募集になる筈なんですが、
どうなってゆくかは今週位にははっきりするかと

名無しさん 2008-09-21T03:19:08+09:00
Lisp界隈がもりあがっていくのは、よいことですね。
眠れなくて翻訳を渡来してます。http://www.flownet.com/gat/papers/lisp-java.pdf
この論文にあるように、またPCLなどがいっているように開発効率があがるというのは真なんしょうか。

g000001 2008-09-21T03:22:59+09:00
おおー、素晴しい > 翻訳
開発効率といえば、インタラクティブな開発ということで、
良いとされてるんでしょうね。多分。
Smalltalkとかも、そういう感じだったような。

名無しさん 2008-09-21T03:24:19+09:00
どうなんでしょう? Lispも他の言語もできる人を対象に開発してみるとどうなるんでしょうね?

g000001 2008-09-21T03:24:23+09:00
ハッカーと画家の モルタル と 油彩画の喩えみたいなところでしょうか(*'-')

名無しさん 2008-09-21T03:24:26+09:00
トム・デマルコさんの書籍で、ピープルウエアというソフトウエア開発手法の本があるんですが、
どっちでも同じって結果になったりして^^;
はい
そこで、昔アメリカで統計をとったことの結果があったんですね。

g000001 2008-09-21T03:25:17+09:00
なるほど、上の例えでいえば、モルタルの絵が書ける人は、油絵も書けるでしょうね(*'-')

名無しさん 2008-09-21T03:25:27+09:00
で、同じお題に対して、ほとんどの言語で開発速度に関して有意な差はなかったと。
唯一差があったのが、
アセンブラ。(><)

g000001 2008-09-21T03:26:38+09:00
そうなんですか(*'-')
あ、モルタルじゃなくて、フレスコ画ですねw

名無しさん 2008-09-21T03:27:05+09:00
ただし、6ヶ月以上の実務経験がない人がいると、チームのコミュニケーションが悪いところは言語に関わらず、遅くなると。

g000001 2008-09-21T03:27:27+09:00
なるほどー
ポール・グレアムのたとえだと

名無しさん 2008-09-21T03:27:52+09:00
その統計ってウェブで見れますか?

g000001 2008-09-21T03:28:01+09:00
あとは、立像を作るのに、

名無しさん 2008-09-21T03:28:16+09:00
すいません、本でしかみたことないです。> hoppyさん

g000001 2008-09-21T03:28:43+09:00
粘土で原形を作って、鋳造するか、金属をけずるかみたいな。
金属をけずって像を作れる人は、どっちでも作れるんだと思いますが、
手間の問題なんでしょうね。
というのをポール・グレアムは煽っていることが多いですねw

名無しさん 2008-09-21T03:30:31+09:00
本の名前をご存知でしたら是非。
たぶん、難しい問題だと、Lispは開発が速かろうとは思ってるんですが、そういう資料が無いんですよね。。。あ、本の名前はピープルウエアです。著者はトム・デマルコ。
トム・デマルコは、コミュニケーションがなにより大事ということがいいたかっただけなんですが。

g000001 2008-09-21T03:31:47+09:00
デマルコセレクションって本に載ってたような

名無しさん 2008-09-21T03:31:49+09:00
あ、前に出てましたね。失礼しました。

g000001 2008-09-21T03:31:53+09:00
載ってなかったような。
デマルコに反応しただけかもw
AIで重宝されたのも、
そういう原形をつくるのが楽なところだったと
リチャード ガブリエル氏も

名無しさん 2008-09-21T03:33:48+09:00
すいません、これまた無知で恐縮なんですが、、、

g000001 2008-09-21T03:33:54+09:00
oopslaのインタビューでいってました。

名無しさん 2008-09-21T03:33:58+09:00
なるほど。確かに業務で仕事していても難しい処理はあまりないですからね。
PAIPのPeter Norvigが、GoogleいってPythonista?になっちゃったって実話なんですか???

g000001 2008-09-21T03:34:48+09:00
CLの中心人物の5人?のうちの一人で、
「悪いものの方が良い」エッセイで有名な方です(*'-') > ガブリエル氏

名無しさん 2008-09-21T03:35:58+09:00
悪いものの方が良い、

g000001 2008-09-21T03:36:09+09:00
実話ですねー(*'-') > Norvig氏

名無しさん 2008-09-21T03:36:10+09:00
こわいけど、おもしろそうですね。見てみます。ありがとうございます。
衝撃、、、

g000001 2008-09-21T03:36:36+09:00
http://www.kt.rim.or.jp/~hisashim/gabriel/
とかに翻訳が色々と
すいません、さすがに、7時間半チャットしてたら、急激に燃料が切れてきましたw

名無しさん 2008-09-21T03:38:26+09:00
あはは。お疲れ様です。

g000001 2008-09-21T03:38:30+09:00
もっとつっこんだお話がしたいんですが、燃料がw
自分もこの辺で落ちますね(*'-')
名前は付いてますけど、中の人は落ちてますw
おやすみなさいましー

名無しさん 2008-09-21T03:41:29+09:00
おやすみなさいー。
思うに他の言語を真似るマクロとかあればと思うのですが
本当はLispなんだけどVBの文法で書ける、みたいな
そうすれば難しい処理はJavaあとはVBなり使用者がたくさんいる言語に~と。
JavaじゃなかったLisp
スペシャル関数の添削>snmstsさん
gensymに名前をつけると引数が微妙に見やすくなるかも

(defmacro desun (name args &body body)
  (let ((a (gensym (string name)))
	(b (gensym (prin1-to-string args))))
    `(progn
       (defparameter ,a #'(lambda ,args ,@body))
       (defun ,name (&rest ,b) (apply ,a ,b))
       (setf (get ',name :spfun) ',a)
       ',name)))

(desun range (from to &optional (step 1))
  (do ((i from (+ i step))
       (acc '()))
      ((> i to) (nreverse acc))
    (push i acc)))

(arglist 'range)
=> (&rest #:|(from to &optional (step 1))143|)

揚げ足取るなら:spfunはキーワードでなく単にシンボルでも良いかな、と。
(get hoge1 hoge2)
hoge2にキーワードを使ったのをあまり見たことがないので。
これは好みの問題ですね、すみません。
そのgensymは便利そうですね。ありがとうございます。キーワードはユーザ側に漏れない限りどうでも良いかな…と思います。
こんにちは

g000001 2008-09-22T17:32:10+09:00
こんにちはー(*'-')

名無しさん 2008-09-22T17:32:13+09:00
ちょっと
お聞きしたいことがあって

g000001 2008-09-22T17:32:32+09:00
はいー、自分で良ければ(*'-')

名無しさん 2008-09-22T17:33:02+09:00
asdfでcl-ncurse

http://common-lisp.net/project/cl-ncurses/
このパッケージを
asdf-install
してインストール使用と思ったのですが
; loading system definition from /usr/lib/sbcl/site-systems/cl-ncurses.asd into
; #
; registering # as CL-NCURSES
; loading system definition from /usr/lib/sbcl/site-systems/uffi.asd into
; #
; registering # as UFFI
STYLE-WARNING: defining *NULLPTR* as a constant, even though the name follows
the usual naming convention (names like *FOO*) for special variables
;;; Loading #P"/usr/lib/libncurses.so"
NIL
*
debugger invoked on a SB-INT:SIMPLE-READER-ERROR in thread #:
SB-INT:SIMPLE-READER-ERROR on #:
unmatched close parenthesis

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.

(SB-INT:SIMPLE-READER-ERROR
#
"unmatched close parenthesis")
こんなエラーメッセージが出てきてしまい
unmatched close ...
解決法がさっぱりわからずに途方にくれているのですが

g000001 2008-09-22T17:35:02+09:00
おお、なんか自分も確か遭遇したような。

名無しさん 2008-09-22T17:35:06+09:00
おお
これどうやったら解決できますかね?
ちなみに処理系はSBCLで
2chで指針が示されてた希ガス
Linux上で動かしています

g000001 2008-09-22T17:35:32+09:00
前に、どう書くorgに投稿したときに、cl-ncursesを使ったときに
なんかした憶えがw

名無しさん 2008-09-22T17:36:10+09:00
2chでデバッグするんだ!と
いわれたのですが
エラーメッセージの意味判ります?
括弧が対応していない
という意味だと思ってます

g000001 2008-09-22T17:36:42+09:00
実際のところ本当に()が対応してなかったようなw
あれ、大分つくりかけなライブラリだった記憶がありまして、

名無しさん 2008-09-22T17:36:58+09:00
該当箇所のコード調べました?
該当箇所>いいえ
調べましょうよ。
調べ方が判らない?という質問内容になりますか?
なります
ちょっと待って。SBCLとcl-ncurse引っ張ってくる
同じもの見ながらの方が話早いと思うので

g000001 2008-09-22T17:39:58+09:00
手元の、cl-ncurses_0.1.1だと動きますねー

名無しさん 2008-09-22T17:40:41+09:00
んじゃSBCLto
s/to/と
cl-ncurseのバージョンとSBCL走らせてるプラットフォーム、教えて
SBCL 1.0.11.debian
ubuntuの2.6.24-16-server
です
cl-ncurse

(require :asdf-install)
(asdf-install:install :cl-ncurses)で引っ張ってきました
おっけい。しばし待たれよ
ありがとうございます!
先に解決しちゃってもOKです>g000001さん

g000001 2008-09-22T17:44:35+09:00
お、自分も記憶を辿っていますw
http://ja.doukaku.org/comment/3253/
で使ったときに、同じことになったような記憶が

名無しさん 2008-09-22T17:45:38+09:00
あっ,このコードは見ました!
参考にさせてもらっています

g000001 2008-09-22T17:47:13+09:00
mcって人が書いたコードは、適当な素人が書いたものなので、
参考にすると危険かもしれませんw

名無しさん 2008-09-22T17:48:12+09:00
いえいえ,さっと読める日本語で情報があるのは貴重だと思います

g000001 2008-09-22T17:48:46+09:00
変なところがいっぱいあります(^^;

名無しさん 2008-09-22T17:50:15+09:00
うーむSBCLが入った環境が手元にないw
これデバッガに落ちてるときにバックトレース取れないんでしたっけ?>SBCL
やってみます
0: (SB-INT:SIMPLE-READER-ERROR
    #
    "unmatched close parenthesis")
1: (READ-PRESERVING-WHITESPACE
    #
    NIL
    (NIL)
    T)
ああそっか,このREAD-PRESEVING-WHITESPACEを
grepして修正すればいいのか
*STDIN*の状態からコードのどこを読もうとしてたか引っ張れないかな
やってみます
いまMacPortsでSBCLビルド中・・・
Ubuntu ISOのダウンロードは並行して裏で :-)
お手数かけてすみませんm(_ _)m
あれ?インストールできちゃった。
ライブラリ側に問題がありそうだったんだけどな。cl-ncurses_0.1.4で間違いない?>asdf-installが引っ張ってくるバージョン
Dec 27, 2007 - Version 0.1.4
More fixes, plus support for PDcurses (which implicitly adds support for the Windows operating system).
No longer requires a C compiler (doesn't need glue.so anymore).
Needs NCurses 5.6 or later (if you're using NCurses).
This version will be picked up by ASDF-INSTALL.
と書いてあるので,たぶん0.1.4で間違いないと思います
すると、MacOSXではスルーされる場所に問題があるのか。

g000001 2008-09-22T18:15:06+09:00
手元で、0.1.4を再インストールしても問題が再発しないですね。
なんだったかなー。
もしかして、
(setq *readtable* (copy-readtable))
とかして再度読み込むとOKだったのかも
自分の場合は、リードテーブルがいじられてて、括弧が対応しないエラーって
偶にあります。[]とか使ってる場合なんですが…。
でも、ここでは使ってないような。

名無しさん 2008-09-22T18:17:08+09:00
(setq *readtable* (copy-readtable))だめでした

g000001 2008-09-22T18:18:16+09:00
自分が去年使った、0.1.1の時は実際に書きかけって感じのライブラリで、
実際に()が対応してなかった憶えがあるんですよねw

名無しさん 2008-09-22T18:20:01+09:00
ってことはやはりコードをダウンロードして見てみるしかないですね

g000001 2008-09-22T18:20:57+09:00
でも、今、0.1.4をインストールしても
そんなことはなかったので、何か他の問題じゃないかなと

名無しさん 2008-09-22T18:23:29+09:00
UbuntuのISOイメージを入手したものの新規にVMを起こすだけの空き容量がない orz
sbclをアンインストールしてもう一度apt-get installしてみてからトライしてみたんですが
だめでした
on Ubuntu?>だめでした
はい
よーし。まずは現象確認するまで頑張るか

g000001 2008-09-22T18:25:40+09:00
SBCL側の問題ってことはあったりするんですかね

名無しさん 2008-09-22T18:26:07+09:00
cl-ncurses-develは何か悲惨な状態らしいので期待薄だしw

g000001 2008-09-22T18:26:34+09:00
自分は、sbcl 1.0.20と、1.0.14と、ncurses 0.1.1、0.1.4の組み合わせて問題ありませんでした。

名無しさん 2008-09-22T18:28:55+09:00
おかしいなぁ
SBCL犯人説がゼロとは言い切れないけど、ライブラリ側の問題であって欲しいな〜
ちなみに僕んとこはSBCL 1.0.18, cl-ncurses_0.1.4 on MacOSXで問題なし、です
ncursesのlib自体を再インストールしてみます
乱暴な追い込み方としてはsbclにstraceを仕掛けてどのファイルを読み込んでるときにエラーになるか調べてみる、とか

g000001 2008-09-22T18:36:12+09:00
自分がはまったときも時期的に、1.0.11だったのが気になるw

名無しさん 2008-09-22T18:37:21+09:00
な,なんかLinux自体がおかしくなった...

g000001 2008-09-22T18:37:42+09:00
ソースからのビルド方法は、
http://cadr.g.hatena.ne.jp/g000001/20071228/1198859764
に書いてみてます。ビルド自体は非常に簡単です(*'-')

名無しさん 2008-09-22T18:38:15+09:00
参考にさせてもらいます

g000001 2008-09-22T18:38:31+09:00
いま、最新は、1.0.20です(*'-')

名無しさん 2008-09-22T18:44:16+09:00
Linux復活中...
ちょいと夕食に呼ばれてしまったので抜けます。時間があるときに見てみます>SBCL + cl-ncurses on Ubuntu

g000001 2008-09-22T18:49:45+09:00
あれ、1.0.11でも動くなあ(^^;

名無しさん 2008-09-22T18:51:43+09:00
すみません,apt-getしたときLinuxが壊れてしまったようです.復旧作業を行いますので,ちょっと抜けます

g000001 2008-09-22T18:54:26+09:00
はいー(*'-')

名無しさん 2008-09-22T20:53:49+09:00
debian lenny環境だと大丈夫みたいです。
違いはsbclのバージョンくらいかなぁ
$ sbcl --version
SBCL 1.0.18.debian
SBCL 1.0.20.17 + cl-ncurses 1.4 も正常にコンパイル+ロードできました

g000001 2008-09-23T02:26:03+09:00
Shibuya.lisp Tech Talk#1が告知になりました!
http://shibuya.lisp-users.org/2008/09/23/sltt-1/
LT発表者募集中です!!

名無しさん 2008-09-23T04:45:52+09:00
おはようございます
こんにちは。

quek 2008-09-24T01:31:10+09:00
【急募】
(let ((x 1) (y 2) (q1 "x") (q2 "y"))
  (list (xxx q1) (xxx q2)
        (let ((x 10) (y 20))
          (list (xxx q1) (xxx q2)))))
;; => (1 2 (10 20)) となる関数 xxx
どうにも思いつきません。だれか助けてぇー

名無しさん 2008-09-24T02:24:22+09:00
lexical environment 上の x を名前で参照したいという事ですね。コンパイルされちゃうと、大抵 x <--> 1 と x <--> 10 のような対応はなくなっちゃうので難しい。
逆にインタプリタなら大抵、lexical environment 上の変数にアクセスしたりできる。CLISP の例だと
(defmacro xxx (var)
  `(ext:eval-env (intern ,var) (ext:the-environment)))

(defun quek-1 ()
  (let ((x 1) (y 2) (q1 "X") (q2 "Y"))
    (list (xxx q1) (xxx q2)
      (let ((x 10) (y 20))
        (list (xxx q1) (xxx q2))))))
lexical environment を取得するマクロ ext:the-environment と(ただしこいつはインタプリタ動作の時しか使えないのでコンパイルできませんw)、環境上で eval する eval-env を使う。
マクロなのは let 内の lexical environment が欲しいから。
関数にしたいならこんなんなります。
(defun fff (var env)
  (ext:eval-env (intern var) env))

(defun quek-2 ()
  (let ((x 1) (y 2) (q1 "X") (q2 "Y"))
    (list (fff q1 (ext:the-environment)) (fff q2 (ext:the-environment))
      (let ((x 10) (y 20))
        (list (fff q1 (ext:the-environment)) (fff q2 (ext:the-environment)))))))
関数 fff 内の lexical environment をとってみると残念なことになります。あと、やっぱりコンパイルできない。
コンパイルできないのはちょっと…
という向きには let に手を入れて自力で検索用にシンボルと値の対応を覚える。
(defmacro quek-let (bindings &body body)
  `(let ,bindings
     (let ((*quek-env* (append (list ,@(mapcar #'(lambda (x &aux (sym (car x))) `(list ',SYM ,SYM)) bindings)) *quek-env*)))
       ,@body)))
(defun quek-lookup (name)
  (second (assoc (intern name) *quek-env*)))

(defun quek-3 ()
  (quek-let ((x 1) (y 2) (q1 "X") (q2 "Y"))
    (list (quek-lookup q1) (quek-lookup q2)
      (quek-let ((x 10) (y 20))
        (list (quek-lookup q1) (quek-lookup q2))))))
やっぱりまんまはムリですよね…
昔悩みに悩んだ記憶が…
SBCLで遊んでみたけどfind-symbolで見付かってもunboundなんだよね...
で結局お題のままでは回答不能、でFA?
そもそも関数では絶対不可能である自信があるんですが…
関数でなくて良いなら、なんかズルできそうな予感がひっかかってます
結局quek-letみたいな感じなのになりそうですが
【急募】ってのが気になりますね。宿題じゃなさそうなんで、強引にでも解決できればいいんだろうな、と:-)
規格内では無理なんじゃないですかね。
処理系依存の機能を使うか、let を改造するか、あるいはこの場合なら let の外側からコンパイル前に let を解析するような code-walker を使うか…。
quekさんの再登場を待ちますか。
急募は気になりますね
あぁまたSync Errorが... orz > EAC

g000001 2008-09-24T02:47:27+09:00
こんばんはー(*'-')

名無しさん 2008-09-24T02:47:42+09:00
ばんわー

g000001 2008-09-24T02:47:55+09:00
急募ってのは、最近流行りの【急募】って意味だと思います(*'-')
募集くらいの意味ですよね、多分

名無しさん 2008-09-24T02:48:29+09:00
おばんです。

g000001 2008-09-24T02:48:37+09:00
最初wassrに投下されたんですけど、面白そうなので、こっちに投下してみたらどうだろうと、自分がquekさんにリクエストしましたw
こんばんはー(*'-')

名無しさん 2008-09-24T02:49:06+09:00
これ、ansiの範囲では無理ですよね。
良くできてますよね
昔、悩みに悩んだあげく、
アトムをコンスセルで繋いだソースと実行時表現とは無関係なんだ!ピコーン!…となるまですっごいかかった
使う範囲でspecial変数使えばよいんだ!という違う感じにピコーンして終了

g000001 2008-09-24T02:51:03+09:00
自分は、変数をスペシャル宣言するってのを解答にしてみました(^^;
あ、被ったw

名無しさん 2008-09-24T02:51:12+09:00
変なカブ
次回勉強会用にスライド作ろうかと思ったけどGoogle毒が日本語を拒否したのでこっちに張ってしまった
次回ってなんでしたっけ…
申し訳ない

g000001 2008-09-24T02:52:26+09:00
まだ、決まってないんですよw
助けて下さいw
CLOS篇を飛してcookbookとかにしようかなとも思っていますが、
何かあれば、提案を優先したいです(*'-')
おお、そういえば、丁度akaさんが!
akaさんどうですか? 何かやってみたいこととか無いでしょうか(*'-')
onjoさんのGoogle docにも期待あげ!

名無しさん 2008-09-24T02:55:03+09:00
うーん。まだまだ入門中の身で、ネタを思いつかんのです。。。

g000001 2008-09-24T02:56:09+09:00
何かあれば、ここに書いて置いてもらえれば、自分がアナウンスしますので、いつでも大歓迎です!
大体遅くともその週の水曜には、告知しています(*'-')

名無しさん 2008-09-24T02:56:53+09:00
これは一度はハマるから説明をつくろうかなと思ったんだけど
もう全部貼ってしまったw

g000001 2008-09-24T03:01:34+09:00
あれ、貼ったというのは、
このquekさんの問題ですかw
開発環境の流れで
Using Emacs as a Lisp IDE
とかにしとこうかなー。
あれ、でも、これSLIMEじゃないな。
レキシカル環境といえば、
TAOで、environmentってのがあるんですが、
environment                            関数[#!macro]

<説明>
  形式 : environment &rest var
ローカル変数 var があるならば、その値を保存し、ないときには、それが実行
される場所から見られる全てのローカル変数の値を保存。

<例>
        (let (x y z)
              (!x 1) (!y 2) (!z 3)
              (!a (environment))
              (!b (environment x y z))
              (!c (environment x y)) -> {applobj}40202(#!closure . 8)
        (x + y + z) -> エラー       (z は束縛されていない変数)
        (a '(x + y + z)) -> 6
        (b '(x + y + z)) -> 6
        (c '(x + y + z)) -> エラー  (z は束縛されていない変数)
        (c '(x + y)) -> 3
clispなら再現できそう!と思ったので作ってみようと思いました(*'-')
TAOはインタープリタ指向らしいのでこういう利点があるんですねー。

名無しさん 2008-09-24T03:16:37+09:00
Gabrielさんのエッセイちょこちょこ読んでみました。まだ、どういう方なのか、というのはつかめていませんが、UNIXとCがきらいな人のような感触はあります。> g000001さん

g000001 2008-09-24T03:18:23+09:00
Gabrielさん 通称RPGさんは、
1970年代からのLisperで、最初は、主にMacLISPで
変なことをしていて、(スタンフォードで)
ということもあり、バックグラウンドは、PDP-10 で、LISPという感じなので
UNIXでC文化とは対立するところは、ありますw
それで、80年台にCLの策定に深く関わって、
Lucidという商用CLの処理系を主な業務にする会社を起して、
AIの冬とともに、潰れましたw

名無しさん 2008-09-24T03:24:57+09:00
よかった急募の人はいなかったんだ。と安心して寝ます。

(defmacro xxx (var)
  `(multiple-value-bind (type values declare)
       (sys::variable-information (intern ,var)
				  sys::*interpreter-environment*)
     (first values)))
なるほどです。いろいろ知見のありそうな方なので、エッセイを読み進めてみようと思います。

g000001 2008-09-24T03:25:13+09:00
はいー、お休みなさいましー(*'-')
http://www.se-radio.net/podcast/2008-01/episode-84-dick-gabriel-lisp

名無しさん 2008-09-24T03:25:24+09:00
あ、お題ですが、

g000001 2008-09-24T03:25:27+09:00
このインタビューはLISPの歴史的なところも

名無しさん 2008-09-24T03:25:29+09:00
ACL での実行例w やっぱり interpreter なら取れる

g000001 2008-09-24T03:25:35+09:00
説明してて非常に面白いです(*'-')
おお!!、なるほどー > インタープリタ

名無しさん 2008-09-24T03:26:51+09:00
みなさんのそれぞれの環境でのパーシステンスをお話いただくってどうなんですかね。DB含めて。

g000001 2008-09-24T03:27:08+09:00
それ随分高度ですねw
自分は、ファイルにS式を書き出す位ですかねえ(^^;

名無しさん 2008-09-24T03:29:31+09:00
私はacl onlyなので、allegro cacheかMysql connect libでやってるんですが、他の処理系はどうしてるんだろ、と興味があったり。

g000001 2008-09-24T03:29:50+09:00
なるほどー(*'-')
onjoさんとか、quekさんが色々ご存じかなと

名無しさん 2008-09-24T03:30:43+09:00
皆さんのニーズどうなんでしょうね。。。もっとLispっぽいのがいいんでしょうか。

g000001 2008-09-24T03:31:09+09:00
OODBとか、多分lispっぽいんじゃないかと
自分がDBに疎い(というか全く知らないw)ものですから、是非、その辺をakaさんに
自由に展開して頂ければと(*'-')

名無しさん 2008-09-24T03:33:25+09:00
うーん。自分でいってて何ですが、例えばallegro cacheだとすると、結構MOPなので、CLOS前提になっちゃうのがつらいかもしれませんね。

g000001 2008-09-24T03:35:20+09:00
それでもOKとは思います(*'-')
初級者をターゲットにする、というのと、自分の興味のあることをやる、という2つの流れがあるんですが、
今のところ私の興味のあることをやってしまってますw
90分で何かまとまったことができれば、それで良いんじゃないかなーみたいな。
ただ、最近は、参加者が幅広くなってきているので、
多数が置いてけぼりになる事態は考えものになりつつあるという感じではあります(*'-')

名無しさん 2008-09-24T03:39:26+09:00
例えば、30分で、CLOSちょろallegro cacheちょろ、やって、それは私でもなんとかできるので、残りの時間はFranz以外の環境でのパーシステンスについて、参加者の方でいろいろお話いただくというのはどうですかね。

g000001 2008-09-24T03:40:06+09:00
なるほど、なるほど(*'-')
そうなると、30分目以降から、パーシステンスを扱ったことがある人での議論になるかと思うのですが、

名無しさん 2008-09-24T03:41:02+09:00
ただ、パーシステンスというお題自体が多数放置の危険性があるなら、もっとフレンドリーな話題の方がよいと思います。

g000001 2008-09-24T03:41:23+09:00
いや、パーシステンスは知ってて、
CLは知らないってパターンもあるかもしれないので
CLでは、こうやるっていう話は、
面白いかもしれません(*'-')
CL云々より、パーシステンスに興味があったり扱ったりしたことがある人が
集まるかって感じですね(*'-')

名無しさん 2008-09-24T03:43:04+09:00
おおお、なるほど。

g000001 2008-09-24T03:43:18+09:00
自分の場合は、置いてけぼり対策としては、
議論にならなくてもどうにか切り抜けられるように、
延々と説明の原稿をコピペするってやり方でしのいで来ましたw
実際のところ対策というより、
置いてけぼりが発生した時点で進行が止まるのを、どうにか防ぎたいという感じですw

名無しさん 2008-09-24T03:46:16+09:00
とりあえず、ここにこの議論は残っているので、
夜までに、そりゃいいテーマだ的な書き込みがあるかどうか様子見というのは、いかがですか。

g000001 2008-09-24T03:47:24+09:00
それも良いですね(*'-')
自分は良いんじゃないかなーと思っています。

名無しさん 2008-09-24T03:48:15+09:00
私は、自分がしゃべるのは気がひけますが、皆さんどうしているのかなーというのは興味あります。

g000001 2008-09-24T03:48:42+09:00
そういう感じだと、先週のように、皆でネタと質問を持ち寄るってのが
良いかもしれませんね(*'-')

名無しさん 2008-09-24T03:49:00+09:00
あ、それよいですね。

g000001 2008-09-24T03:50:06+09:00
ちょっと告知が遅かったかもしれないですがw
その場合は、来週でも良いかなと思います。
ずっとネタは募集してますんで(*'-')

名無しさん 2008-09-24T03:52:08+09:00
りょうかいです。パーシステンス、やることになったら、allegroについては私でも少しは情報提供できますので。

g000001 2008-09-24T03:53:31+09:00
了解です、よろしくおねがいします!(*'-')

名無しさん 2008-09-24T03:54:05+09:00
それではそろそろ落ちます。おやすみなさいー

g000001 2008-09-24T03:55:17+09:00
はいー、お休みなさいましー(*'-')

名無しさん 2008-09-24T20:36:56+09:00
AllegroCache関係はちょっと聞いてみたいかもです。
ただ、自分はDBとかには疎いので完全に聞いているだけになりそうです。
興味はありますけど。

quek 2008-09-24T22:12:18+09:00
こんばんは。みなさん急募の件ありがとうございます。やはり無理、でもインタプリタでならいける、なのですね。しかし、「急募」はちょっとまずかったです。とっとと寝てましたw すみません。

g000001 2008-09-24T22:40:58+09:00
色々面白かったですねー:) > XXX問題

quek 2008-09-24T23:00:38+09:00
まさか TAO まででてくるとは。

g000001 2008-09-24T23:02:14+09:00
TAOは変態的な処理系なので一回触ってみたいですw
http://www.nue.org/nue/#tao-manual

quek 2008-09-24T23:03:45+09:00
インタプリタ指向というのが意外でした。

g000001 2008-09-24T23:03:50+09:00
これみてCLでマクロとか再現して遊んでましたw
そうなんですよね、TAO開発者にはこだわりがあるらしいですよ >インタプリタ指向

quek 2008-09-24T23:06:05+09:00
今回の件みたいにインタプリタだからこそ可能なこともあったりするんですね。おもしろい。

g000001 2008-09-24T23:07:11+09:00
ですねー。

quek 2008-09-24T23:10:17+09:00
そういえば 遠い海 の人が (subseries (series 'b 'c) 0 5) で #Z(LIST B C LIST B) になってしまうらしいのですが、g000001 さんもそんなことが以前なかったでしょうか?

g000001 2008-09-24T23:10:36+09:00
あります、あります、自分それで困ってましたw
同じ現象ですね。今はどうなんだろう。
fizzbuzzつくろうとして挫折したのはそれのせいでしたw
(subseries (series 'b 'c) 0 5) ;=> #Z(LIST B C LIST B)
ですねー。なんでなんだろう。
何かインストールの手順を失敗してるんでしょうか

quek 2008-09-24T23:14:02+09:00
series の中身はすごいマクロですから、処理系の微妙のことろをついたりしてるんでしょうか。。。

g000001 2008-09-24T23:14:47+09:00
基本的にseriesを直接つかったような時だけなんですよね
上の用に(series ...)だと先頭にLISTがくるという

quek 2008-09-24T23:20:33+09:00
うぅん、ふかかいw

g000001 2008-09-24T23:22:14+09:00
先頭のLISTってのが何か内部的なタグっぽいきもしますねw
cl-buildでインストールすると大丈夫なんですよね?

quek 2008-09-24T23:24:03+09:00
そうです。私は cl-build で大丈夫です。

g000001 2008-09-24T23:25:03+09:00
cl-buildってなんとなく安定してる気がしますね

quek 2008-09-24T23:26:16+09:00
各リポジトリの最新をとってくるんですが、たまにしか困ったことにはなってないですw

g000001 2008-09-24T23:28:30+09:00
なるほどー :-)
とりあえず、再インストールを試してみています ;)
やっぱりだめだなあw
cl-buildにチャレンジですかね :)

quek 2008-09-24T23:33:16+09:00
(declaim (optimize (debug 3))) このへんとかも関係してる???
~/.sbclrc で (declaim (optimize (debug 3))) ってしてます。

g000001 2008-09-24T23:35:35+09:00
おお、なるほど、なるほど。関係ありそう

quek 2008-09-24T23:37:04+09:00
(declaim (optimize (debug 0) (safety 0) (speed 3) (space 0) (compilation-speed 0))) でやってもうまく動きました。関係なさそうぅw

g000001 2008-09-24T23:41:52+09:00
あれw
climacsも動かしたいし、cl-build
ですね、これからの時代w

quek 2008-09-24T23:49:13+09:00
asdf-install はとても便利なんですが、アップデートに難ありなんですよね。

g000001 2008-09-24T23:49:41+09:00
依存関係とか割とカオスですよねw

quek 2008-09-24T23:49:51+09:00
あぁ、もしくは onjo さんのスクリプトか > cl-build

g000001 2008-09-24T23:50:02+09:00
カオスというか牧歌的というか

quek 2008-09-24T23:50:58+09:00
依存ライブラリがどんどんインストールされていくのは見てて楽しいですw

g000001 2008-09-24T23:52:50+09:00
なるほどー :) とりあえずdarcs get!w

quek 2008-09-24T23:58:58+09:00
さてと、そろそろ寝ますね。おやすみなさい。

g000001 2008-09-25T00:00:22+09:00
はいー、おやすみなさいまし :)
どうも、ソースからビルドしたSBCLに問題があるように思えてきたw
うーん、apt-get installしたSBCLでは問題なくclimacs起動!
自前は失敗というw
seriesの問題もdebパッケージ版なら問題なし。うーん
今回の勉強会ですが、パーシステンスで行くことに決定してみました!
これからアナウンスします!
ちなみになのですが、
主にCLな人が多いここでの勉強会のアナウンスも流れるMLがありますので、
良かったら是非とも参加してみてください! :)
アナウンスくらいしか流れてないですがw
http://groups.google.co.jp/group/caddr

名無しさん 2008-09-25T02:56:46+09:00
Qi 9.2がでてるよ。

g000001 2008-09-25T02:57:04+09:00
お、Qi 9.2!

名無しさん 2008-09-25T02:57:35+09:00
9.0は7月に出てたようだけど、パッチが2回当たった物みたい。

g000001 2008-09-25T02:59:33+09:00
あ、Qi IIじゃなくて、9.2ですね :)

名無しさん 2008-09-25T03:00:36+09:00
うん。

g000001 2008-09-25T03:00:47+09:00
9.2は今年の2月に出てるっぽいですね

名無しさん 2008-09-25T03:01:37+09:00
時間を読み間違ったか 汗

g000001 2008-09-25T03:01:50+09:00
9.0が7月というのは、2007年の7月ですね。

名無しさん 2008-09-25T03:02:09+09:00
うん。
失敬
tkライブラリもvery betaらしいけど出てるんだね。

g000001 2008-09-25T03:02:36+09:00
イギリスだと日付が逆になるからややこしい :)

名無しさん 2008-09-25T03:02:54+09:00
それはある。汗

g000001 2008-09-25T03:03:26+09:00
あれって西洋人は混乱しないんですかねえ

名無しさん 2008-09-25T03:03:55+09:00
国によって違いすぎるからねぇ。

g000001 2008-09-25T03:05:45+09:00
今週の勉強会はパーシステンスでDBとかシリアライズなので、
yasさん助けてくださいw

名無しさん 2008-09-25T03:05:58+09:00
うぉ。
予習せんと。

g000001 2008-09-25T03:06:24+09:00
akaさん発案で、思い切ってやってみることにしました

名無しさん 2008-09-25T03:06:44+09:00
akaさんの発案かぁ。

g000001 2008-09-25T03:06:47+09:00
CL + DBとかシリアライズは、やってる人はやってるけれど
なかなか難しい。

名無しさん 2008-09-25T03:07:37+09:00
ほほお

g000001 2008-09-25T03:07:51+09:00
自分は一切手を付けたことがありませんw

名無しさん 2008-09-25T03:07:55+09:00
そういえば手を出してない。clsqlは少し触ったけど

g000001 2008-09-25T03:08:31+09:00
自分はSQL自体ちょっと触れた程度なので、どうにもw
シリアライズはそういうライブラリをインストールしてみて、へーっと思った程度ですねw

名無しさん 2008-09-25T03:09:08+09:00
SQLで難しいなぁ〜とおもったのはDBの設計だよな。
シリアライズかぁ。onjoさんのサイトにライブラリの説明が少しあったよな??

g000001 2008-09-25T03:09:44+09:00
関数オブジェクトをシリアライズできないみたいだったので、放置しました :)
なるほどー。 >DB
OODB関係はいくつか記事を纏められていたような。

名無しさん 2008-09-25T03:10:45+09:00
うん。初めによく考えて作らないと大変だなとおもった。
使うだけならなれたら大丈夫だと思った。

g000001 2008-09-25T03:11:26+09:00
DBは自分は全然興味を持てなくて、という(^^;
ハマれば、面白いんでしょうけどね :)

名無しさん 2008-09-25T03:12:05+09:00
おれももともと興味なしだった。これ使えるかもと思って勉強したかな。
たとえば、jazzのDBを作るとかそんな目的でも作ればいいんじゃないか?<興味

g000001 2008-09-25T03:12:52+09:00
関数のクロスリファレンスとか作ってはみたいですが、
面倒くさそうというw
CL <-> emacs lispとか、cl <-> schemeとか便利に
引ければいいなーみたいな

名無しさん 2008-09-25T03:13:31+09:00
ほほお。あれはhyperspecの一つのファイルを上手に読めばすぐに作れるよ。

g000001 2008-09-25T03:13:48+09:00
ことは考えますが、自分にできるのかなあとw

名無しさん 2008-09-25T03:14:04+09:00
大丈夫。
おれも、cl-ppcre2.0以後ようにhyperspecを引くcgiを治さないといけないんだが、ほったらかしてる。^^;

g000001 2008-09-25T03:15:10+09:00
とりあえず、最初からDBじゃなくて、Lispのイメージの中で動かして、それからDBに落とせばいいのかな?
基本的にデータ構造ってものに興味がわかないんですよねw なんでだろう。

名無しさん 2008-09-25T03:15:59+09:00
あのcgiはハッシュを利用している。
なんでだろう。

g000001 2008-09-25T03:16:23+09:00
構造体もなんか、構造物になったとたんに、あんまり好きじゃないというw
リストが好きなんでしょうねw
アレイも嫌いだからw

名無しさん 2008-09-25T03:16:44+09:00
lispっぽさが消える。構造体

g000001 2008-09-25T03:17:20+09:00
リストでごちゃごちゃ作る→形になったら構造体へ 位に考えてはいるのですが、

名無しさん 2008-09-25T03:17:22+09:00
でも、内部だけで外側はlispだからそれらのパッケージを使う際には違和感は少ないと思う。

g000001 2008-09-25T03:17:27+09:00
リストの段階で終わってますねw

名無しさん 2008-09-25T03:17:47+09:00
ほお

g000001 2008-09-25T03:18:15+09:00
いや、速度にもこだわりがないのと、大した規模のものをつくってないので、
リスト以上のものが必要になったことがないんですね :)

名無しさん 2008-09-25T03:18:35+09:00
リストで速ければいいけど、リストでは遅い場合があるから、そんなときは別の構造をつかうよな。(e.g. ランダムアクセスなら配列)
ふむふむ

g000001 2008-09-25T03:18:53+09:00
ランダムアクセスでシャッフルとかは、
これはリストは死亡ですねw
1000倍位速度が違いそうですよね

名無しさん 2008-09-25T03:19:51+09:00
実際に作ったけど、小さな物でも速度的なさがあった

g000001 2008-09-25T03:19:54+09:00
1万倍位かなw
どう書くの問題でありましたね。

名無しさん 2008-09-25T03:20:19+09:00
大きさによりますわ。O(1)とO(N)やし
O(N)じゃなかったか高速ランダムシャッフルは。。。
たしかNlogNだっけな。忘れた^^;

g000001 2008-09-25T03:21:54+09:00
リストだとベクタみたいにはいかないですよね。

名無しさん 2008-09-25T03:22:01+09:00
うん

g000001 2008-09-25T03:22:17+09:00
あれくらい違うとやっぱり、ベクタですねw

名無しさん 2008-09-25T03:22:32+09:00
うん。

g000001 2008-09-25T03:22:49+09:00
あと2次元3次元のデータはリストはちょっと
というところはありますんで、これもアレイかな、さすがにw

名無しさん 2008-09-25T03:23:03+09:00
うわ^^;
alist,plist,hashでの実際の速度差は試して遊んだことがなかったなぁ。
そういえば

g000001 2008-09-25T03:23:56+09:00
是非比較を :)

名無しさん 2008-09-25T03:24:13+09:00
そうやね。

g000001 2008-09-25T03:24:16+09:00
小さいとalistの方がするみたいですけど
ってcookbookの受け売りですがw

名無しさん 2008-09-25T03:24:41+09:00
なる。
その辺実体験で体に焼き付けた方が理解が速いところやしな。w

g000001 2008-09-25T03:25:22+09:00
plistとalistの比較ってあまりないかもと思いますね

名無しさん 2008-09-25T03:25:31+09:00
うん

g000001 2008-09-25T03:26:46+09:00
ベクタ版のgetfとかないんですかね

名無しさん 2008-09-25T03:27:10+09:00
あったっけ?

g000001 2008-09-25T03:27:27+09:00
ベクタはとれないみたいなんですが、
なんかありそうな気も

名無しさん 2008-09-25T03:27:38+09:00
ふむ

g000001 2008-09-25T03:27:53+09:00
どっかしらのライブラリにありそうな :)
別に速度は変わらないか

名無しさん 2008-09-25T03:28:23+09:00
気軽にハッシュに流れそうな気もする

g000001 2008-09-25T03:28:31+09:00
そうか速度は変わらないのかw

名無しさん 2008-09-25T03:29:13+09:00
1:1対応のデータならハッシュ触ると楽やし。

g000001 2008-09-25T03:30:05+09:00
ハッシュももっと書きやすいといいんですけどねー

名無しさん 2008-09-25T03:30:27+09:00
rubyとかにくらべれば冗長だよね
リードマクロ作れって話になる?

g000001 2008-09-25T03:31:42+09:00
Clojureとか最近試してみてるんですが
ハッシュは、
{:foo 1 bar: 2}

名無しさん 2008-09-25T03:32:18+09:00
うん。最近よく名前を聞くけど、どんな言語なん?

g000001 2008-09-25T03:32:18+09:00
みたいに書いて
(:foo {:foo 1 :bar 2}) ;=> 1とかできるんでいい感じです

名無しさん 2008-09-25T03:33:01+09:00
なる そりゃかんけつだわさ

g000001 2008-09-25T03:33:10+09:00
java vmの上で動く処理系なんですけど、
CLの持ち味とLISP1の感じとjavaと色々混ぜた感じですねw

名無しさん 2008-09-25T03:33:39+09:00
ジャヴァでっか。
ほほお

g000001 2008-09-25T03:34:02+09:00
上の:fooの場合、関数を値として持たせておけば、キーに対応する関数が実行されるんで、
色々発展できるんですね。

名無しさん 2008-09-25T03:34:33+09:00
java上やったらマルチプラットフォームになるから、どんな環境でもつかえそうやねぇ。
ほほ
またみてみるわ。

g000001 2008-09-25T03:35:10+09:00
結構面白いですよ、
slimeも動きますし

名無しさん 2008-09-25T03:35:28+09:00
slime対応はええなぁ。

g000001 2008-09-25T03:36:02+09:00
マクロ展開とか、引数の表示とかドキュメント文字列の参照とか、補完もできます

名無しさん 2008-09-25T03:36:09+09:00
ほほお

g000001 2008-09-25T03:36:22+09:00
CL以外の言語では割とちゃんと対応してる方だと思いました :)

名無しさん 2008-09-25T03:36:56+09:00
java vm上の言語は何か一つ覚え手おいたら便利やろなと思ってるけど、学んでへん^^;

g000001 2008-09-25T03:37:16+09:00
scalaはjava上でしたっけ?

名無しさん 2008-09-25T03:37:23+09:00
うん

g000001 2008-09-25T03:37:38+09:00
scalaかclojureかみたいなw
ABCLとかはありますけどね、CLも。
でも、ちょっとネイティブの方が充実してるかな、みたいな。

名無しさん 2008-09-25T03:38:08+09:00
scalaは再帰を書いて計算させたけど、値が変やったから、熟成してからでええかと思って捨てたw

g000001 2008-09-25T03:38:36+09:00
clojureはダイナミック変数もあったり

名無しさん 2008-09-25T03:38:43+09:00
ほお

g000001 2008-09-25T03:38:55+09:00
マルチスレッドを意識した

名無しさん 2008-09-25T03:39:05+09:00
なる

g000001 2008-09-25T03:39:11+09:00
refsっていうトランザクションを基本とした変数の扱いがあるようです
詳しくは分かってないですw
衝突を回避してくれるみたいです、自動で

名無しさん 2008-09-25T03:39:44+09:00
なるなる。

g000001 2008-09-25T03:40:22+09:00
http://www.lispnyc.org/wiki.clp?page=past-meetings
これの2番目がclojureの解説で、2時間位延々と解説してますw
これ眺めて、お、面白そう!と思いました :)

名無しさん 2008-09-25T03:42:10+09:00
javaその物で書いた物に近い速度で動いてくれそうやね。

g000001 2008-09-25T03:42:52+09:00
javaの層にも簡単にアクセスできるようですね
ただ、ちょっと開発中の言語なんで、ドキュメントがちょっと不足気味かなとは
思いますねw

名無しさん 2008-09-25T03:44:21+09:00
なる
月一の定期ミーティングかぁ。

g000001 2008-09-25T03:44:48+09:00
LispNYCですか? :)
楽しそうですよねー。

名無しさん 2008-09-25T03:45:02+09:00
うん。そのくらい出来たらローカルな組織なら理想やね。

g000001 2008-09-25T03:45:20+09:00
あっちは、あんまり気合が入ってなくて、割とのんびりな感じなんですけど、

名無しさん 2008-09-25T03:45:28+09:00
うん。

g000001 2008-09-25T03:45:29+09:00
発表してるもののレベルは高いw

名無しさん 2008-09-25T03:46:08+09:00
濃いんやろな。

g000001 2008-09-25T03:46:21+09:00
そうなんでしょうねー。
Clojureの説明も濃いですもんね
2時間ですからw

名無しさん 2008-09-25T03:47:24+09:00
うん。いくつかプログラミングの組織のページを見たけど、緩いつながり?のところがおおいいんしょうやね。
ボスをおいてないっていうのか。。。

g000001 2008-09-25T03:48:03+09:00
なにげに層があついんでしょうね。

名無しさん 2008-09-25T03:48:15+09:00
うん
あ、こんな時間になったな。いつものごとく3時間睡眠なんですが、少し仮眠しますわ。

g000001 2008-09-25T03:49:48+09:00
はいー、お休みなさいまし :)

名無しさん 2008-09-25T03:49:51+09:00
またあそんでやってください。

g000001 2008-09-25T03:50:01+09:00
よろしくお願いします :)

shiro 2008-09-25T06:21:03+09:00
clojureの最大の特徴は、データ構造を基本的にimmutableにしてしまったことだと思います。
mutableのやつもあるけれど、基本的には実態がimmutableでそれを指すポインタがアトミックに切り替わる感じ。
そうすると、並列プログラムを書くのが劇的に楽になる。
これは、今後の言語にとってはわりと重要な要素なんじゃないかと思います。

g000001 2008-09-25T13:08:47+09:00
 なるほど、確かに、作者の講演ビデオでも真っ先にデータはimmutableなものと考えるといってました :)

名無しさん 2008-09-26T22:29:26+09:00
http://pub.cozmixng.org/~the-rwiki/rw-cgi.rb?cmd=view;name=RHG%C6%C9%BD%F1%B2%F1
前日になって書くことではないかもしれませんが、まぁ興味のある方はぜひ。
CLISP ごった煮を更新しました。引数をCLHSからもってきて8~9割程度埋めました。さようなら ARG0, ARG1 ...!!
BEFORE: (&OPTIONAL ARG0 ARG1 ARG2 ARG3)
AFTER: (&OPTIONAL INPUT-STREAM EOF-ERROR-P  EOF-VALUE RECURSIVE-P)
すげー
何の話か巻き戻して調べてました
http://www.lingr.com/room/common-lisp-jp/archives/2008/09/20#msg-47747292
ここらへんですね
そうか、間があいてるから説明しないと意味不明ですね。
CLISP のビルトイン関数は引数情報をあんまりもってないので、HyperSpecから後付けでつけました。
OPTIMIZE 指定で SPACE を 1 以下に指定すれば引数名を保持してくれます。
高くするとだんだん ARG0、さらにあげると &KEY ARG1 ... のようにどんどん情報が失われていきます。
で、組み込みの関数は最初っから無いので、そこらへんを改善しました。
全く理解していないのですけど、これってコア作るときのオプションがspace 1以上ってことなんですか?
2以上か
CLISPの組み込みオペレータはほとんどCで書かれていて、そもそもLISP的に利用できる見た目にやさしい引数情報がないのです(たぶん)。
ポリシー的に捨てているのかと思いました。
なんとなく納得です
まぁ、メモリの無駄というのもあるでしょう。ポジショナルパラメータがN個、オプショナルがN個、キーワード引数が~という情報しか取れない。
そこでHyperSpec から引数リストを取り出して、シンボルをキーにしたハッシュに入れといてまずそれを引くように改造して実現してます。
なるほど

g000001 2008-09-27T18:42:37+09:00

こんばんはー
今日もCL勉強会開催させて頂きます! お暇ならいかがでしょうか! 20:00〜開始
お題:今回は、CLのパーシステンスについてです。AllegroCacheについての解説もある予定です〜

名無しさん 2008-09-27T19:31:52+09:00
こんばんはー

g000001 2008-09-27T19:32:04+09:00
こんばんはー(*'-')

名無しさん 2008-09-27T19:32:27+09:00
本日はよろしくおねがいします。<(_ _)>

g000001 2008-09-27T19:32:50+09:00
こちらこそよろしくお願いします(*'-')
|テンプレート|
ハンドル:
活動場所:
自分内CL/Scheme割合:
勉強会でお題になったら良いなと思うネタ:
なんとなく質問してみたいこと:
こんな感じの自己紹介テンプレートを用意してますので、

名無しさん 2008-09-27T19:34:26+09:00
原稿を考えたのですが、allegrocacheってやはりCLOSなので、CLOSちょろacacheちょろなんですが、CLOSの方が多いかもしれませんが、大丈夫でしょうか。。。

g000001 2008-09-27T19:34:34+09:00
良かったら記入して貼ってみてください(*'-')
全然、大丈夫じゃないですかねw
HyperSpecに書いてあることは、基本OKということで(笑)

名無しさん 2008-09-27T19:35:26+09:00
こんばんは

g000001 2008-09-27T19:35:34+09:00
こんばんはー(*'-')

名無しさん 2008-09-27T19:35:48+09:00
よかったです。>g000001さん

g000001 2008-09-27T19:36:12+09:00
CLOSってデータのインスタンスを作成したりとかで必要になる、って感じなのですしょうか?(*'-')
s//でしょうか/

名無しさん 2008-09-27T19:36:41+09:00
今日の勉強会は、何か下準備というか用意しておく環境とかありますか?
acacheは、ほぼMOPの上に構築されているので。
私がやる部分は、franzのallegro common lispがインストールされていると、そのままサンプルを実行できると思います。

g000001 2008-09-27T19:37:29+09:00
多分、CLOSのdefclassと、make-instance位をちょっと調べておくと良いかもしれません、
という予測w

名無しさん 2008-09-27T19:38:03+09:00
CLOSの部分は、ansi対応の処理系ならaclじゃなくても動くと予測します。

g000001 2008-09-27T19:38:46+09:00
なるほど、なるほど > Allegro

名無しさん 2008-09-27T19:39:14+09:00
なので、acacheのサンプルの部分は、こんな感じなんだぁ、という風にながめていただくだけでも大丈夫だとは思います。

g000001 2008-09-27T19:39:33+09:00
なるほど(*'-') 期待アゲ!

名無しさん 2008-09-27T19:39:35+09:00
いい機会なのでこれからAllegroインストールしてみます
一番の心配は、今日がLingrが三回目ということです。。。
うまくコピペができるかどうか。

g000001 2008-09-27T19:41:05+09:00
たまに、コピペしたものが隠れて見えなかったりとかは
ありますね。

名無しさん 2008-09-27T19:41:24+09:00
何行くらいづつがいいかんじなんですか。

g000001 2008-09-27T19:41:25+09:00
でも、ほんとに偶になので、大丈夫だとは思います(*'-')
纏めて貼ると、水色になるんですけど、
その辺調整しつつという感じでしょうか。

名無しさん 2008-09-27T19:42:04+09:00
なるほど。。。

g000001 2008-09-27T19:42:09+09:00
コードを貼るときは、纏めた方が良いですね。

名無しさん 2008-09-27T19:42:24+09:00
りょうかいです。

g000001 2008-09-27T19:42:37+09:00
(defmethod restore-store :before ((store tutorial-store) &key until)
  (declare (ignore until))
  (setf (tutorial-store-counter store) 0))
これだとインデントとか壊れてると思うんですけど、
左下のview pasteを押すと復元されるので、
そういう所がまとめ貼りの便利なところです(*'-')

名無しさん 2008-09-27T19:43:39+09:00
おおお!!! そういうことだったのか!!! > lingr

g000001 2008-09-27T19:44:16+09:00
一行ずつ貼るとこういう感じにはならないので、
使い分けですね(*'-')

名無しさん 2008-09-27T19:47:15+09:00
この入力欄が小さくて、、、大きくすると、画面の外にいっちゃうんですが、safariの場合。他のブラウザは入力欄を普通に大きくできるのでしょうか。

g000001 2008-09-27T19:47:34+09:00
FireFoxでは大きくできないですねー。
面倒な場合、まとめて貼るのを基本にしても良いかもしれないですね(*'-')

名無しさん 2008-09-27T19:48:07+09:00
了解しました。あきらめます。

g000001 2008-09-27T19:49:34+09:00
一時AFKします(*'-')

名無しさん 2008-09-27T19:52:42+09:00
こんばんは
こんばんはー
超初心者ですけどよろしくおねいます

quek 2008-09-27T19:53:12+09:00
こんばんは、よろしくお願いします。

g000001 2008-09-27T19:53:59+09:00
よろしくお願いしますー

名無しさん 2008-09-27T19:54:39+09:00
いや、CL入門者の私がお話したりするので、こちらこそよろしくお願いしますなのです。(^ ^;) >tamamikeさん
おてやわらかにw

g000001 2008-09-27T19:59:12+09:00
akaさんは、@akaさんとは別人さんなんですか?(*'-')

名無しさん 2008-09-27T19:59:37+09:00
@akaさんってどなた?

g000001 2008-09-27T20:00:14+09:00
あ、やっぱり違う方なんですね。最近Shibuya.lispに参加された方で、@akaさんって方がいらっしゃるんですね(*'-')


名無しさん 2008-09-27T20:00:26+09:00
ああ、違いますです。

g000001 2008-09-27T20:00:37+09:00
ということで開始します
第18回

あらためまして、こんばんはー、では20時になりましたので、開始します。
今回のお題はCLのパーシステンスについてです!
今回は、akaさんの持ち込みのお題ということで、
最初は、どういう感じでしょう?
もうakaさんにお渡ししても良いのでしょうか?(*'-')

名無しさん 2008-09-27T20:02:03+09:00
パーシステンスの概念の整理 -> CLOSちょろ -> Acacheちょろという構成なんですが、この節目節目で
もう、やめとけや、か、
さきもやってみろや、
を決めていただく、という形でいかがでしょうか。

g000001 2008-09-27T20:02:46+09:00
なるほど、なるほど(*'-')
誰も止めないと思いますので、ガンガン行っちゃって下さいw

名無しさん 2008-09-27T20:03:25+09:00
いえいえ、、、ではパーシステンスの概念の整理からいっちゃいますね。

g000001 2008-09-27T20:03:31+09:00
はいー(*'-')
AchacheってApacheみたいですねw

名無しさん 2008-09-27T20:04:34+09:00
えっと、CL入門者のakaです。縁あって、acacheは多少つかったことがありますのでやらさせていただきます。まず、パーシステンスの概念の整理について。
あ、用意した原稿はですね。文章の部分はコメントになっています。
説明文章とlispのサンプルコードが混在することがあるので、その方が便利かな、と。

g000001 2008-09-27T20:05:22+09:00
了解ですー(*'-')
なるほど
なるほど

名無しさん 2008-09-27T20:06:25+09:00
;;;;テーマの整理

;;パーシステンス、をどう捉えるか、をまずやりたいと思います。

;; パーシステンス、というのは日本語では「永続性」ということなんですが、意味が広く、曖昧さもあり、また分野をまたがると定義に差異があったりします。
;; 本日用の捉え方をまとめましょう。
;; 現在の身の回りをみまわしたところで、次のことをパーシステンスの必要性の源泉と考えます。
;;
;; (P) 過去の情報も保持しておいて欲しい。それを利用したい。
;;


g000001 2008-09-27T20:07:03+09:00
おおお、素晴らしい

名無しさん 2008-09-27T20:07:21+09:00
;; これを実現するために、ハードウエア的な工夫(HDD,SD-RAM)やソフトウエア的な工夫(記憶階層、データベース、TPシステム、OSのハイバネーション)がいろいろあります。


g000001 2008-09-27T20:07:41+09:00
なるほど

名無しさん 2008-09-27T20:07:43+09:00
;; それぞれ技術の細分化が進んだ結果、これらそれぞれの領域にて、それぞれの観点で捉えて、取り組みが進んでいます。
;; また、場合によって連携して複雑に絡みあうこともあります。

;; 以上が、パーシステンス、という言葉の、私のお話での捉え方です。


g000001 2008-09-27T20:07:58+09:00
なるほど、▼なるほど

名無しさん 2008-09-27T20:08:06+09:00
;; もうひとつ、言葉を確認しておきましょう。トランザクション処理です。

;; トランザクション処理の目的というかテーマは、

;; (T) データの一貫性を保つ。一貫性を、並列処理含めた多様な状況にて、実現する。

;; ということです。
;; この御題目の文章だけでもパーシステンスと密接に関係がありそうな感じがします。

;; 以上でテーマの整理はおしまいです。


g000001 2008-09-27T20:08:48+09:00
なるほどー

名無しさん 2008-09-27T20:08:51+09:00
;; 続いて、言語の処理系にフォーカスしましょう。

;; 言語の処理系でまず第一の観点は、処理系自身にどこまでのパーシステンスをビルドインしているか、ということでしょう。

;; 最も強力なのはSmalltalkあたりかと。これは、処理系が自動的にメモリ上の状態のほとんどすべてをイメージファイルに書き込むようにできます。
;; 300msec周期とかで、メモリ上のオブジェクトの更新情報をHDDに書き込むのですね。

;; 最も弱いのはC言語あたりでしょうか。まあ、VMもないですから。言語または処理系としてはパーシステス機構はもっていません。
;; アプリケーションが独自に作りこむか、他の機構(DBなど)と通信するかなどでしょう。


g000001 2008-09-27T20:09:41+09:00
おおお
なるほどー

名無しさん 2008-09-27T20:10:05+09:00
;; Javaもそれ自体では、パーシステンス機構をもっていません。VMがあり、GCをしますが、アプリケーションの手当なしでは、プロセスを落せば、処理状態は全て消失します。
;; Javaは、いわゆるオブジェクト指向なので、データはオブジェクトであることが多いです。そして業務システムで使う場合は、パーシステンスとしてRDBを使うことが多いですね。すると、いわゆるO/Rマッパーを使います。Hibernateなどなど、ですね。

;; Rubyだと、Yamlを出力形式としたパーシステンス支援要素はありますが、これまた処理系としては対応していません。なので、基本はJavaといっしょですね。Railsだとかの場合は、ActiveRecordをO/Rマッパーフレームワークとして使っています。


g000001 2008-09-27T20:10:43+09:00
なるほど、わかりやすいです

名無しさん 2008-09-27T20:11:02+09:00
;; ただし、いわゆるO/Rインビーダンスミスマッチというのは、ちょっと複雑な業務が対象になると深刻です。
;; 関係モデルとオブジェクトモデル、というのはモデルの特性としてかなり差異があるからです。

;; さて、Common Lispです。
;; SmalltalkのイメージファイルのアイデアはLispから拝借したものですね。なので、CLもイメージファイルがあります。
;; ただし、Smalltalkとは違いがあります。

javaだとシリアライズクラスとかありませんでしたっけ?
それは、Rubyのyamlと一緒ですね。
それを使ってパーシステンスを実現できる、ということで、パーシステンス支援機能かと。

g000001 2008-09-27T20:12:28+09:00
なるほど、なるほど

名無しさん 2008-09-27T20:12:29+09:00
なるほど。
smalltalkの場合は、アプリがシリアライズを気にする必要すらない、勝手に環境がやってくれるので、ということです。
;; 例えば、Smalltalkの場合は、インスタンスもパーシステンスの対象としてくれますが、CLではそこまではケアしてくれません。
;; みなさんがCLのイメージをdumpなどして作成しているのがこれにあたります。素朴な意味での、静的な関数や変数の定義を対象としています。


g000001 2008-09-27T20:13:54+09:00
なるほど

名無しさん 2008-09-27T20:14:02+09:00
;; じゃあ、動的な情報のパーシステンスはどうするのか、というのの解答のひとつがAllegroCacheなんですね。
;; これはCommon LispのObjectをそこそこ素朴に永続化してくれます。
;; もうひとつの選択肢がRDBの利用です。ただ、これは、接続方式としてはODBCか、Direct Connectかということと、
;; その上で、O/Rマッパー的なものをやるかSQLをホスト言語上で抽象化するかどうかということだと思います。
;; CLでの面白みというのはこの抽象化の部分ですが、まあそれはパーシステンスにかぎらずの話題ですので今回は割愛しようと思います。

g000001 2008-09-27T20:14:59+09:00
なるほど、なるほど

名無しさん 2008-09-27T20:15:00+09:00
;; 言語の処理系におけるパーシステンスを鳥瞰しました。
;; この後は、Common Lispにフォーカスします。


g000001 2008-09-27T20:15:16+09:00
素晴らしいまとめ!

名無しさん 2008-09-27T20:15:25+09:00
という感じで、パーシステンスの概念の整理の部はおしまいです。
コピペのあらしですいません。もうやめとけって感じじゃないですか???

g000001 2008-09-27T20:16:03+09:00
いえいえー、素晴らしいです!
自分の適当なコピペとは段違いですw

名無しさん 2008-09-27T20:17:05+09:00
いえいえ、、、この部について、それ違うだろ、含めてディスカッションした方がよいですか。それとも先に進んじゃいますか。

g000001 2008-09-27T20:17:23+09:00
Smalltalkは
その感じだと、というか、イメージなので、関数も
永続化できるんだと思うんですが、
Acacheは、関数はどうなるんでしょう。
多分、関数を永続化って使わないと、思うんですけどw
できたら面白そうってだけなんですけどw

名無しさん 2008-09-27T20:18:46+09:00
まず、Smalltalkは確か関数ないです。というか全てオブジェクトです。if文すらオブジェクトだったような。やりすぎといわれてる所以かと。

g000001 2008-09-27T20:18:58+09:00
おお、なるほど、なるほど。

名無しさん 2008-09-27T20:19:17+09:00
なので、オブジェクトをパーシステンスする、でSmalltalkは概念的には完結してしまうのではと。

g000001 2008-09-27T20:19:31+09:00
なるほどー。そういうことなんですね。

名無しさん 2008-09-27T20:20:17+09:00
Acacheは、list formというかS式自体は格納できますが、関数データ系は格納できません。それは、Lisp imageの方にいれとけや、という整理だと思います。

g000001 2008-09-27T20:20:36+09:00
なるほどー、
ですよね(*'-')

名無しさん 2008-09-27T20:21:38+09:00
つっこみありましたら、どぞ>みなさん

g000001 2008-09-27T20:22:22+09:00
非常にわかりやすかったです(*'-')

名無しさん 2008-09-27T20:22:37+09:00
ありがとうです。> g000001さん
先に進んだほうがよいですかね? > g000001さん

g000001 2008-09-27T20:23:06+09:00
ですね、ガンガン行ってくださいw

名無しさん 2008-09-27T20:23:25+09:00
では、CLOSさわり、にいきます。
えっとですね、OOが嫌な私がCLOSの説明をするのはなんなんですが、

g000001 2008-09-27T20:24:11+09:00
嫌いなんですかw

名無しさん 2008-09-27T20:24:14+09:00
OO自体が嫌なのではなくて、なんでもOOで開発すべし、という人とソリがあわなかったというトラウマなだけなのです。

g000001 2008-09-27T20:24:22+09:00
なるほどー

名無しさん 2008-09-27T20:24:51+09:00
;;;;CLOSさわり

;; パーシステンスの「過去の情報にアクセスしたい」という考えは、「状態」という考えと関連性があります。
;; 状態を扱うならば、オブジェクト指向は悪くありません。
;; そこでCLにおけるOOということで、CLOSのさわりをやりましょう。
;; OOしかりCLOSしかり、能書きは山のようにあるのですが、ここでは割愛します!

g000001 2008-09-27T20:25:12+09:00
了解です(*'-')

名無しさん 2008-09-27T20:25:23+09:00
;; さっそく、クラスを作りましょう。

(defclass person ()
  ((gender :initform nil)
   (age :initform nil)))

;;このクラスのインスタンスの作成。
(setq hoge (make-instance 'person))

;;slotの設定はこんな感じ。
(setf (slot-value hoge 'age) 15)

;;slotをみる。
(slot-value hoge 'age)

;;中身をみてみる。
(describe hoge)

CLOSでのクラス作成はこんな感じです。
あとインスタンスも。

g000001 2008-09-27T20:26:35+09:00
ですね(*'-')

名無しさん 2008-09-27T20:26:50+09:00
;;子クラスをつくってみましょう。
(defclass student (person)
  ((grade :initform 1 :initarg :grade :accessor st-grade)))
;; :initarg と :accessor を使いました。
;; :initarg は、make-instance 時に初期値設定のため。
;; :accessor は、slot-valueを使わずに、ここで定義した関数名でslotアクセスを可能にします。

;; ためしてみましょう。
;; インスタンスを作る関数などつくってみたり。ここで :initargを使ってます。
(defun make-student (grade)
  (make-instance 'student :grade 2))

(setq hanako (make-student 3))
(setq taro (make-student 3))
継承、ですね。
describeは初めて知りました

g000001 2008-09-27T20:27:55+09:00
おおー、

名無しさん 2008-09-27T20:28:02+09:00
あと、クラス定義にまつわる名前付けがとても自由にできます。その分、面倒もあるので、そのあたりは工夫して、かと。

g000001 2008-09-27T20:28:03+09:00
結構便利ですよ、describe
なるほど、なるほど

名無しさん 2008-09-27T20:28:27+09:00
;; personクラスもマシにしましょう。
(defclass person ()
  ((gender :initform nil :initarg :gender :accessor p-gender)
   (age :initform nil :initarg :age :accessor p-age)))
;; classの動的な再定義ですね。
;; CLOSではかなりのものが、動的に再定義できます。
;; また、親classの再定義は、子classやインスタンスへと動的に伝搬していきます。

;; アクセサをつかってみる。
(setf (p-gender hanako) :f)
(setf (p-gender taro) :m)

;; 学級 クラスも作ってみましょう。
(defclass gakkyu ()
  ((name :initform nil :initarg :name :accessor c-name)
   (grade :initform nil :initarg :grade :accessor c-grade)
   (member :initform nil :initarg :member :accessor c-member)))

;; 先生クラスも作ります。
(defclass teacher (person)
  ((name :initform nil :initarg :name :accessor t-name)
   (classes :initform nil :initarg :classes :accessor t-classes)))

;; サクラ学級をつくります。
(setq sakura (make-instance 'gakkyu :name "sakura" :grade 3 :member '(hanako taro)))


g000001 2008-09-27T20:30:51+09:00
おおー、素晴らしい(*'-')

名無しさん 2008-09-27T20:30:53+09:00
CLOSのslotには、lispのオブジェクトならたいていなんでも入ります。あ、ここでのオブジェクトはCLOSのじゃなくて、Lispの内部のことです。なので、ここではlistをいれることができてます。
;; gradeをstudentにつけてましたが、これ、学級とだぶってます。
;;(defclass student (person)
;;  ((grade :initform 1 :initarg :grade :accessor st-grade)))
;; なので、studentからは外しましょう。かわりに特技(specialty)をいれときましょう。
(defclass student (person)
  ((specialty :initform 1 :initarg :specialty :accessor st-specialty)))
(describe hanako)

(setf (st-specialty hanako) 'drawing)
(setf (st-specialty taro) 'computing)

これ、describeするとわかりますが、
以前につくったものから、再定義によってslotはきえません。
あっても無害でしょう、ということと私的には理解しています。
あ、以前につくったオブジェクトということです。

g000001 2008-09-27T20:33:05+09:00
make-instanceして作成したオブジェクトってことですね(*'-')

名無しさん 2008-09-27T20:33:12+09:00
です。
;; 先生を作りましょうか。
(setq zetsubou (make-instance 'teacher :name "zetsubou" :classes '(sakura)))

;; さて、今まで、学校というドメインで語彙を作ってきました。
;; これ、違うドメインの語彙もあるし、この中で作ってきた実体としての人々はそういうドメインにまたがって情報処理対象となります。
;; すなわち多重継承の必要がある、ということです。
;; ここでは学校をドメインとしての主軸として、萌えの概念を加えることにしましょう。
(defclass moe-mixin ()
  ((category :initform 'sister)
   (years-of-experience :initform 0)))

;; 萌え付きの生徒という概念をつくります。
(defclass student-with-moe (student moe-mixin) ())

;; hanakoを萌え付きにかえるとかもできますね。

(change-class hanako 'student-with-moe)


g000001 2008-09-27T20:35:06+09:00
なるほど、なるほど

名無しさん 2008-09-27T20:35:10+09:00
;;;; メソッド
;; CLでは、メソッドはClass定義に含まれていません。またインスタンスにも従属していません。
;; 総称関数(generic function)というディスパッチャ機構が存在しますので、そこに定義を登録していけばOKです。

;; メソッドの定義がOO設計的にはかなり重要だと思います。そのネーミング含めてです。
;; しかし、ここではOO設計の確認ではなくて、CLOSのメソッドがどういう機構なの、というのが興味なので、それがわかりやすいような例にします。


;;; 総称関数を作りましょう。
(defgeneric sample-pri (person))

;; メソッドを登録しましょう。
(defmethod sample-pri ((p person))
  (format t "person~%"))
(sample-pri hanako)
(sample-pri zetsubou)

これ、実行すると、hanakoもzetsubouもpersonになるはずです。
person クラスの子クラスであるstudentとteacherのインスタンスなので。

g000001 2008-09-27T20:36:51+09:00
なるほど

名無しさん 2008-09-27T20:37:02+09:00
子クラス用にmethodを定義できます。
(defmethod sample-pri ((p student))
  (format t "student~%"))
(defmethod sample-pri ((p teacher))
  (format t "teacher~%"))
(sample-pri hanako)
(sample-pri zetsubou)

これでディスパッチの様子がわかると思います。

g000001 2008-09-27T20:37:47+09:00
なるほどー。

名無しさん 2008-09-27T20:37:56+09:00
;; 上書きとかディスパッチがおこなわれているのがわかります。
;; メソッドの登録時のlambda-listがディスパッチャのあり様への希望というか指定をしています。


g000001 2008-09-27T20:38:54+09:00
なるほど、なるほど

名無しさん 2008-09-27T20:38:58+09:00
さて、これだと親のメソッドを完全に上書きしてしまうのですが、親のメソッドをいかしながら処理を追加することもできます。
;; メソッドのbeforeとafter
(defgeneric sample-ba (person))

(defmethod sample-ba ((p person))
  (format t "person-primary~%"))
(defmethod sample-ba :before ((p person))
  (format t "person-before~%"))
(defmethod sample-ba :after ((p person))
  (format t "person-after~%"))
(sample-ba taro)

(defmethod sample-ba :before ((p student))
  (format t "student-before~%"))
(defmethod sample-ba :after ((p student))
  (format t "student-after~%"))
(sample-ba taro)
(sample-ba hanako)


g000001 2008-09-27T20:39:45+09:00
おおー、なるほどー。

名無しさん 2008-09-27T20:40:02+09:00
これ、実行してみると、beforeなメソットとafterなメソッドがロシア民芸人形のようにprimary methodの前後に展開されていることがわかります。
で、多重継承のうまみは、ここにもあります。
;;; 多重継承とmixin
(defmethod sample-ba :before ((m moe-mixin))
  (format t "moe-before~%"))
(defmethod sample-ba :after ((m moe-mixin))
  (format t "moe-after~%"))
(sample-ba taro)
(sample-ba hanako)

多重継承のときの入れ子の順序は、多重継承を定義したときのlambda-list上の左右順序によります。
動的に入れかえてみる。
(defclass student-with-moe (moe-mixin student) ())

(sample-ba hanako)

moeなメソッドが呼ばれる位置がかわったと思います。
以上でCLOSのさわり、おしまいです。

g000001 2008-09-27T20:42:34+09:00
おおー、こういう風に使うんですねー
自分は使い方はそっちのけで仕組みしか知らなかったので、勉強になりましたw
やっぱりOOの勉強は、別にちゃんとしないといけないんでしょうね(*'-')

名無しさん 2008-09-27T20:44:03+09:00
あ、それはPCLにあるとおり、必要です。
OOは実装よりも設計の方が難しいと思います。

g000001 2008-09-27T20:44:45+09:00
そんな感じですよねー.

名無しさん 2008-09-27T20:44:55+09:00
う、それはOOにかぎらずでもあるかな。
Class優先リストとか、補足した方がいいんでしょうか。

g000001 2008-09-27T20:45:47+09:00
自分は、ボトムアップからしか書けないので、OOが苦手なのかなw
いや、これ位がちょうど良いような気も(*'-')
準備されてるなら、全部どうぞ
もったいないのでw

名無しさん 2008-09-27T20:46:59+09:00
いえ、準備なしで、この場で書こうかと思っていたので、なしならなしで全然OKです。

g000001 2008-09-27T20:47:12+09:00
なるほど、なるほど

名無しさん 2008-09-27T20:47:24+09:00
では、AllegroCacheにいくということでよいでしょうか。

g000001 2008-09-27T20:47:41+09:00
ですね、優先リストの説明はちょっと面倒そうですし(*'-')
はいー(*'-')

名無しさん 2008-09-27T20:48:00+09:00
;;;; AllegroCache入門

;; なにはともあれ、requireしておきましょう。
;; 私の場合は、こんな感じです。
(require :acache "acache-2.1.5.fasl")
(defpackage :user (:use :db.allegrocache))

;; プログラミングする側の観点から言うと、AllegloCacheはMOPのMeta-objectであるということでかなりの部分がつきています。
;; meta-objectというのは、classだとかgeneric functionだとかmethodだとかclass precedense list だとか、そういうものの定義ですね。
;; MOPで実装されているCLOSならば、それらもプログラマが独自定義できます
;; allegrocacheの場合はこんな感じ。
(defclass foo ()
  ((next :initform nil)
   (val :initarg :val :accessor foo-val))
  (:metaclass persistent-class))

;; この:metaclass の部分です。今まではこの部分がdefaultのstandard-classになっていたという種明かしです。

;; persistent-classではindexをはることができます。
(defclass foo ()
  ((next :initform nil)
   (val :initarg :val :index :any))
  (:metaclass persistent-class))

;; DBをひらきましょう。
(open-file-database "testit"
		    :if-does-not-exist :create
		    :if-exists :supersede)

quek 2008-09-27T20:50:12+09:00
なるほど、:metaclass を使ってるんですね。

名無しさん 2008-09-27T20:50:22+09:00
です。>quekさん
なので、standard-class達とは別世界に済んでいます。
change-classとか相互にできません。

g000001 2008-09-27T20:50:55+09:00
なるほどー

名無しさん 2008-09-27T20:51:32+09:00
:metaclassを使う例をはじめて見ました
ただ、persistent-classの世界で、standard-classの世界的なことはほとんど実現してますので、
実用上は気になりません。

g000001 2008-09-27T20:52:24+09:00
みた感じは (:metaclass persistent-class)が追加されてるくらいで、他は同じに書けるって便利ですねー

名無しさん 2008-09-27T20:52:25+09:00
standard-classでプロトタイプをつくって、それがそのままpersistent-classにかえることができないことをしって、衝撃をうける、という人生に一回の出来事だと思います。

g000001 2008-09-27T20:52:43+09:00
被ったw
人生に一回の出来事が被ったw

名無しさん 2008-09-27T20:53:23+09:00
;; Objectの取り扱いはこんな感じです。
(make-instance 'foo :val 12345)

(retrieve-from-index 'foo 'val 12345)
(rollback)
(retrieve-from-index 'foo 'val 12345)
;; commitしないと、rollbackしてしまえば消失します。

一回目のretrieveは取れるんですが、二回目は失敗します。
indexでオブジェクトを参照できるので、シンボルをつけておく必要がない、というのが特徴的です。
すなわち、通常のGCの対象になっていません。
インスタンスを削除するときは、明示的にdeleteする必要があります。
(make-instance 'foo :val 123)
(make-instance 'foo :val 1234)
(make-instance 'foo :val 12345)
(commit)
(retrieve-from-index 'foo 'val 123)
(rollback)
(retrieve-from-index 'foo 'val 123)

commitすれば、rollbackにかかわらずとれます。永続化されており、このcommitした状態であれば、電源断してもDBをよみなおせばinstanceと取得できます。
;;; イテレーションするためのいくつかの機構があります。
;; 例えばdoclass。
(doclass (obj 'foo) (print obj))

;; 現在開いているDBはスペシャル変数に入ってます。
*allegrocache*

;; 閉じるには?
(close-database)


g000001 2008-09-27T20:57:12+09:00
おお、do-symbolsみたいですね。

名無しさん 2008-09-27T20:57:20+09:00
です。
ちょっと、この場打ちで補足を。
先程、GCに触れましたが、allegrocacheの場合、acache用のheap領域をどのくらいにするかを指定できます。
その範囲に入るオブジェクトはon memory、その範囲をobjectの総量がこえる場合は、仮想メモリ的にHDDが利用されます。

g000001 2008-09-27T20:59:19+09:00
なるほど

名無しさん 2008-09-27T20:59:44+09:00
すなわち、プログラマからは、それがon memoryにそもそもあったのか、それともdisk上にあったものがon memoryになったのか、仮想メモリ的にHDD上にあるものが使われているかは透過的でわかりません。
deleteし忘れるとHDDの残り容量がどんどん減っていくわけですねw
Yes。運用上の、無視できない課題です。> zick
すべてmemoryにあるがごとし、というのはプログラミングは楽なのですが、運用の設計は重要です。

g000001 2008-09-27T21:01:19+09:00
なるほどー、ためになる

名無しさん 2008-09-27T21:01:33+09:00
えっとですね。aclのexpress版をご利用になっている方はこのあたりで一度、:exitしてaclを立ち上げなおしたほうがいいかもしれません。
express版のaclはheap量が制限されていますので、このあとのサンプル時にheapエラーがでるかもでないかも、です。

g000001 2008-09-27T21:02:08+09:00
なるほどw

名無しさん 2008-09-27T21:02:39+09:00
次の説明は、カーソル機構です。
いわゆるRDBでよくある機構ですね。Sortアルゴリズムとか、stream I/Oとかにでてくる概念とも類似です。
Class定義が煩雑なのでdefclass*を紹介します。
;;; defclass*

;; defclass*はacache用のマクロです。
;; (defclass* foo () a b c) 
;;
;;(defclass foo nil 
;;  ((a :accessor a :initform nil :initarg :a) 
;;   (b :accessor b :initform nil :initarg :b) 
;;   (c :accessor c :initform nil :initarg :c)) 
;;  (:metaclass persistent-class)) 
;; と、タイプを省力化してくれます。デモなどで便利です。


g000001 2008-09-27T21:03:50+09:00
お、quekさんも好きな、defclass* (*'-')

名無しさん 2008-09-27T21:04:05+09:00
;;; カーソル機構
;; 
;; personを定義しましょう。defclass*を使います。
(require :acache "acache-2.1.5.fasl")
(defpackage :user (:use :db.allegrocache))
(defpackage :user (:use :db.allegrocache.utils))
(defclass* person (:defprinter t)
  (gender :index :any)
  (age :index :any))

:exitした方のために、requireとかを再度やってます。

quek 2008-09-27T21:04:28+09:00
defclass*はacache用のマクロだったんですか!!

名無しさん 2008-09-27T21:04:39+09:00
そです。>quekさん
このpersonのインスタンスを自動生成する関数。
;; サンプルデータを生成する関数を作成
(defun populate ()
  (create-file-database "people.db")
  (dotimes (i 10)
    (make-instance 'person
      :gender (aref '#(:m :f) (random 2))
      :age (random 15)))
  (commit)
  (close-database))
(populate)

今回は関数の中で、DBファイルの開閉をしています。
popuateの実行で10個のインスタンスができます。
それをカーソルをつかって、検索する関数。
(defun find-people (gender min-age limit-age) 
  (open-file-database "people.db") 
  (let ((cur (create-expression-cursor 
	      'person 
	      `(and (= gender ,gender) 
		    (:range age ,min-age ,limit-age))))) 
    (if* cur 
       then (loop (let ((obj (next-index-cursor cur))) 
		    (if* (null obj) 
		       then (free-index-cursor cur) 
			    (return)) 
		    (print obj)))) 
    (terpri) 
    (close-database) 
    :done)) 
ためす。
(find-people :m 10 15)
(find-people :f 10 15)
これ、10個が対象ではカーソルをつかう意味ないです。が、自動生成で、インスタンスを100万個つくってとか、そういうときには現実的なプログラミングとしてカーソルが必要になります。
最後に補足情報です。
;;; 扱えるタイプについて

;; CLOSオブジェクトだけじゃないです。defaultで対応しているものの一覧は次のとおりです。
;; symbol number string character cons vector object(clos) map(ac-map) set(ac-set)

;; encoded-objectというメソッドをかけば、structureもいけます。

g000001 2008-09-27T21:08:35+09:00
おおー、凄い

名無しさん 2008-09-27T21:09:23+09:00
ac-mapとac-setという、acacheで定義したmapとsetなデータ型があるのですが、これも手軽で便利です。
もひとつ。
;; 構成について

;; スタンドアローンではなく、Client-Server型もできます。
;; その場合TCP/IPソケット通信になります。

;; トランザクションに対応しているので、複数クライアント(例えばWebサーバ)からのリクエストにも対応可能です。

なので、Web serverをN台、AllegroCacheをM台おいて、N:Mで負荷分散かつ冗長化して運用とかできます。
以上で、AllegroCacheちょろ、おしまいです。
ご清澄ありがとうございました。m(_ _)m

g000001 2008-09-27T21:11:39+09:00
おー、素晴しかったです!!

名無しさん 2008-09-27T21:11:50+09:00
こりゃ便利そうですね

g000001 2008-09-27T21:12:09+09:00
これは、ハイクオリティ!!
akaさん素晴らしい!
AllegroCacheは現実的なお値段で入手できるんですか?(*'-')

quek 2008-09-27T21:12:53+09:00
おもしろかったです。

名無しさん 2008-09-27T21:13:01+09:00
ありがとうございます。おやくにたてたとしたら嬉しいです。>みなさん

g000001 2008-09-27T21:13:37+09:00
いや、これは素晴しい。
後でログを読んで詳しく勉強しようという感じです。

名無しさん 2008-09-27T21:14:10+09:00
へーっ。とおもった。gj
どもです。>yasさん
何か議論があれば、やりまして、なければ、他の処理系の状況とか知ることができたら、と思いますが。

quek 2008-09-27T21:15:28+09:00
電源断してから DB を読みなおすときは、やはり (defclass foo... してからじゃないと (retrieve-from-inedx 'foo... はできないのでしょうか?

名無しさん 2008-09-27T21:15:48+09:00
う、やったことないです。
imageにいれちゃってるのでdefclassするもの。
理論的にはできるはずです。
class定義をDB内にもってなす。

quek 2008-09-27T21:16:35+09:00
なるほど。

名無しさん 2008-09-27T21:16:46+09:00
後、触れませんでしたが恐しい機能があって、

quek 2008-09-27T21:17:05+09:00
おぉ、class 定義まで!

名無しさん 2008-09-27T21:17:23+09:00
acacheはclassの変更がやはり動的にできて、それに対して、objectの変更がlazyに実施されます。
なので、再定義されたobjectがretrieveなりなんなり参照されるときにclass定義変更にしたがって動的に変更されます。

g000001 2008-09-27T21:18:08+09:00
なるほどー。

quek 2008-09-27T21:18:21+09:00
AMOP で、どこまでも。すごいなぁ。

名無しさん 2008-09-27T21:18:23+09:00
class再定義がなされても、それ以降一度もアクセスされなければ、昔のままの私で寝てます。
なんかFranzの営業みたいですね、、、自分。実際は違いますが。

g000001 2008-09-27T21:19:26+09:00
いや、実際凄いんだと思います(*'-')
あと、値段ですよねw

名無しさん 2008-09-27T21:19:50+09:00
値段もすごいですね。

g000001 2008-09-27T21:20:04+09:00
これ普通に買ったら付いてくるんですか?

quek 2008-09-27T21:20:19+09:00
実業務だとしょっちゅう発生するスキーマの変更で大変な思いするんで、とても魅力的な機能です。> objectの変更がlazyに

名無しさん 2008-09-27T21:20:20+09:00
付いてきます。
そうなんですよ!!!!> quekさん
ハードの限界の関係で、64bitの方が全然有利(億単位のオブジェクトが取り扱えたはず)だとはおもいます。
64bit版。

g000001 2008-09-27T21:22:14+09:00
なるほどー。
他のOODB的なやつはAllegroCacheまで便利なものってないんでしょうか
まあ、ないんでしょうけどw

名無しさん 2008-09-27T21:23:28+09:00
CL的にはないですが、いくつかおもしろいものはあります。

quek 2008-09-27T21:23:43+09:00
Elephant http://common-lisp.net/project/elephant/ が、たぶん acache をめざしているんだと思います。

g000001 2008-09-27T21:23:59+09:00
なるほど、なるほど
cl-prevalence
とかも良く聞きますねー

名無しさん 2008-09-27T21:24:29+09:00
おお、いろいろあるんですね。

g000001 2008-09-27T21:24:37+09:00
あと、たまたま、なんですが、25日のlispvanで
BKNr Datastore
http://bc.tech.coop/blog/080926.html
ってのが紹介されてました(*'-')
これはprevalenceな感じらしいですが、自分は良く分かりませんでしたw
マルチスレッドの対応をがんばってるらしいですが、

名無しさん 2008-09-27T21:25:42+09:00
おお、これもおもしろそうですね。みてみます。

quek 2008-09-27T21:25:44+09:00
http://common-lisp.net/project/rucksack/ なんてのもあります。

g000001 2008-09-27T21:26:33+09:00
おお、なるほどー

名無しさん 2008-09-27T21:26:39+09:00
マルチスレッドはCLでは大変ですね。。。

g000001 2008-09-27T21:27:05+09:00
BKNr Datastoreも、マルチスレッドの基盤が
確定してないので、苦戦中らしいです
AllegroCacheはその辺はばんばんスケールしそうですね
マルチスレッドの基盤というか、トランザクションでのアトミックな操作が問題らしいです。

名無しさん 2008-09-27T21:28:23+09:00
シングルコアという意味ではスケールします。シングルコア、マルチスレッドは良好です。
ただし、Allegro Common Lispが、というかCommon Lispの処理系自体が、マルチコアに本当の意味で対応していないので、マルチコアスケールはしません。
たぶん、真にマルチコアスケールした処理系ができるかできないかが、CLの是非をきめると予測しているのですが。

g000001 2008-09-27T21:29:50+09:00
なるほどー。

名無しさん 2008-09-27T21:30:05+09:00
ああ、なるほどです。その部分でしたら、acacheは解決済みですね>g000001さん

g000001 2008-09-27T21:31:23+09:00
なるほど、なるほど

名無しさん 2008-09-27T21:32:26+09:00
SchemeだとKahuaで少しパーシステンスやってたような、S式パーシステンス。

g000001 2008-09-27T21:33:32+09:00
なるほど、
パーシステンスも興味ぶかい話題なんですねー
BKNr Datastoreのビデオの後半で、マルチスレッドとかスケールとかそういう問題点が
色々議論されてて、やっぱりakaさんと同じようなこと言ってました

quek 2008-09-27T21:35:13+09:00
Kahua は dbi(?) が定義してあって、バックエンドをファイルとか RDBMS とか選べたように思います。

名無しさん 2008-09-27T21:35:58+09:00
あれ、ですね、ファイルにS式かくか、RDBのフィールドにS式いれるか、というだけの違いだったはず。><

quek 2008-09-27T21:36:30+09:00
すみません、わたしもあまり詳しくないのでw
クライアントサーバ構成をとれるってのもいいですね。> Web serverをN台、AllegroCacheをM台おいて、N:Mで負荷分散かつ冗長化して運用
レプリケーションみたな機能もあるのでしょうか?

名無しさん 2008-09-27T21:37:51+09:00
レプリケーションはビルトインはないので、アプリ側で組む必要があります。
ただし、コールドスタンバイでよければ、アーカイブログ的なものをB系に移送すれば簡単に実現はできます。
ホットな場合は、memcache的なものをアプリ側で用意、となります。たいして難しくはないです。> quekさん

quek 2008-09-27T21:39:02+09:00
なるほど。

名無しさん 2008-09-27T21:40:01+09:00
う、すいません、トイレなんぞにいってきます。

g000001 2008-09-27T21:40:07+09:00
はいー(*'-')
いやー、akaさん素晴しい!
しかし、業務で、AllegroCacheをちゃんと使うとなると、どんな金額になるんでしょうねー。
そればっかりですがw
今回onjoさんがいらっしゃれば、
さらに盛り上がりが期待できたんですが、残念ですねー

quek 2008-09-27T21:44:37+09:00
ほんと、いくらぐらになるんでしょうw?

g000001 2008-09-27T21:44:59+09:00
ORACLEより安いってことはなさそうですよねw

quek 2008-09-27T21:45:21+09:00
ACL を使っている方は aka さん onjo さん以外にもいらしたでしょうか?
どうなんでしょう? Oracle も結構いい値段がしたような気が。。。

g000001 2008-09-27T21:46:15+09:00
今日はいらっしゃらないですけど、ddk50さんとかもAllegro持ってるという話を伺ったことが
ありますね。

quek 2008-09-27T21:46:53+09:00
あ、そういえば > ddk50 さん

g000001 2008-09-27T21:47:08+09:00
個人ユーザは、なかなか気合いがはいってないとですねーw

quek 2008-09-27T21:47:48+09:00
宝くじでも当たらないと無理ですねーw

名無しさん 2008-09-27T21:48:20+09:00
もどりました。oracleよりは安いかな???
Oracleのライセンス体系、最近のがわからないので、なんともいえませんが。

g000001 2008-09-27T21:49:18+09:00
Oracleも高いので有名ですが、それより高いのかと思いましたw

quek 2008-09-27T21:49:45+09:00
おぉ、それなら値段的には問題ないw あとは、Lisp が受け入れらるか?

g000001 2008-09-27T21:50:28+09:00
ですねー。あと、OODBって流行ってないんですか?
プログラマからみるとOODBの方がおぼえることが少なそうなんですけれども…。

名無しさん 2008-09-27T21:51:18+09:00
ノウハウがかたまっていないので、パフォーマンスチューニングにスキルが必要なのだと思います。

g000001 2008-09-27T21:51:25+09:00
運用が面倒とか?
なるほど、なるほど

名無しさん 2008-09-27T21:52:09+09:00
RDBは枯れているので、それが、見込めるのと、スキル無くてもそこそこ使えるので。なので、Commo Lispでプログラミングされている方なら、ODBは難しくないと思います。
Common LispとJavaの言語的な意味での関係と同じだと思ってます。ODBとRDB。

g000001 2008-09-27T21:53:07+09:00
なるほどー。
自分の場合は、単にSQLが分からないという問題なんですがw
おお、そうなんですかー。

名無しさん 2008-09-27T21:54:45+09:00
「使いこなせれば楽だし強力」 vs 「誰でもちょっとやればそこそこできますでもできる人には面倒/窮屈」

g000001 2008-09-27T21:55:09+09:00
なるほどー。
自分は、CLに対しても「誰でもちょっとやればそこそこできます」な印象を持っているのですが、
そうでもないんですかねw
ピンキリですけどw
JAVAとかの方が絶対難しいと思うんですけどねー。
以上、まったくの印象論で、すいませんw
業務でやると、まったく違った感じになるのでしょうね(*'-')

名無しさん 2008-09-27T21:58:29+09:00
Javaの場合ですね、上流工程で、要求抽出->要求仕様->OO設計がなされてしまって、プログラマはそれにしたがってcodingするだけという色合いが強いのです。

g000001 2008-09-27T21:58:56+09:00
なるほど、なるほど。

名無しさん 2008-09-27T21:59:40+09:00
なので、上流は難しいのですが、プログラマがあまり頭を使わなくなってしまう、というのが業務システムの世界だったりします。そしてその方が、蟹工船じゃないですが、安い賃金でコーダーを大量調達できるというSIerの目論見があり、、、ひどい世界です。

g000001 2008-09-27T22:00:12+09:00
なるほどー。
趣味でプログラムする人が割と珍しいってのも、
そういうところなんでしょうか。

名無しさん 2008-09-27T22:01:51+09:00
JavaとかOOじゃ、あまりおもしろくないですよね。趣味プログラマとしてみると、たぶん。

g000001 2008-09-27T22:03:15+09:00
なるほどー。
話はいきなり変わるのですが、
akaさんは、こんな感じで、
ネタ披露な感じで、何回が、やってみても良いよみたいな
ことってあるでしょうか(*'-')
これからは、30分枠で、皆さんからネタ&進行役募集!という感じにしようかと
思っているのですが、
良かったら是非、みたいな。
そして、皆さんも是非みたいなw

名無しさん 2008-09-27T22:05:29+09:00
たまに、でしたら私は大丈夫です。
まだCL入門中なので、もう少し進むと、もっとお役に立てるようになると思うのですが。

g000001 2008-09-27T22:06:38+09:00
いやいや、入門中なんてw

名無しさん 2008-09-27T22:06:52+09:00
とてもや入門者には見えない。

g000001 2008-09-27T22:07:11+09:00
これが入門ならこの先どこに行くのですかw

名無しさん 2008-09-27T22:07:12+09:00
他の言語の経験が豊富なのかと想像する。

g000001 2008-09-27T22:07:31+09:00
ですねー(*'-')

名無しさん 2008-09-27T22:07:54+09:00
いや、違うのです。私は上流側なんです。それで自分でプログラミングしたくなって勉強しているのです。

g000001 2008-09-27T22:08:25+09:00
なるほど、なるほど
ひっぱって行く責任があるんですね
それも大変そうですよね
やっぱりバックグラウンドが大事だなーと
思いました。

名無しさん 2008-09-27T22:10:25+09:00
分析と設計が中心です。なので情報システム(業務システム)自体については詳しいと思います。でもどこまで自分でプログラミングできますか、というとまだまだこれからです。やっぱり自分で作りたい!! という思いがあります。
で、作るなら、OOとJavaは嫌! CLがいい! と。

g000001 2008-09-27T22:11:13+09:00
なるほどー。
CLはAllegroとか以外は
業務で使うには色んな問題がありそうですねw
海外だと割とSBCLとか、Clozureとか使われつつあるみたいなんですけども

名無しさん 2008-09-27T22:13:02+09:00
Lispworksとかもどうなんですかね?

g000001 2008-09-27T22:13:14+09:00
Lispworksも良さそうですね(*'-')
ただ日本の代理店がないので、Allegroみたいには
行かない気もしますね。

名無しさん 2008-09-27T22:13:43+09:00
なるほどです。

g000001 2008-09-27T22:13:54+09:00
ちなみに憶測ですけどもw
すいませんw
そうなると、Allegro高いとか、いう次元じゃないわけですねー。
なるほどー。
業務でサポート付きで使うとなると、妥当な金額なんでしょうね。

名無しさん 2008-09-27T22:17:48+09:00
あ、サポートなしでも大丈夫だと思いますよ。スキルの問題だと思います。>業務システム

g000001 2008-09-27T22:18:14+09:00
なるほど、なるほど。
あ、あとこの勉強会で使っているMLがあるのですが、
http://groups.google.co.jp/group/caddr

名無しさん 2008-09-27T22:18:45+09:00
例えば、業務システムに、Redhatしかつかえないか、Debianがつかえるかはスキルの問題です。

g000001 2008-09-27T22:18:47+09:00
告知とか相談とかに使っていただければ、みたいなところがあります。
なるほどー > Debian

名無しさん 2008-09-27T22:20:18+09:00
おお、知りませんでした。ありがとうございます。> ML

g000001 2008-09-27T22:20:45+09:00
勉強会の告知くらいしか流れてないんですけども、良かったらw
さて、来週は何をやろうかなみたいな感じなんですがw
自分としては、Let Over Lambdaの読解でもやってみようかしら、
みたいなことも考えてるんですけど、
Let Over Lambdaは受けないでしょうかw
割とポール・グレアムみたいに煽りが多くて面白いと思うんですけども、
なんて。
4章まで公開されてるんですけど、
割とマクロについての基本的なところの解説とかで、
そんなに難しいわけでもないかなーみたいな。
変態的なところはありますけどw

名無しさん 2008-09-27T22:24:21+09:00
私は読んだことがないこともあり、興味ありです。

g000001 2008-09-27T22:25:10+09:00
http://letoverlambda.com/index.cl/toc
で、全体の1/3が読めるという太っ腹です
そういえば、Let Over Lambdaのマクロだと思ってたんですが、
with-car/cdrってquekさん作のマクロですか?(*'-')
(with-car/cdr list ... (list car cdr))みたいな
感じで、アナフォリックマクロ的な感じで、carとcdrが参照できるという
ものなのですが、
自分も真似して、アナフォリックdestructuring-bindとか作ってみようかと
思いましたが、面倒なので放置していますw
という感じで、ございますが、
私、今日は3時起きなので、そろそろ眠気の限界に近付いておりまして、
このあたりで落ちようかと思いますw

quek 2008-09-27T22:33:13+09:00
ごめんなさい。席はずしてました。with-car/cdr は私がかってに作ったものです。

g000001 2008-09-27T22:33:23+09:00
あ、やっぱりそうなんですかw
Let Over Lambdaのマクロかと思いましたw
Let Over Lambdaのソースを探してもなかったので、これは、quekさん作かとw

quek 2008-09-27T22:34:12+09:00
car を変数名と使える Lisp2 を、との思いで。

g000001 2008-09-27T22:34:38+09:00
ですよねー。あれは、lisp2的で自分も好きなんですよね。

quek 2008-09-27T22:35:16+09:00
私も明日は仕事なので、そろそろ落ちます。g000001 まだ冬眠にはすこしはやすぎませんか?w

g000001 2008-09-27T22:35:37+09:00
いや、体質ですねw
毎日、眠くて仕方ないというw
おつかれさまでしたー > quekさん
ではでは、私も落ちたいと思います(*'-')

名無しさん 2008-09-27T22:36:57+09:00
おつかれさまでしたー

g000001 2008-09-27T22:37:03+09:00
どうか、30分枠のネタ参加をご検討頂ければと思いますー > 皆様

quek 2008-09-27T22:37:05+09:00
おつかれさまです。特に aka さん。ありがとうございました。

名無しさん 2008-09-27T22:37:20+09:00
私もそろそろ落ちます。みなさん、ありがとうございました。

g000001 2008-09-27T22:37:35+09:00
ではではー(*'-')ノシ

名無しさん 2008-09-27T22:37:50+09:00
おつかれさまです

g000001 2008-09-27T22:37:51+09:00
といっても自分は、アイコンの表示はこのままですw
今日は面白かったので、是非ログを観てみてくださいー > koshさん

名無しさん 2008-09-27T22:41:32+09:00
ありがとうございますー>g000001さん。ログはチラ見したんですが、CLOSを触ったことの無い自分には呪文のようでしたorz
これからちょっとづづ勉強していこうかな
あり…終わってる…

leque 2008-09-27T23:45:27+09:00
oops, 忘れてた

名無しさん 2008-09-27T23:59:30+09:00
とりあえず、zickさんには過去ログをさかのぼってsnmstsさんのスペシャル関数添削の件を見てほしい
と言っておきましょうか。見てなければ、ですが…
遅かったか…
こんばんは~?
おばんです。
ちょっと遅れるかな~とおもったらとんでもなく遅れてしまった…
AllegroCache 以外を考えてたんんですがw
おお! 何ネタですか?
SAVE-IMAGE -> PRINT & READ -> CL-STORE -> CL-PREVALENCE -> RDB!!
内容的に aka さんの前的な話ですかね。
なるほどです。このprevalenceというのを実ははじめて今日知ったのですが、どんな系統のものでしょうか。
Java方面で考案された技法ですね。ODB系統?
http://lispuser.net/memo/lisp/2006-04-26-03-02.html
まぁデータベースに分類するのも微妙ですが
ざっと読みました! おもしろそうですね。
ただ『マルチスレッドシステムでは,トランザクションはグローバルにシリアライズされます』がちょときついですね。
割り切ったテクノロジーは結構好きです。
適材適所でいきるものは、ハマるとめっちゃ便利ですよね。
布石としてごった煮に仕込んでおいたんだけどなぁ
g000001さんに来週のネタとして押してみるのはいかがですか、私もお話きいてみたいです。
そうですね。来週の30分枠に手を上げておこうかな。
Common Lisp 永続化入門 ~復活の呪文から冒険の書まで~
ドラクエみたいな煽り文句ですねw
ダースベーダー誕生までですね。episode1〜IIIくらい。
冗談ですが
とかフォローしても世代がバレるか
ここ、chattersがたくさんいるんですが、みなさん、中の人はおやすみ状態って感じなんですかね???
時間帯的にそうでしょう
なるほどです。
onjoさんがいる間にCLISPごった煮の質問をば
なんでしょう
更新されたごった煮を使ってみたんですが、SLIMEの立ち上げ途中でエラーが起こったみたいです
;; Error while loading: C:\home\onjo\.slime\fasl\2008-08-14\clisp-2.46-windows-x86\contrib\swank-c-p-c.fas
;; Condition: nonexistent directory: #P"C:\\home\\onjo\\local\\site-lisp\\slime\\contrib\\"
;; 
;; Aborting.
;; 
なぜかonjoさんフォルダが作成されている!
あれれ
自前の CLISP 初期化とか SLIME 環境とかあったりします?
SLIME使うのはごった煮が初めてです。
;;; inferior-lisp-mode
(setq inferior-lisp-program
      ;"C:/usr/local/clisp-2.44/clisp.exe"
      "c:/usr/local/clisp-2.46-full/bin/clisp.exe"
      )

;;; CLISPごった煮
(setq clisp-directory "c:/usr/local/clisp-2.46-full"
      slime-directory (concat clisp-directory "/lib/slime"))
(pushnew slime-directory load-path)
(require 'slime)
(setq slime-net-coding-system 'utf-8-unix)
;; (setq slime-net-coding-system 'euc-jp-unix
(slime-setup)

(require 'hyperspec)
REPL.exe で REPL を起動して (load ".slime.lisp") ってやると SWANK が起動しますんで、
bin/clisp.exeの中にも"onjo"の単語を含むパス名がちらほら見えました。
はい、私のマシンでビルドしてますんでパスは残っちゃうんですが
REPL から (load ".slime.lisp") で SLIME 再ロードしなくても動くはずなんですがねぇ?
で、evaluating ... あ、しまったこれだと CLISP プロセスに割り込む方法がないw SLIME で繋いで QUIT するかタスクマネージャから tclkit -> clisp の順に終了するしか
こっちもREPLで固まってました
それ SWANK が待ちうけ状態です
その状態で Emacs 側から slime-connect するとつながりますよ。
ただし ABLE 側がエラーを捕まえちゃうので一度でもエラーがおきると ABLE に復帰しちゃいますが
どうやらうまく動いたみたいです>slime-connect
なんで Emacs から起動すると SWANK をロードしなおそうとするんだろうな~
フム。とりあえずは、bin\clisp.exe を起動して、
(ext:cd "..")
(load ".slime.lisp")
してから Emacs 側で M-x slime-connect …
あとは (plot:plot '(1 2 3 4 5)) とか (clsql:connect '(":memory:") :database-type :sqlite3)
が動けば FFI も機能してます
ありがとうございます。
REPL からだと起動して bin\clisp.exe のやり方がエラーだとすると、 $HOME あたりの環境変数で設定されてる場所に SLIME をロードするような何らかの初期化ファイルがあるのかもしれませんが、
ちなみに本家CLISPのバイナリとSLIMEではエラーらしいものは起こりませんでした。
(setq inferior-lisp-program
      "C:/usr/local/clisp-2.44/clisp.exe"
      ;;"c:/usr/local/clisp-2.46-full/bin/clisp.exe"
      )
~/.clisprc yaで swank ロードしたりしてません?
No such file or directory: ~/.clisprc
うお$HOME/.slime忘れてた
asdf:load-op もしくは swank-loader::init がどっかから呼ばれて再度ロードしようとする→しかし私の環境でビルドしちゃってるのでエラー かな
あ、 ~/.slime か…
初期化ファイルとかを読まないように手を入れたほうがいいのかな~
あれ?~/.slime消してもごった煮でエラーになる…
やっぱり SWANK ロードにいっちゃいます?
[1]> 
;;  Loading file C:\usr\local\clisp-2.46-full\lib\slime\swank-loader.lisp ...
;;  Loaded file C:\usr\local\clisp-2.46-full\lib\slime\swank-loader.lisp
WARNING: Not reloading SWANK. Package already exists.
WARNING: These Swank interfaces are unimplemented:
         (ACTIVATE-STEPPING ADD-FD-HANDLER ADD-SIGIO-HANDLER ALL-THREADS
         CALLS-WHO
         DISASSEMBLE-FRAME FIND-SOURCE-LOCATION FIND-THREAD INTERRUPT-THREAD
         RECEIVE
         REMOVE-FD-HANDLERS REMOVE-SIGIO-HANDLERS SEND SLDB-BREAK-AT-START
         SLDB-BREAK-ON-RETURN SLDB-STEP-INTO SLDB-STEP-NEXT SLDB-STEP-OUT
         SPAWN
         THREAD-ID TOGGLE-TRACE WHO-MACROEXPANDS WHO-SPECIALIZES)
みたいですね
むむ、swank-loader.lisp 自体読む必要ないんだけどなぁ
どこが呼び出してるんだろう。添付の .slime.lisp では
(load (merge-pathnames "lib/init.lisp" *load-pathname*))
(write-line "Start SWANK Server ...")
(swank::create-server :port 4005)
しかしないので、Loading file ... swank-loader.lisp 自体でないのが正解なんだけれど
ここに残すようなログでは無いみたいなので、後のことはメールにしましょうか?
そうですね。そんでは http://lispuser.net/ のメールアドレスへ…(気持ちSPAM避け)
一番下のほうに画像でメールアドレスがあります
というか、README に連絡先がない。ひどいな~。
アドレス見つけました。では件名には「CLISPごった煮の件」みたいな事を書いておきます
お待ちしております
あと、話の腰を折ってしまってすいませんでした>akaさん
ああ、気にしないでくださいませ。私、目がさめちゃったので、写経しながらだったんです。すいません。。。
では、そろそろ再度落ちます。おやすみなさいー>onjoさん,koshさん
おやすみなさいー
おやすみなさいー。自分も寝よう…

g000001 2008-09-28T13:49:37+09:00
こんにちはー(*'-')
Common Lisp 永続化入門 〜復活の呪文から冒険の書まで〜
SAVE-IMAGE -> PRINT & READ -> CL-STORE -> CL-PREVALENCE -> RDB!!
これは良い! > onjoさん
決定です(笑)
これ30分ってのは時間的にきついので1時間枠じゃどうでしょうねー。
ここだとログが流れるかもしれないので、MLにもメール投げときますね(*'-')

名無しさん 2008-09-28T23:58:12+09:00
http://www.ospn.jp/osc2008-fall/modules/eguide/event.php?eid=46
g000001さん、こちらなんていかがでしょう?
 2008-10-04 (土)   勉強会大集合(2コマ連続)
担当者 risa  登録日時 2008-09-09 17:08 (642 ヒット)

日本全国津々浦々日々開催されている数多の勉強会の主催者に集合していただきます。

ここでは勉強会開催の楽しみ喜び、自慢話、開催の苦労などなど、なんでもありのお話をいただき、勉強会開催の
敷居をさげ、もっともっと楽しい素敵な勉強会が増えることを願って、LTとパネルディスカッションをします。


開始時間 13時00分
私は行けそうにないのでちょっと泣きそうです。。。
では、おやすみなさい。

g000001 2008-09-29T09:34:46+09:00
おおー、こういうのがあるんですね。
自分は勉強会そのものに興味はあまりないので
見送りかなという感じですw
勉強会の開催自体はここはオンラインってこともありますし楽ですね。
あと勉強会開催の敷居については、もうさがり切っている気もしますw

名無しさん 2008-09-30T00:23:35+09:00
こんばんわ

g000001 2008-09-30T11:15:45+09:00
こんにちはー
(provide 'ネタ)
Clojureの講演ビデオが増えました
http://clojure.blogspot.com/2008/10/clojure-at-boston-lisp-meeting-videos.html
Lispプログラマ向けとJavaプログラマ向けの2本というのが面白い(*'-')

名無しさん 2008-10-03T00:23:49+09:00
こんばんはー 週末の勉強会で永続化入門やります。
30分枠かなぁ。
SBCL 1.0.21 がリリースされてる。News - Steel Bank Common Lisp
http://www.sbcl.org/news.html#1.0.21

g000001 2008-10-03T12:39:01+09:00
おお、そういえば、恒例の月末リリースでしたね > SBCL
 勉強会お題提供ありがとうございます! > onjoさん
今週でも来週でもいつでもOKですが、今週末にしておきますか?

名無しさん 2008-10-03T20:07:26+09:00
Lispスレの多倍長演算の件。
結果が気になったので追試してみようと思ったら、入っているJDKがlibgcjだった。
SunのJDK入れるのも面倒なので放置することに。
とりあえずgcjは遅いということが分かった。
64bit環境ならfixnumに収まるのかなぁ
bit数的には収まりそうですけど、どうなんでしょう。
手元の環境にもJDKがなかった
あー64bit環境だと most-positive-fixnum は2^48-1だとImpnoteに書いてありますね
LOLの1~4って30分でいけますかね?

g000001 2008-10-04T00:35:11+09:00
こんばんはー(*'-')
1-4全部は、無理だと思いますw
続きものにしようかな、なんて考えてます(*'-')
恐らく、30分だと、2か3の最初位までで終了ではないかと。

名無しさん 2008-10-04T00:38:09+09:00
んじゃその後30分かなぁ~

g000001 2008-10-04T00:38:24+09:00
なるほど、なるほど。
宣伝がちょっと足りない気もするので、来週でもOKですよw
まあ、告知確認して集まってる人がどれだけいるのかは、疑問ですがw

名無しさん 2008-10-04T00:41:38+09:00
じゃあ来週にしようかな~。これからスライドを作ろうかと起きてるんですが。

g000001 2008-10-04T00:42:01+09:00
おお!、なるほど。
来週でも全然OKだと思います!
30分ってことにしてますが、
特にこだわりはないので、
90分でも、60分でもお好きなようにという感じです(*'-')
 30分なら、やってみようかなーという人を集めたいというのもあっての短縮でもありますので。

名無しさん 2008-10-04T00:47:56+09:00
入門な内容があるといいかな~と思ってまして

g000001 2008-10-04T00:49:22+09:00
なるほど、なるほど

名無しさん 2008-10-04T00:53:50+09:00
でも機能は Clojure の紹介をみていて終わってしまった

g000001 2008-10-04T00:54:21+09:00

 CLerにとっては、SchemeよりClojureの方が好まれるような気もしてるんですが、どんな感じでしょう。

名無しさん 2008-10-04T00:55:52+09:00
Java 資産が使えるのはよさそうだよなぁ

g000001 2008-10-04T00:56:19+09:00
ですねー。
 Clojureのサイトには、Excelの表からデータ抜き出したりする例もあったりして、割と身近に使えるんじゃないかなーとか思ったりもします。

名無しさん 2008-10-04T00:57:31+09:00
ClojureはCLの親戚です(名前的に)とか宣伝してしまうとか。

g000001 2008-10-04T00:58:02+09:00
パッケージとか、ダイナミックな変数があったりとか、
似た感じの関数があったりとか、
親近感はありますねー。
Schemeよりは、CLに近いんじゃないかとは思いますw

名無しさん 2008-10-04T01:00:24+09:00
java.util.concurrent とかいいなぁ

g000001 2008-10-04T01:00:37+09:00
なんとなくArcの方が、Schemeっぽく感じましたね、そういえば。

名無しさん 2008-10-04T01:00:43+09:00
でも見た目に馴染めてないのでまだ暗号にしか見えないけど
やっぱり動かしてみないとなぁ

g000001 2008-10-04T01:01:14+09:00
SLIMEとかあるので、割と便利に開発はできるかと(*'-')

名無しさん 2008-10-04T01:05:24+09:00
セットアップしようかなぁ
とりあえず今日は寝ます。おやすみなさい~

g000001 2008-10-04T01:05:47+09:00
はいー、お休みなさいましー(*'-')

名無しさん 2008-10-04T01:31:59+09:00
よくよく調べたらSunのJDK入ってたので、調べてみました。
$ /usr/lib/jvm/java-6-sun-1.6.0.07/bin/javac Speed.java
$ /usr/lib/jvm/java-6-sun-1.6.0.07/bin/java Speed
49999995000000
2875
$ ./speed.lisp

49999995000000
Real time: 5.318955 sec.
Run time: 5.152322 sec.
Space: 159907640 Bytes
GC: 203, GC time: 1.760116 sec.
$ uname -a
Linux debian 2.6.26-1-686 #1 SMP Thu Aug 28 12:00:54 UTC 2008 i686 GNU/Linux
$ cat speed.lisp
#!/usr/bin/clisp
(defun speed-test (times)
  (do ((i 0 (1+ i))
       (sum 0 (+ sum i)))
      ((= i times) (print sum))))
(compile 'speed-test)
(time (speed-test 10000000))
$ cat Speed.java
import java.math.BigInteger;

public class Speed {

    public static void main(String[] args) {
        long t = System.currentTimeMillis();
        BigInteger sum = BigInteger.ZERO;
        for (long i = 0; i < 10000000; ++i) {
            sum = sum.add(BigInteger.valueOf(i));
        }
        System.out.println(sum);
        System.out.println(System.currentTimeMillis() - t);
    }
}
ちなみにclispのバージョンは2.44.1なのでJITが入る前ですね。最新の2.46ならもう少し速くなっているかも。

g000001 2008-10-04T01:42:40+09:00
うちだとこんな感じでした。うちだとこんな感じでした。
あれ、2回w
./speed.lisp
49999995000000
Real time: 0.835228 sec.
Run time: 0.832052 sec.
Space: 440 Bytes
;---
/usr/lib/jvm/java-6-sun/bin/java Speed
49999995000000
1333
;---
uname -a
Linux prog 2.6.24-16-generic #1 SMP Thu Apr 10 12:47:45 UTC 2008 x86_64 GNU/Linux
2.46です。

名無しさん 2008-10-04T01:44:00+09:00
fixnumで計算できてますね
そうなるとわざわざ多倍長整数で計算しているJavaの方が不利です。

g000001 2008-10-04T01:45:31+09:00
 自分は話の流れをおっかけられてないのですが、64bit有利ってことですか(*'-')

名無しさん 2008-10-04T01:45:54+09:00
ですね。

g000001 2008-10-04T01:46:41+09:00
そういえば、JITって付けてたんだったか忘れてしまいましたw
x86_64は、lightning対象外だったかな?

名無しさん 2008-10-04T01:50:45+09:00
余談ですけど、遅いと言っていたgcjの結果。
$ java Speed
49999995000000
14731

g000001 2008-10-04T01:53:09+09:00
x86_64は対象外っぽいですね > GNU Lightning
qemuのclispで有効にしてたんだったかな。
gcjだと
java Speed
49999995000000
1351
でした。
というかjavaの使い方が分かっていないw
本当にgcjなのかw
あ、間違ってる、まちがってます。これ、gcjじゃないですね。

名無しさん 2008-10-04T02:01:47+09:00
gcjかどうかはversionを見て見れば分かると思います。
自分の環境だと/usr/bin/javaが /usr/lib/jvm/java-gcj/jre/bin/javaへのリンクになってました。

g000001 2008-10-04T02:03:10+09:00
Java HotSpot(TM) 64-Bit Server VM (build 10.0-b22, mixed mode)
java version "1.6.0_06"
でございました(^^;

名無しさん 2008-10-04T02:24:55+09:00
参考ということで。
$ ecl < speed.lisp
ECL (Embeddable Common-Lisp) 0.9j

49999995000000
real time : 6.098 secs
run time  : 5.728 secs
gc count  : 291 times
consed    : 398210088 bytes

$ sbcl < speed.lisp
This is SBCL 1.0.18.debian, an implementation of ANSI Common Lisp.
More information about SBCL is available at .

49999995000000
Evaluation took:
  2.163 seconds of real time
  2.004125 seconds of total run time (1.944121 user, 0.060004 system)
  [ Run times consist of 0.176 seconds GC time, and 1.829 seconds non-GC time. ]
  92.65% CPU
  3,740,009,854 processor cycles
  239,217,088 bytes consed

$ cmucl < speed.lisp
CMU Common Lisp CVS 19d 19d-release (19D), running on debian

49999995000000
; Evaluation took:
;   3.11 seconds of real time
;   2.344147 seconds of user run time
;   0.612038 seconds of system run time
;   5,373,178,729 CPU cycles
;   [Run times include 0.51 seconds GC run time]
;   0 page faults and
;   239,215,576 bytes consed.
clisp…
CLISPの今のJITははやくないです。バイトコードをほぼ1:1に機械語の塊に変換したけど、性能的にはイマイチ
というかコンパイル時間を入れると悪化してるレベル。
もうちょいコンパイラががんばるか、トレースキャッシュJITを作るかと議論になってました。

g000001 2008-10-04T18:46:43+09:00
Let Over Lambdaの正誤表を読んでいたら、
http://letoverlambda.com/index.cl/errata
SBCLが、0.9.7よりインタプリタでも動くようになっていたことを発見しました。
知らなかった…。
http://www.sbcl.org/manual/Interpreter.html
こんばんはー、CL勉強会。本日も開催させて頂きます。
お題は、今回は、30分間でLet Over Lambdaの1〜4章までの概略を進めるところまで進みます

名無しさん 2008-10-04T19:52:04+09:00
こんばんはー。焦げた醤油のいい匂いにつられてきましたw

g000001 2008-10-04T19:52:39+09:00
こんばんはー(*'-')
裸になりましたw

名無しさん 2008-10-04T19:53:34+09:00
具無しチキンライス?

g000001 2008-10-04T19:54:01+09:00
そういう色でもありますね(*'-')
やばい、once-onlyを暗記で書けるか試してたら、ぎりぎりの時間だw

名無しさん 2008-10-04T19:55:58+09:00
焼きおにぎり?

g000001 2008-10-04T19:56:46+09:00
元のアイコンにバリエーションがあったので変えてみましたw

名無しさん 2008-10-04T19:58:43+09:00
こんばんわー

g000001 2008-10-04T19:58:52+09:00
こんばんはー
あらためまして、こんばんはー、では20時になりましたので、開始します。
第19回

今回は、30分間でLet Over Lambdaの1〜4章までの概略を進めるところまで進みます

fvjZsZG2tW7 2008-10-04T20:00:43+09:00
こんばんは

g000001 2008-10-04T20:00:50+09:00
こんばんはー
多分2章位までですw ごめんなさい
Let Over Lambdaの概略なのですが、
On Lispの続編を狙った本みたいです。
割とlispならではという感じがでた一冊です
1-4章はオンラインで▼読め
ます。
http://letoverlambda.com/index.cl/toc
著者は、
Doug Hoyteさんです。
では、1章から、
適当に進めて行こうかと思います。
ところで、Let Over Lambdaを読んだことがある方は、
今ここにいる方では、
onjoさん位でしょうか。

名無しさん 2008-10-04T20:03:56+09:00
読んでません!<(_ _)>

g000001 2008-10-04T20:04:21+09:00
まだ、マイナーな本みたいなので、
というか翻訳されてないのでしょうがないですよねw
では、まず1章から
*Introduction
まず、この本の内容ですが、
基本的にCLで解説
でも、Schemeでも応用はできるだろうとのことです。
ここからは、ポール・グレアム風に煽って
書いてまして、
トッププログラマは何の言語でもプログラムを書くプログラムを書くことを余儀なくされることがある
なにが、トッププログラマ なのか良く分からないんですが、
そういうことみたいです
つまりLISPのマクロみたいな機能が必要とされると
いうことみたいです。
そういう意味でもマクロを書くのにベストな言語という意味でLISPにたどり着く
らしいです。
で、LISPのマクロとCのポインタ操作には、
学習曲線というか、
学習については似たようなところがあるんじゃないかと
いうことみたいです。
最初は難解だけど、
使いこなせるようになると、
これなしではやってられない、とかそういうことでしょうか。
で、
マクロの格言みたいなものが紹介されていて
|マクロはLISPの文法を変えられる|
つぎ良く分からないのですが、
|マクロはLispプログラムの構文木に対して作用する。|
あと、
|関数ができないことにだけマクロは使うべし|
ということで、
まあ、定番のことなので、
みなさん御存知かと思います。
で、
Lispのマクロに興味がある者はOn Lisp必読
みたいにOn lispがプッシュされています。
で、この本って
大分Cとか他のプログラマの視点から説明することが
多いのですが、
C畑出身のLISPマクロ書き初心者は、マクロは主に実行時のコードの効率のためだと思いがち
みたいなことも書いてあります。
もちろんそういう面もあるんですが、
実際のところマクロはプログラム中に現われるパターンをまとめたりしてプログラムを楽に書くために使われることが多い
んだよ、みたいな。
解説があります。
本当に実行時の効率のためにマクロがあると思ってる人って多いんでしょうかねー。
で、次のセクションですが
** U-Language
です。
これ意味が取れなかったんですが、
この本でのマクロについての議論するにあたって
議論から議論へと進んで行くので、
どの段階について言及しているか明確にしておく必要があると
いうことで
読み手と書き手のコミュニケーションの問題が発生しますよと
で、この問題を初めて意識したのは、Haskell Curryじゃなかろうか
みたいなことが書いてるんですが、
自分の解釈は眉唾なので、後でちゃんと読んでみて下さいw
それで、この読者と筆者のコミュニケーションに用いる言語をCurryは、U-Languageと呼んだ
んですかね?
で、
その表記についての色々あります。
スペシャルフォームとか、マクロは太字のフォントで表記される
とか、
表記上の問題から
マクロ抜きのLISPをBlubと呼んだりとか
するようです。
blubってのは、
中置記法、型づけあり 等々
するような、説明の為の抽象的なもの
で、決定的なこととしてマクロがないようです。
これも読めてるか不安ですw 確認して下さい。
普通のやつらの上を行け由来らしいので
詳しい方教えて下さい。
本の中で、Cみたいな感じのコードが
紹介されるんですが、これが、blubです。
で、
これは結構良いアイディアだと思ったんですが、
コードの例が徐々に完成に向って行くことを簡単に示すために、名前に%を付加して行くことにすると
foo% → foo%% → foo%%% →foo
みたいな感じで例が進んで行きます
完成した最終バージョンは、%が付きません。
これ結構読んでて
分かりやすいです。
で次ですが、
** The Lisp Utilityw
ということで、
プログラムを書くためのユーティリティですね。
On lispに満載されてるやつです
で、On LispはLispの上にプログラムの層を重ねて行くことを示した本じゃないかと
いう主張があって
Let Over LambdaはOn Lispという本の層の上に成り立っている
らしいです。
Lispのメタプログラミングは、処理系によって提供されたプリミティブの上にタマネギの様に更にメタなプリミティブを重ねて行くことが可能
なのが特徴じゃないかと
で、素晴らしいのが、一番上の層である利用者でさえ、Lisp タマネギの表層にいる
ということ
こういうこともあって、Lispプログラマは上から下(マシンレベル)まで自由に行き来できて、コントロールできることにこだわる
んじゃないかなーと分析されてます。
あと、良くデザインされたユーティリティは、組み合わされて使われた場合の生産性は単なる総和を越える!
みたいな。
単体が生産性が計れないので、なんとも言えないとは思うのですが、
いいたいことはなんとなく分かるような。
で、On Lispからのユーティリティマクロを紹介/説明があります
MKSTRと SYMBってのが
引用されてて
mkstrは文字を手軽に合成できるユーティリティです
で、symbはそれを利用して手軽にシンボルが作成できると
いうもので、
シンボルの作成なんか、するのかと
いう感じなのですが、
マクロだと頻繁にする作業になりますね。
あと、おなじくOn lispより
GROUPの紹介で
(group '(a 1 b 2 c 3 d 4) 2)
;=> ((A 1) (B 2) (C 3) (D 4))
これもマクロを書く場合に頻出するパターンかもという感じですね
あとは、定番の
FLATTEN
です。
(flatten '((3 2) 1 2 (())))
;=> '(3 2 1 2)
みたいなやつですね。
で、FACT-AND-CHOOSEの例があるんですが、
なにが言いたいのか良く分かりませんでしたw
タマネギの例の一つなのかなあと思いましたが…。
で、やっと2章ですね。
*Closures
です
** Closure-Oriented Programming
GLSの格言からはじまりまして
One of the conclusions that we reached was that the "object" need not be a primitive notion in a programming language; one can build objects and their behaviour from little more than assignable value cells and good old lambda expressions.
ということで、
適当な訳なんですが、
我々が到達した結論の一つとして、オブジェクトはプログラム言語のプリミティブである必要はない、ということがある。
オブジェクトとその振舞いは、ちょっとした代入可能なセルと旧き良きlambda式の組み合わせで作れる。
んじゃないかということで
オブジェクトの振舞いもクロージャで行けるよと
いうことらしいです。
で、
クロージャは興味深いコンセプトの一つ
だそうです。
オブジェクトよりも、クロージャはよりシンプルでより直截的にデータとコードの組織の問題についての解法を与えることがそのうち分かってくる
んじゃないかなあと、述べられています。
で、注意点ですが、クロージャでオブジェクトを模倣してみるが、プログラマにとってオブジェクトシステムが無用のものといっているわけではない。
とのことです。
で、勿論Common Lispには強力で柔軟なオブジェクトシステムであるCLOSがございまして
ございますが、
筆者は、提供されている高度な機能が必要となることはめったにない
なかった、みたいなことが述べられてるみたいです。
** Environments and Extent
ここは無限エクステントについてのセクションですね、
無限エクステントについて、
なんだろう?と思われる方は、
どれくらいいらっしゃいますか?
皆さん御存知ですよね。

kosh 2008-10-04T20:27:22+09:00
すいませんわかりません

名無しさん 2008-10-04T20:27:48+09:00
不定extentならわかります。

g000001 2008-10-04T20:28:04+09:00
あ、不定extentも同じでしょうね
同じかなw
infinitが不定なのか、
な。

名無しさん 2008-10-04T20:28:16+09:00
同じっぽいですね。

g000001 2008-10-04T20:29:04+09:00
変数の寿命が無限というか、そんな感じくらいにざっくりと
捉えておいて、あとで細々考えるという
のが良いかもしれません。

kosh 2008-10-04T20:30:02+09:00
ちょっと調べてきます>無限エクステント

名無しさん 2008-10-04T20:30:12+09:00
LISP の世界では、オブジェクトへの参照が残っている時間のことですね。>extent

g000001 2008-10-04T20:30:19+09:00
参照される限りは、ずっと居ますよ、というような感じですね。
こっから面白いんですが、
時間ですねw
ちょっと宿題にできそうなので、
次に進みますが、
** Lexical and Dynamic Scope
レキシカルとダイナミックな変数の違い
がここで述べられています。
あ、koshさん、
http://letoverlambda.com/index.cl/guest/chap2.html#sec_2
本文でも述べられているので、
これでも良いかもしれませんね。
で、レキシカルとダイナミックな変数の違いですが、
スペシャル変数だけが未束縛であることが可能
レキシカル変数は常に束縛されている、
みたいな。
で、Schemeはダイナミックスコープをもたないと
他EuLispとかも、そんな感じらしいです。
(defvar *var*)

(setq *var* 1)


(defun temp-special-returner ()
  *var*)

(temp-special-returner)
;=> 1

(let ((*var* 3))
  (temp-special-returner))
;=> 3
こんな感じの説明があります。
と、こんなところですかねー。
レキシカルとダイナミックの違いについては、
みなさんどんな感じでしょうか
どんな感じでしょうときかれても抽象的かもしれませんねw

名無しさん 2008-10-04T20:35:52+09:00
選択肢を
自分なりには理解しているつもりなんですが、CLのこのあたりの仕様はちょっといかがなものかとは感じてます。

g000001 2008-10-04T20:36:31+09:00
ダイナミック変数についてとかですか?(*'-')

名無しさん 2008-10-04T20:36:58+09:00
レキシカルが中途半端なところかなぁ。
中途半端?

g000001 2008-10-04T20:37:24+09:00
どういう局面とかで
問題が発生したりしますでしょうか、
なんかコードがあれば、
理解が進む気もします(*'-')

名無しさん 2008-10-04T20:38:57+09:00
まず、top-levelがレキシカルじゃないところが中途半端かなぁ、とか。

zick 2008-10-04T20:38:58+09:00
マルチスレッドとダイナミック変数の組み合わせが怖いです

g000001 2008-10-04T20:39:37+09:00
あれ、topってレキシカルじゃないんでしたっけ。

名無しさん 2008-10-04T20:39:45+09:00
トップレベルはレキシカルだと思いますけど。
あれ? みなさんはどのあたりをレキシカルと見てますか?
マルチスレッドはシンボルテーブルがどうなるのかが怖いです。

g000001 2008-10-04T20:41:05+09:00
;; top
(setq var 1)

(defun var-returner ()
  var)

(let ((var 2))
  (var-returner))
;=> 1

名無しさん 2008-10-04T20:41:45+09:00
内側のレキシカルスコープで隠蔽される辺りとか

g000001 2008-10-04T20:42:22+09:00
Let Over Lambdaでは、スペシャルな例ですけども

名無しさん 2008-10-04T20:42:29+09:00
CL-USER(259): (setq var 1)
1
CL-USER(260): (defun hoge ()
                var)
HOGE
CL-USER(261): (setq var 2)
2
CL-USER(262): (hoge)
2


g000001 2008-10-04T20:42:33+09:00
トップレベルで、スペシャルじゃないと
こういう感じかなと

名無しさん 2008-10-04T20:42:52+09:00
と、2が返ってしまうところが、中途半端なレキシカルかと。
あー、それは処理系が勝手にスペシャルにしているパターンだと
って違った
いや、この中途半端さは、たしか局所に入っても同じかと。

g000001 2008-10-04T20:44:25+09:00
これは代入だからじゃないんですかね。
束縛じゃなくて
MLとかだと、1のままだったりするんですか?(*'-')

名無しさん 2008-10-04T20:45:14+09:00
そなんです。
ああ、lexicalだなぁ、と。
(let (var) (defun hoge () var))
じゃないっすかね
それclでやるなら
そです。>snmstsさん
だからtop-levelが特殊性があるので、letを一枚かました方が自然なことがある、というのが中途半端かな、と。MLとかはtop-leveがそもそもそんな感じだったので。

g000001 2008-10-04T20:47:45+09:00
なるほど、なるほど

名無しさん 2008-10-04T20:47:48+09:00
ああ、すいません、ちょっとそこの仕様はtoo match だなぁ、という感想だけで、要は使いこなせばいいだけですので、、、
toplevelって(let (すべてのシンボル) とっぷれべる)な
too much
印象だったので
あり?

zick 2008-10-04T20:48:39+09:00
私もsnmstsと同じ感覚です。
ごめんなさい。「さん」を付け忘れましたw

名無しさん 2008-10-04T20:49:24+09:00
さんづけしろよなー!とか言わないのでさらっとw

g000001 2008-10-04T20:49:40+09:00
MLって代入はできるんですか?
1回しか代入できないってのは、ocamlでしたっけ?

名無しさん 2008-10-04T20:50:20+09:00
OCamlはできると思います。よりpureなSMLはわかりません。

zick 2008-10-04T20:50:37+09:00
SMLは参照型の変数を作れば代入できるはず。

名無しさん 2008-10-04T20:50:45+09:00
いや、Objective Camlなので、代入が一回しかできない、というのはないです。Object指向なので。
初めて触った時にいきなり破壊的操作のやり方を調べた記憶があるw

g000001 2008-10-04T20:51:25+09:00
cleanだったかなw

名無しさん 2008-10-04T20:52:14+09:00
CLのtoplevelは、letとかの局所とずいぶん違うというのが私の感触ですが。> snmstsさん、zickさん
ref と := だっけか。

zick 2008-10-04T20:53:23+09:00
val x = ref 1;
!x; (* xは1 *)
x:=2;
!x; (* xは2 *)
確かSMLはこんなんです。

名無しさん 2008-10-04T20:53:48+09:00
局所とはもちろん違うんですけど、スコープの見え方作られ方で違いがありましたっけ?

g000001 2008-10-04T20:54:04+09:00
自分は違いを感じたことが
あんまりないというか、
全然ないですねー(*'-')
理論的にでは、なくて経験的にで、すいませんがw

名無しさん 2008-10-04T20:55:24+09:00
toplevelでは、progvという大域変数専用のスコーピング機構があるとか。
あれー?SMLだっけな。

g000001 2008-10-04T20:56:16+09:00
progvは大域というよりは、

名無しさん 2008-10-04T20:56:16+09:00
(symbol-value 'x)によって、どのように深い局所スコープに入っていても一発で参照できるとか、

g000001 2008-10-04T20:56:56+09:00
スペシャルな気もしますが、
そうですね、それはそうですよね。

名無しさん 2008-10-04T20:57:45+09:00
そりゃ大域だもん…と言いたい
specialは、その変数への参照を常に強制的に大域にする、というものなので、大域の方が根源かな、と。>g000001さん
う?大域とスペシャルが同じ?

g000001 2008-10-04T20:59:39+09:00
うーん、なるほど
変数の名前についてる値は大域だと思うんですが、
なんとなく
これ、smegheadさんが、前にブログで議論してた気がするんですが、
思い出せないw
ここで、マルチスレッドと
スペシャル変数のからみですが、
マルチスレッドが規格にはいってないので、
処理系依存でしたよね。
で、大概の処理系は、
スレッドごとに別に持ってるんでしたっけ? > スペシャル変数

名無しさん 2008-10-04T21:05:13+09:00
大域というのはいわゆるグローバル変数的な?
グローバルってのはスコープの話だから、
レキシカル・スペシャルとはちょっと違うような…
私の場合、今のところ湯浅先生の用語にしたがっていて、
大域変数、局所変数、という用語があって、
それぞれが動的スコープや静的スコープをもち、
とか、なんか用語が展開されている感じです。
しかし、湯浅先生の本、CLtL1なんですよね。。。

g000001 2008-10-04T21:10:53+09:00
どうも自分の場合、スペシャル変数というのは、
名前に値がついてるもの(symbol-value)という感覚でいまして

名無しさん 2008-10-04T21:11:05+09:00
Common Lisp 入門ですか。本や人によって微妙に違うからなぁ。今開いた CLtL2 日本語版は↓

スコープ(変数がソース上で参照できる範囲): レキシカル / 無限スコープ
エクステント(参照が実際にのこる期間): 動的エクステント / 無限エクステント

zick 2008-10-04T21:12:07+09:00
[global variable] (CLHS)
http://www.lispworks.com/documentation/HyperSpec/Body/26_glo_g.htm#global_variable

名無しさん 2008-10-04T21:12:26+09:00
この定義は多分CL入門も同じかなぁ。たぶん微妙なのは、バインド、環境、動的バインディング、静的バインディングあたりかもしれません。

g000001 2008-10-04T21:12:58+09:00
そういえば、こういうのもありましたね。

名無しさん 2008-10-04T21:13:18+09:00
トップレベルのレキシカルのことを忘れるとg000001さんの定義でスッキリするんだけどなぁ…
理解の邪魔にはならないけど実験の切り分けで奈落に落ちる人多数な気が

g000001 2008-10-04T21:14:10+09:00
ああ、そうなのかw
なるほど
とりあえず、HyperSpecの例は、大域=スペシャル+定数で、大域=スペシャル
ってのではないということには
なるんでしょうね。
そうか、トップレベルって色々あるんだなーw
自分は、全然考えたことなかったですね(*'-')
他に、
Let Over Lambdaの個所で、疑問に思ったこととかありますか?
u-languageとかの解釈ですが、

名無しさん 2008-10-04T21:18:54+09:00
えーと表現を考えた
とかそんな感じだったように見えました

g000001 2008-10-04T21:19:39+09:00
読者とのコミュニケーションの為の表現とかでしょうか(*'-')

名無しさん 2008-10-04T21:20:05+09:00
読みかけて走りぬけられそうだったのであきらめて帰ってきた感じでした
ちょっとも一度見てくる
ideawo
形式化しただけでなく
表現も
形式化して、それが読者とのコミュニケーションに便利だと
わかった
んで、これをu-なんとかと彼は呼んだ

g000001 2008-10-04T21:22:46+09:00
なるほど、なるほど

名無しさん 2008-10-04T21:23:02+09:00
超適当訳でこんな感じですかね

g000001 2008-10-04T21:23:06+09:00
じゃ、まあ、大体あってたましたかね*'-')
意識してu-languageって名前をつけたってことですね。

名無しさん 2008-10-04T21:24:19+09:00
前段からの流れからするとそうでしょうね

g000001 2008-10-04T21:24:53+09:00
割と後でも出てくる用語なので、
良かったです。
これから面白いところなので、

名無しさん 2008-10-04T21:27:14+09:00
自分が生まれてついての関数型じゃないことが理解できました。
let x = 10;;
let f () = x;;
let x = 20;;
f();; => 10
これはこれで全然納得だけど、脳内ではLispのトップレベルイメージは
let y = ref 10;;
let f2 () = !y;;
y := 20;;
f2();; => 20
だなぁ。
そなんです。>onjoさん
で、上の方の人に「これこそ字句通り」と言われると、そりゃ確かに字句通りですね、と答えてしまう自分がいて。するとCL/Schemeの字句通りは中途半端だな、と。

g000001 2008-10-04T21:30:36+09:00
なるほどー。
色々あるんですね(*'-')

名無しさん 2008-10-04T21:31:20+09:00
でもそれトップレベルでletって書いているじゃないっすか…

Ocamlとかのトップレベル let はどんどんネストしていってる感覚。
LISP 的にはこう (let ((x 10)) f を定義 (let ((x 20)) ... fを呼ぶ))

quek 2008-10-04T21:32:39+09:00
Forth っぽいw

名無しさん 2008-10-04T21:33:14+09:00
あと生まれついての関数型についてkwsk
Ocamlでは、setqの役割もletするしかないんです。なので、逆に言うとletしかない=単純ってなっている気がしてます。> snmstsさん
とうイメージがあるので中途半端さを感じないんだろうな。
私はOcamlを触った時にakaさんとは逆の感想を持ちました。
:= があるじゃないですかw
なんか主軸の違いかなーと思った。
# let x = 10;;
# let y = x;;
どうしてこれで環境がネストするんだぁぁぁ
(let ((x 10))
   (let ((y x))
      あぁ、すごいネストしてるw

g000001 2008-10-04T21:36:05+09:00
それはありますねw > ネスト
括られてると安心しますw
なので自分にとって、トップレベルは荒野。
という感じで、
言語仕様的にもりあがって来ましたが、
今週より時間を30分にして、あとは適宜雑談と
することにしてみたのですが、
時間も30分ということもありますので、
是非みなさまのネタの持ち込みを
歓迎させて頂きたいなと
思っています!(*'-')
来週は、onjoさんの
CL永続化入門ですが、
Let Over Lambdaも続けてみたいと
思うんで、
1時間枠かも
しれません。
何かやってみたいネタありましたら、
大体その週の火曜か水曜までに、
CADDR MLに投稿して頂くか、
ここに書きおきしてみて下さいまし(*'-')
あと、10/18日が、
どうなるかという。
休みにしましょうか(*'-')
Shibuya.lispで抜ける人が多分、3、4人位なんですが、
自分的には、今日みたいな感じ変らない気もするんですが、
s//感じと変わない気も/
18日にネタがなければお休みですね。
という感じで、
あとは、ご歓談下さいー(*'-')

名無しさん 2008-10-04T21:47:41+09:00
:=ありますね。。。 失礼しました。>onjoさん
いや、みなさん、toplevelに違和感を思ちだと想像していたんですが、それが自分だけだとわかって収穫でした。>みなさん

g000001 2008-10-04T21:49:18+09:00
トップレベルで色々あるのは、Schemeだけかと思ってたので、

名無しさん 2008-10-04T21:49:30+09:00
永続化は30分枠?ちょっとオーバーするかも。CL-SERIALIZER までで既にスライド15枚だw 二回に分けたほうがいいんかな

g000001 2008-10-04T21:49:50+09:00
勉強になりました(*'-') > akaさん
いや、時間は、お好きなようにして頂ければと(*'-')
自分が先に30分やって場を暖めておきますんでw

zick 2008-10-04T21:51:12+09:00
Let Over Lambdaに
「C畑出身のLISPマクロ書き初心者は、マクロは主に実行時のコードの効率のためだと思いがち 」
とありましたが、私がまさにこれでしたw
だって、高階関数使えば十分抽象度が高いって思ったんだもんw

g000001 2008-10-04T21:51:34+09:00
おお、ほんとにそういうことってあるんですねー。
っていうか、自分の場合LISPしか知らないので、

名無しさん 2008-10-04T21:52:11+09:00
主に、とは思っていないですけど

g000001 2008-10-04T21:52:11+09:00
自分の方が変な気もしますがw

名無しさん 2008-10-04T21:52:42+09:00
そういう部分が印象として強いですね

zick 2008-10-04T21:52:46+09:00
LOLの著者ってC出身なんですかね?

名無しさん 2008-10-04T21:52:47+09:00
orbitzno
人がキーワードパラメータの書きやすさと
オーバーヘッドはずすのにマクロ使うよー
という話をしていた印象が強すぎて

g000001 2008-10-04T21:53:55+09:00
なんかいちいちCの解説がでてくるんで、そうなのかもしれませんし、Cプログラマを強く意識してるのかもしれません(*'-') > Hoyte氏
自分は、マクロについては、変な構文を自作できるよー、位にしか考えてないですねw
これが自分にとっての最大の魅力w

zick 2008-10-04T21:56:00+09:00
「LISPのマクロとCのポインタ操作には、学習曲線というか、学習については似たようなところがある」
これも凄く納得しました。

名無しさん 2008-10-04T21:56:11+09:00
akaさんはひょっとして関数型の後にLispに入ったんですか?
SchemeとOCamlを同時くらいでした。>onjoさん
で、振舞が違ってかなり悩みました。。。
とりあえず知らずに足を狙う感じですね>zickさん
で、レキシカルというのが字句通り、書いた通りになる、という意味では、MLの方がその言葉に近いなぁ、という感触でした。

g000001 2008-10-04T21:58:09+09:00
なるほどー > 学習曲線

名無しさん 2008-10-04T21:58:45+09:00
なんというか書いたとおりってのが

g000001 2008-10-04T21:58:50+09:00
なんとなくzickさんには、この本はお勧めですねw

名無しさん 2008-10-04T21:59:10+09:00
括弧とのシンクロ具合によって結構いろいろありそうです

g000001 2008-10-04T21:59:11+09:00
リーダーマクロについても4章で
色々解説してます。

zick 2008-10-04T21:59:32+09:00
そんな気がします。物凄く気になる。 >お勧め
そういや、ECLってexternal-formatに全く対応してないんですね

名無しさん 2008-10-04T22:00:11+09:00
Lispの変数は基本 mutable ですからねぇ。
Ocamlベースで考えるなら基本 let 変数名 = ref ... なんですよ。
そうですね。だから「この言語はレキシカルスコープです」と聞いても、どんなレキシカルスコープなんだろーと考えてしまいます。> snmstsさん
Lisp -> Ocaml いった私は ref を乱発して怒られたw
Lisp -> OcamlしてみてOcamlはどうですか? > onjoさん
私はOcaml -(2年くらい)-> CLなので、もう霧の彼方という感じで> Ocaml
onjoさんが壊れそうな話の流れだなぁ
eclのexternalga
external対応を某本に載りそうになったのを
やめてーといった記憶が
vcde
いや、シミュレーションの課題を Ocaml で解いたりとしばらくハマっていたけど。今でも密に F# に期待してますよ。
vc++でecldechar-code-limitが
255オーバーにするのをあきらめた記憶があるんですけど
今は平気ですか>zickさん
Ocaml大好きDr. Jon Harr〇○p がcomp.lang.lispを荒らしていた頃にちょっとうんざりしたかも

zick 2008-10-04T22:07:11+09:00
いまでも256です > char-code-limit

名無しさん 2008-10-04T22:07:32+09:00
vcのmakeni
オプションがあるんですけど
確か…
今でも unicode サポートを入れると 1114112 になるけど EXTERNAL-FORMAT サポートがないんですよね。 >ECL
iconv でサポートしてみるというネタを考えたw
onにしてコンパイルがどうやったら通るのか分からなかった…
ecl難しいですよね
ああ、そんなことがあったんですね。。。>ocaml and cll

zick 2008-10-04T22:09:28+09:00
CLを使ってWindowsのDLLを作りたいんですけど、
ECLを候補から外すとなにでやるべきですかね

名無しさん 2008-10-04T22:11:08+09:00
日本語が使えてフリーなやつ?
dllha
…候補がないかもなぁ。DLLだと。
他には無いかな…
mingwde
の方が筋が良いかもです
ACLでもいちおうできます。商用ですが。。。> dll
http://www.franz.com/support/documentation/8.1/doc/dll.htm

zick 2008-10-04T22:13:38+09:00
DLLがLispプロセスを起動→あとはFFIでなんとか...
という方針で出来ますかね。
かなり卑怯な気がしますがw

名無しさん 2008-10-04T22:15:21+09:00
日本語はどこから入ってきます?
unicode対応させてリーダを迂回させればeclで問題ないと思うんですけど

zick 2008-10-04T22:16:25+09:00
ソースに #\あ みたいな感じで登場します

名無しさん 2008-10-04T22:16:26+09:00
全部 unsigned-byte 8 のベクタとして処理するとか

zick 2008-10-04T22:17:05+09:00
それでリーダマクロを作って、日本語だらけのファイルをリードさせるものです
ベクタとして処理すると折角のリーダマクロが使えないので駄目ですね。

名無しさん 2008-10-04T22:18:35+09:00
eclのリーダを改造ですかね…
改造eclが最短路な気がします。

zick 2008-10-04T22:22:08+09:00
一番避けたい道が一番最短路ですか...
ECLのソース読むだけでかなり時間を費やしそう。

名無しさん 2008-10-04T22:23:12+09:00
小さい Scheme を組み込むとか。
ソースを解釈して C のコードにするようなプログラムを書くとか。

zick 2008-10-04T22:24:51+09:00
どの道も結構辛いですねw
Lispプロセスを起動させる卑怯な手に出るか、
ECLを改造するかというところでしょうか。

名無しさん 2008-10-04T22:29:09+09:00
Maxima とかも GUI とは別に Lisp プロセス起動しますけど、

zick 2008-10-04T22:29:57+09:00
よし、その方針でww >Lispプロセス起動
ECLにexternal-formatが付いたら書き直すということで、逃げておきますw

g000001 2008-10-04T22:32:57+09:00
こういうのはGaucheだと簡単なんですか?(*'-')

名無しさん 2008-10-04T22:33:44+09:00
うっ。手元のパッチ版で試したら途中で力尽きた模様。
"日本語", #\日 までは通ったけど '日本語 を読ませたら無限ループしたw
Cで書かれたリーダー部分は地道になおさんとなぁ。
どうなんでしょう。あんまりWindowsには詳しくないので…
DLLは呼べそうだけど、今回の話は作ったプログラムをDLLにしたい&他のプログラムからロードして使いたい、ということだと認識してますが。

zick 2008-10-04T22:42:38+09:00
本当はCのソースにLispのプログラムを埋め込めたら一番楽です。
でもまあ、ソケット通信なり何なりを使えばきっとどうにかできると考えてます。

名無しさん 2008-10-04T22:48:49+09:00
配布用のアプリケーションですか?
LTK なんかはシンプルにパイプで lisp <-> Tcl/Tk をつないでますが、
Lisp側を非表示で使ってたら、Tcl/Tk が強制終了とかでいなくなった場合にLispプロセスが残っちゃうんだよなぁ

zick 2008-10-04T22:51:56+09:00
本来別のアプリのためのDLLをLispで書こうとしているので、
パイプなりソケットなりでDLLとLispを繋ぐとこんな感じです。
アプリ <-> DLL <-> Lisp

名無しさん 2008-10-04T22:55:42+09:00
アプリと別にLispプロセスを起動するとして、REPLな窓がどーんと出ていてもいいんですかね?非表示にしておきたいですよね?

zick 2008-10-04T22:56:07+09:00
出来れば非表示にしたいですね

名無しさん 2008-10-04T23:01:03+09:00
ですよねぇ。で、アプリが死んじゃったときに見えないLispプロセスが残るのが嫌という人を見たことがある。
XMaxima って裏で Maxima プロセスを動かしますが、
XMaxima だけ死んじゃっても Maxima プロセスが残っちゃうん。
これは別プロセス案の欠点かなぁ

zick 2008-10-04T23:01:45+09:00
ですかね。
あれ、いつの間にかg000001さんのアイコンが変わってる?

g000001 2008-10-04T23:02:34+09:00
ずっといろいろ変えてましたw

名無しさん 2008-10-04T23:13:37+09:00
眠くなてきたのでそろそろ寝ます~
おやすみなさい

g000001 2008-10-04T23:13:46+09:00
はいー、お休みなさいましー(*'-')

名無しさん 2008-10-04T23:13:57+09:00
おやすみなさいー

zick 2008-10-04T23:14:18+09:00
おやすみなさい

g000001 2008-10-04T23:17:57+09:00
おお、もう11時ですね。
なんとなくいつもの調子ですが、
これだったら、最初から30分にしとけば良かったのかなw
90分は長過ぎたのかも。

名無しさん 2008-10-04T23:20:31+09:00
g000001さんはOn Lispも読まれたんですか?

g000001 2008-10-04T23:20:51+09:00
おととし位にウェブで読みましたw
なので、もう忘れましたねw

名無しさん 2008-10-04T23:21:28+09:00
Schemeっぽい、という噂があって、CLをマスターするまでは近づかないようにしているんですが、やっぱりSchemeっぽかたったですか??

g000001 2008-10-04T23:21:53+09:00
Schemeっぽいというか、
多分、ポール・グレアムスタイルというような癖があるんじゃないかとw
Arcとかも。

名無しさん 2008-10-04T23:22:33+09:00
なるほどです。

g000001 2008-10-04T23:23:04+09:00
CLOS使わないで、マクロ好き+クロージャ多用という
割と最近の流れな気もします。
ここに来る人もそういうの好きな人多かったような。

名無しさん 2008-10-04T23:24:02+09:00
なるほどです。クロージャ多用というところ、Schemeっぽい予感がしますね。。。

g000001 2008-10-04T23:24:26+09:00
なんというかLet Over Lambdaでもメインテーマにしてますが、
オブジェクトとしてのクロージャ
な感じも強いですね。
高階関数で関数の貼り合せなSchemeとも
ちょっと違うような。
あと、labelsとか割と使うので、その辺がSchemeっぽいっていわれるのかも
と思いますが、
でも、ポール・グレアムの場合、コンパイラでの最適化を考えながら使ってたりするので、
字面だけではちょっと分かんないところがあるかもと、思ったりもします。

名無しさん 2008-10-04T23:27:15+09:00
なるほど、いろいろあるのですね。自分的にはとりあえずPAIPまでやった後で見てみようかな、と考えてたりします。

g000001 2008-10-04T23:27:52+09:00
Norvig - PG路線って結構似てる気がしますね、個人的な考えですが(*'-')
NorvigもCLOSとか嫌いなんじゃなかったかなと。
どっかで書いてたような、そんなことはないような…曖昧な記憶ですいません(^^;

名無しさん 2008-10-04T23:30:15+09:00
いえいえ、参考になります。CLは自由度が高いので、質の良い書きぶりを勉強したいなぁ、というのがありまして、Norvigがバランスがいいという噂を聞いたもので。

g000001 2008-10-04T23:31:09+09:00
たしか、黒田さんはPGは×で、Norvigは○なんでしたよね?w

名無しさん 2008-10-04T23:31:52+09:00
K田さんは、そうみたいですね。しかしあそこまでPGがxなのも不思議ですね。

g000001 2008-10-04T23:31:52+09:00
多分、学究的な人には、Norvigは向いてるんじゃないでしょうか(*'-')
なんか職人肌に合わないとかw

名無しさん 2008-10-04T23:33:03+09:00
題材がAIというのもありますね。。。> Norvig

g000001 2008-10-04T23:33:35+09:00
自分個人的には、古いMacLISPとかの変なソースが好きなので、
ああ、こんなにLISPってめちゃめちゃなんだなあ、という考えを持っていて、
きちんとしているNorvigさんが、
あまり受け入れられないですw
でも、Norvigさんが教材としては、最高なんだとは思います(*'-')

名無しさん 2008-10-04T23:35:54+09:00
なるほどです。まだPAIP読んでないので、わからないですが、読むときに注意してみます。そういえば、先日、アメリカでCLで25年飯をくっている、
というプログラマと話をする機会がありましたが、
まだまだ深い、CLは面白い、と言ってました。g00001さんがおっしゃるようなめちゃくちゃもOKとか含めてなのかな、とふと思いました。
ああ、すいません。CLで25年じゃなくて、Lispで25年だと思います。

g000001 2008-10-04T23:38:38+09:00
いや、25年のベテランなら多分ちゃんとしてるんだと思いますが、
予想外なものが沢山あるのも事実ですw

名無しさん 2008-10-04T23:41:10+09:00
いろいろありがとうございました。今日も勉強になりました。そろそろ落ちますー おやすみなさいー

g000001 2008-10-04T23:41:16+09:00
はいー、お休みなさいましー(*'-')

名無しさん 2008-10-05T00:17:18+09:00
eclってgray実装されてましたね
なんか突破口になりそうな気がちょっとします
CommonLispのスコープとエクステント http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/tutorial/scope-and-extent.pdf

g000001 2008-10-05T13:50:12+09:00
おお!、素晴らしい!
最近公開されたんですね('-'*) 知りませんでした…。
> mahiruさん
:)
:-*
:(|)
:(|)
 簡単なことだったら教えて下さい質問なのですが、半年位まえから、SLIMEとCLISPを組み合わせで、エラーになると接続が切断されるような感じになってしまいました。前はエラーになってもちゃんとハンドリングできてたんですが、何かの設定を抜いちゃったんですかねー。SLIMEは、SWANKを別起動させてslime-connectで接続して使っています。

名無しさん 2008-10-09T20:23:23+09:00
CLISPのバージョンは何ですか?
1月あたりにデバッガのスタックフレーム操作用APIに変更がはいっており、しばらくしてSLIMEが追従しているので、
最新版のSLIME + CLISP2.44(古いAPI)
あるいは
ちょっと古いSLIME + CLISP 2.46 or later
だと API 不整合でデバッガが動作しないかもしれません。

g000001 2008-10-10T01:05:09+09:00
 ありがとうございます! SLIMEは最新、CLISPも2.46なのですが、何か変な設定とか古いファイルとかが残ってるかもしれないので確認してみます!
 10/20日のlisp50@oopslaは動画中継されたりどっかにアップされたりしないんですかねー。どの講演も見た過ぎるww
http://www.lisp50.org/schedule/

名無しさん 2008-10-11T14:31:53+09:00
clispは、現在では、どのようなOSや環境で実用に呈されているのでしょうか? 私は昔、専用のリスプマシン上にてGeneraという処理系を使用してましたが、最近の状況は全く存じません。どなたか、ご教示いただけませんでしょうか?

g000001 2008-10-11T18:07:00+09:00
こんにちはー
 最近の状況としては、LispマシンのGeneraのような環境を目指したSLIMEというEMACS上で動くCLの開発環境があります。
 統合された環境として、Generaには、まだ及びませんが、大分良い感じになっていると思います。とはいえ、そういう自分はGeneraは使ったことがないのですが…。
 Genera自体もAlpha用のOpen Generaが、64bit Linuxで動くようになっています。詳細は不明ですが、Open GeneraのCDをお持ちでしたら、64bitのLINUX 環境を用意すれば、動かすことができるようです。

kxGv387p4PE 2008-10-11T18:56:11+09:00
こんばんは

g000001 2008-10-11T18:59:35+09:00
こんばんはー(*'-')
今日もCL勉強会開催させて頂きます!
 20:00〜開始 http://www.lingr.com/room/common-lisp-jp お題:今回は、Let Over Lambdaの2〜4章までの概略を進めるところまでと、onjoさん(lisp-user.net)さんの「CLの永続化入門」です。
おお、tszさん お久し振りです(*'-')

tsz 2008-10-11T19:09:09+09:00
こんばんは

g000001 2008-10-11T19:09:33+09:00
前のonjoさんのスライドの時に名前はおみかけした憶えたあるのですがw

tsz 2008-10-11T19:10:21+09:00
勉強会はいつもオブザーバで見させてもらってましたw

g000001 2008-10-11T19:10:23+09:00
もしかして、observerとしては割と参加して頂いていたみたいな?(*'-')
そうだったんですかwww
なんとなくそういう気がしていましたw

kosh 2008-10-11T19:49:03+09:00
こんばんわです

g000001 2008-10-11T19:49:13+09:00
こんばんはー(*'-')

quek 2008-10-11T19:52:05+09:00
こんばんは。

g000001 2008-10-11T19:52:09+09:00
こんばんはー(*'-')

名無しさん 2008-10-11T19:52:18+09:00
こんばんは。

g000001 2008-10-11T19:52:25+09:00
こんばんはー(*'-')
Let Over Lambdaはonce-onlyのところまで行きたいですが、
辿り着けるかしら(^^;

名無しさん 2008-10-11T19:54:08+09:00
今週は永続化入門 (1)。
READ&WRITE と CL-SERIALIZER です。

g000001 2008-10-11T19:54:20+09:00
おお、続きものなんですね(*'-')

名無しさん 2008-10-11T19:54:21+09:00
こんばんわ。

g000001 2008-10-11T19:54:25+09:00
こんばんはー(*'-')

名無しさん 2008-10-11T19:55:22+09:00
…ごめんなさいスライド作りをサボってしまいました。
先週用意した分から進んでないんです。 m(_ _)m
CL-PREVALENCE と CLSQL は次回ということで…

g000001 2008-10-11T19:55:42+09:00
いえ、続きものの方が嬉しいですー(*'-')
個人的には、歓迎でございます!
細く長くの方向でw
あらためまして、こんばんはー、では20時になりましたので、開始します。
第20回


今回は、30分間でLet Over Lambdaの2〜4章までの概略を進めるところまで進みます
ちょっと飛し気味かもしれませんw
前回2章の最初でした
*Closures
我々が到達した結論の一つとして、オブジェクトはプログラム言語のプリミティブである必要はない、ということがある。
オブジェクトとその振舞いは、ちょっとした代入可能なセルと旧き良きlambda式の組み合わせで作れる。GLS
みたいな感じでした。
***クロージャは興味深いコンセプトの一つ
***オブジェクトよりも、クロージャはよりシンプルでより直截的にデータとコードの組織の問題についての解法を与えることがそのうち分かってくる筈
***クロージャでオブジェクトを模倣してみるが、プログラマにとってオブジェクトシステムが無用のものといっているわけではない。
みたいな感じでした
** Environments and Extentl
無限エクステントについて
** Lexical and Dynamic Scope
レキシカルとダイナミックな変数の違い
みたいな流れで
ここで、イアーマフについて
なんですが、
*foo*みたいなのが
耳当てみたいなので、
そうよんでるみたいです。
このHoyteさんは、これをこの本では、
つかわないよ、みたいな。
なんでなんでしょうね。
で、次なんですが、
lambdaマクロについて
が説明されています。
(lambda (x) x)が、 #'(lambda (x) x)に展開されるよ
ってやつですね。
で、やっとLet Over Lambdaの意味が
ここで解説されます。
** Let Over Lambda
(defun lambda-returner ()
(lambda (x) (+ 1 x)))
こういうのがLet Over Lambdaで
***環境付きの関数を返す
(defun let-over-lambda-returner ()
(let ((y 1))
(lambda (x)
(incf y x))))
(let ... (lambda ..))ってことで、
letの上のlambdaという意味もあったらしいです。
***典型的な例
(let ((counter 0))
(lambda () (incf counter)))
みたいな。
で次は、Lambda Let Over Lambda
だったりします。
***環境付きの関数を返す関数
(lambda ()
(let ((counter 0))
(lambda () (incf counter))))
こういうやつですね。
***無名のクラスみたいに使えるかも
ということです。
***名前あり
(defun counter-class ()
(let ((counter 0))
(lambda () (incf counter))))
だとこういう感じでしょうか。
ここでLambda Let Over Lambdaの例として
BLOCK-SCANNERという例があります。
あ、遅れましたが、
LOLはこちらから4章まではオンラインで読めます。
http://letoverlambda.com/index.cl/toc
BLOCK-SCANNERは、状態を保持していることを説明する例みたいな感じですね
(defun block-scanner (trigger-string)
  (let* ((trig (coerce trigger-string 'list))
         (curr trig))
    (lambda (data-string)
      (let ((data (coerce data-string 'list)))
        (dolist (c data)
          (if curr
            (setq curr
                  (if (char= (car curr) c)
                    (cdr curr) ; next char
                    trig))))   ; start over 
        (null curr)))))
Hoyteさんは、最後をnotにしてるんですが、
そうすると自分の場合、猛烈にコードがよみづらいので、nullにしました。
断続的に与えられた文字列から、
対象の文字を探すというもので、
なかなか参考になると思うので、
分析してみると良いかと思います(*'-')
** Let Over Lambda Over Let Over Lambda
で、また進んで、これです。
関数で変数を共有する例です。
(let ((direction 'up))
(defun toggle-counter-direction ()
(setq direction
(if (eq direction 'up)
'down
'up)))

;; LOLOLOL
(defun counter-class ()
(let ((counter 0))
(lambda ()
(if (eq direction 'up)
(incf counter)
(decf counter))))))
みたいなパターンのようですね。
こんな感じで、ずんずん進んで行くのが、この本は面白いですw

名無しさん 2008-10-11T20:10:03+09:00
ついていけない…

g000001 2008-10-11T20:10:29+09:00
速過ぎますかねw

名無しさん 2008-10-11T20:10:43+09:00
とりあえず私は辛いくらいです

g000001 2008-10-11T20:10:51+09:00
ざっとした。パターンの分類ですね(*'-')

名無しさん 2008-10-11T20:11:12+09:00
block-scanner が読めてません

g000001 2008-10-11T20:12:01+09:00
あ、途中になってますね。
(defun block-scanner (trigger-string)
  (let* ((trig (coerce trigger-string 'list))
         (curr trig))
    (lambda (data-string)
      (let ((data (coerce data-string 'list)))
        (dolist (c data)
          (if curr
            (setq curr
                  (if (char= (car curr) c)
                    (cdr curr) ; next char
                    trig))))   ; start over 
        (null curr)))))
という感じです。

名無しさん 2008-10-11T20:12:44+09:00
使用例があると嬉しいかな

g000001 2008-10-11T20:13:15+09:00
* (defvar scanner
    (block-scanner "jihad"))

SCANNER
* (funcall scanner "We will start ")

NIL
# (funcall scanner "the ji")

NIL
* (funcall scanner "had tomorrow.")

T
こんな感じですね(*'-')

名無しさん 2008-10-11T20:14:02+09:00
あ、なるほど

g000001 2008-10-11T20:14:03+09:00
ま、興味を持って頂くくらいが目的なので、
ざーっと、流してしまいます、すいません(*'-')
で、マクロに入ってしまいます。
*Macro Basics
1. Iterative Development
マクロの構築は、簡単なものが積み重なって複雑なものへ、という反復プロセスによりますよと。
この章では、DSLと、制御構造としてのマクロを解説
で、まず、DSLから
2. Domain Specific Languages
時間の単位を手軽に扱えるDSLを作成してみよう
指定した時間スリープするユーティリティ
(defun sleep-units% (value unit)
  (sleep
    (* value
       (case unit
         ((s) 1)
         ((m) 60)
         ((h) 3600)
         ((d) 86400)
         ((ms) 1/1000)
         ((us) 1/1000000)))))
(sleep-units% 2 'm)
これで、2分sleepします。
これは関数ですが、クオートを付けるのは、なんだか面倒なので、マクロにしてみようと
(defmacro sleep-units (value unit)
  `(sleep
     (* ,value
        ,(case unit
           ((s) 1)
           ((m) 60)
           ((h) 3600)
           ((d) 86400)
           ((ms) 1/1000)
           ((us) 1/1000000)))))
(sleep-units 2 m)
みたいに書けます。
しかし、こんな感じでは使えない。
(sleep-units 1 (if super-slow-mode 'd 'h))
で、これの時間ユニットの部分だけを取り出したものが、
(defmacro unit-of-time (value unit)
  `(* ,value
      ,(case unit
         ((s) 1)
         ((m) 60)
         ((h) 3600)
         ((d) 86400)
         ((ms) 1/1000)
         ((us) 1/1000000))))
です。
(unit-of-time 3 m)
;=>180
みたいな。
依然として、マクロの方が効率的
→caseの展開がマクロ展開時にされるためコンパイルすれば効率的ということ
以上、DSL的な例でした。
3. Control Structures
次は制御構文です
Schemeとかで有名な名前付きletを作成してみよう
という
(defmacro nlet (n letargs &rest body)
  `(labels ((,n ,(mapcar #'car letargs)
              ,@body))
     (,n ,@(mapcar #'cadr letargs))))
こんな感じに書けます。
(defun nlet-fact (n)
  (nlet fact ((n n))
    (if (zerop n)
      1
      (* n (fact (- n 1))))))
みたいに使えます。
展開すると、
(LABELS ((FACT (N)
           (IF (ZEROP N)
             1
             (* N (FACT (- N 1))))))
  (FACT N))
という感じですね。
こういう風に自分の好きな構文を作成できますよ、というのが
骨子だと思います。
次にマクロの問題点で
変数捕捉関係です。
4. Free Variables
関数における自由変数とは、
(+ 1 x)
の場合x
(let ((x 1))
(+ 1 x))
とすると、xは確定
これをマクロで考える
(defmacro x-injector () 'x)
というものを考え、マクロに埋めこむと、xが補足できます。
5. Unwanted Capture
意図しない変数捕捉
新しい構文として、
(nif x "positive" "zero" "negative")を考えてみます
xの値によって、positive zero negativeに分岐するというやつですね。
何も考えず
(defmacro nif-buggy (expr pos zero neg)
  `(let ((obscure-name ,expr))
     (cond ((plusp obscure-name) ,pos)
           ((zerop obscure-name) ,zero)
           (t ,neg))))
という風に作成する
試してみる
(nif-buggy
  x
  (let ((obscure-name 'pos))
    obscure-name)
  'zero
  'neg)
これなら、たまたまOK
しかし、obscure-nameで変数捕捉が起きてしまっているため、pos部に設定された値は無視されてしまう。
(let ((x 3))
  (let ((obscure-name 'pos))
    (nif-buggy
     x
     obscure-name
     'zero
     'neg)))
;=> 3
;=> posになる筈だった。
これを回避したいということで、改善
(defmacro nif (expr pos zero neg)
  (let ((g (gensym)))
    `(let ((,g ,expr))
       (cond ((plusp ,g) ,pos)
             ((zerop ,g) ,zero)
             (t ,neg)))))
gensymで防ぐわけですね。
でも一々手書するの面倒ということで
with-gensymsです。
(with-gensyms (a b c) ...)

(let ((a (gensym))
      (b (gensym))
      (c (gensym)))
  ...)
というマクロ
です。
楽するマクロですね。
で、もっと楽をしたいと
Hoyteさんのアイディアですが
(defun g!-symbol-p (s)
  (and (symbolp s)
       (> (length (symbol-name s)) 2)
       (string= (symbol-name s)
                "G!"
                :start1 0
                :end1 2)))
というのを作成します
(g!-symbol-p 'g!foo);=> t
これを利用して
(import 'kmrcl:flatten)
(defmacro defmacro/g! (name args &rest body)
  (let ((syms (remove-duplicates
                (remove-if-not #'g!-symbol-p
                               (flatten body)))))
    `(defmacro ,name ,args
       (let ,(mapcar
               (lambda (s)
                 `(,s (gensym ,(subseq
                                 (symbol-name s)
                                 2))))
               syms)
         ,@body))))
g!fooというのを(gensym)に展開してくれるようなのを作成します。
このdefmacro/g!で、nifを書いてみると
(defmacro/g! nif (expr pos zero neg)
  `(let ((,g!result ,expr))
     (cond ((plusp ,g!result) ,pos)
           ((zerop ,g!result) ,zero)
            (t ,neg))))
簡潔に書けます。
(DEFMACRO NIF (EXPR POS ZERO NEG)
  (LET ((G!RESULT (GENSYM "RESULT")))
    `(LET ((,G!RESULT ,EXPR))
       (COND ((PLUSP ,G!RESULT) ,POS) ((ZEROP ,G!RESULT) ,ZERO) (T ,NEG)))))
と展開されるんですね。
で、入れ子になった場合ですが
(defmacro/g! junk-outer ()
  `(defmacro/g! junk-inner ()
     `(let ((,g!abc))
        ,g!abc)))
この場合外側のg!が使われてしまいますので、
良く考えることが必要です。
で、次ですが、
マクロでの多重評価の問題
6. Once Only
例ですが、
(defmacro square (x)
  `(* ,x ,x))

(let ((x 3))
  (square (incf x)))

;=> 20
;??? 16を意図していたのに、
なんでかというと
(* (INCF X) (INCF X))
;=> (* 4 5)
となっているからですね。
一回だけ評価したい。
ここでonce-only
(defmacro square (x)
  (once-only (x)
    `(* ,x ,x)))
みたいに書いていと通りの結果が得られるようなマクロ
ここで
once-only解説
してみます。
どうやってつくるかを考えます。
;普通に手書
(defmacro square$ (x)
  (let ((g (gensym)))
    `(let ((,g ,x))
       (* ,g ,g))))
こんな感じになります。手書だと。
これを自動生成させたい。
ここで、
問題なのは、
引数部 x、 ボディ g で参照しているところ
分かりづらい
ので
これを、引数部 x、 ボディも xとしたい。
(defmacro square (x)
  (let ((tem x))
    (with-gensyms (x)
      `(let ((,x ,tem))
         (* ,x ,x)))))
こういう感じなら回避できる
一旦、一時変数temに格納して交換
しかし、これだと
これだと、一時変数が増えたときに面倒、with-gensymsみたいにできないかしら
こういう条件を満すのが、once-onlyですね。
(defmacro square (x)
  (let ((tem x)) ; ここを自動化(1)
    (with-gensyms (x)
      `(let ((,x ,tem)) ; ここも自動化(2)
         (* ,x ,x)))))
この(1)と(2)を自動化したい。
ちょっと急にややこしくなりますが、
(defmacro oo ((&rest vars) &body body)
  (let* ((gvs (loop :for v :in vars :collect `(,(gensym) ,v))) ; g vという並び (1)に相当
         (vgs (loop :for (g v) :in gvs :collect ``(,v ,g))) ; v gという並び (2)に相当
         (gs (loop :for (g v) :in gvs :collect g))) ;gensymを集める
    `(let ,gvs
       (with-gensyms ,gs
         `(let (,,@vgs) ;ここ鬼門な気が ((,x ,g) (,y ,gg)) ...としたい。
            ,,@body)))))
要するに、一回、入れ物をいれかえるので、面倒なんですね。

名無しさん 2008-10-11T20:30:02+09:00
むぅ、view-paste すると幅が足りない…

g000001 2008-10-11T20:30:20+09:00
おお、ほんとですね。(;´Д`)
;整理
(defmacro oo ((&rest vars) &body body)
  (loop :for v :in vars 
        :for g := (gensym)
        :collect `(,g ,v) :into gvs
        :collect ``(,v ,g) :into vgs
        :collect g :into gs
        :finally (return 
                   `(let ,gvs
                      (with-gensyms ,gs
                        `(let (,,@vgs)
                           ,,@body))))))
これが整理したバージョンです。
で、hoyte氏のアイディアですが、
o!として別のシンボルを作成して、g!に書き換える
(defun o!-symbol-p (s)
  (and (symbolp s)
       (> (length (symbol-name s)) 2)
       (string= (symbol-name s)
                "O!"
                :start1 0
                :end1 2)))


(defun o!-symbol-to-g!-symbol (s)
  (symb "G!"
        (subseq (symbol-name s) 2)))

(defmacro defmacro! (name args &rest body)
  (let* ((os (remove-if-not #'o!-symbol-p args))
         (gs (mapcar #'o!-symbol-to-g!-symbol os)))
    `(defmacro/g! ,name ,args
       `(let ,(mapcar #'list (list ,@gs) (list ,@os))
          ,(progn ,@body)))))
これで、
(defmacro! square (o!x)
  `(* ,g!x ,g!x))
みたいに書けます。
展開形
(DEFMACRO SQUARE (O!X)
  (LET ((G!X (GENSYM "X")))
    `(LET (SB-IMPL::BACKQ-COMMA (QUOTE ,(MAPCAR #'LIST (LIST G!X) (LIST O!X))))
       ,(PROGN `(* ,G!X ,G!X)))))
流れですが、
o!fooに引数の値が格納 → g!fooに束縛
内部では、o!fooで参照ではなくて、g!fooで参照。
つまり、一捻り少ないが、fooという名前は共通なので認識できる。
(o!fooという名前で参照しようと思ったら、やはり複雑になる)
ということで、割とコロンブスの卵的発想かなと思います(*'-')
ということで、時間でございますね。
かなり飛したので、
後程議論でもさせて頂きたいと思いますー(*'-')
ということで、非常にあわただしかったですが、
onjoさんの永続化へと
進んで頂ければ(*'-')

名無しさん 2008-10-11T20:34:15+09:00
そんでは、↓のリンクへ移動してください。
http://docs.google.com/Presentation?id=dhdp5xrt_34dmsjxtfj
前回の経験によれば別にGoogle アカウントでログインしなくても大丈夫なようです。

kosh 2008-10-11T20:35:00+09:00
マクロの本ということでOnLispとLOLは結構内容がかぶる箇所がありますね

g000001 2008-10-11T20:35:24+09:00
ですね(*'-')
ずいぶん、飛しましたけど、基本な
ところなので、ということもありました(*'-')
once-onlyを組み込んだ、defmacro!がおいしいところです。

kosh 2008-10-11T20:37:21+09:00
マクロ使ってオレオレ言語とか、やってないですが

g000001 2008-10-11T20:39:10+09:00
あれ、もうチャット始まってます?(*'-')

名無しさん 2008-10-11T20:39:22+09:00
はじめますよ~

g000001 2008-10-11T20:39:29+09:00
はいー(*'-')
窓は別枠で開いた方がいいみたいですね、firefoxの▼場合

kosh 2008-10-11T20:45:20+09:00
アカウントなしだとスライドしか見られない?

g000001 2008-10-11T20:45:39+09:00
大丈夫らしいですが、
自分は、別窓で開きなおしたら
観れるようになった、という経験はあります(*'-')

名無しさん 2008-10-11T20:52:40+09:00
google talkをインストールしてサインアップしないとですかね?したら見れるようになりました。

g000001 2008-10-11T20:53:18+09:00
なるほど、なるほど。
google関係は、いまいちアカウントの有無によって
どうサービス形態が違うのか、分かりにくいですよね(^^;

kosh 2008-10-11T20:55:18+09:00
うーん…ログインすることが最低条件な気がします

g000001 2008-10-11T20:55:50+09:00
スライドは無くても観れるけど、チャットには参加できない、とかですかねー。
この辺で、googleってヘルプ読んでも分かりにくいんですよねw

kosh 2008-10-11T20:56:58+09:00
そんな感覚ですね>チャットには参加できない

名無しさん 2008-10-11T20:59:30+09:00
そうですね。google talkのサインアップをするためには、googleのアカウントでログインしてることが必要かも。わかりにくいw

g000001 2008-10-11T21:00:12+09:00
google groupsでもアカウントの扱いが良く分からないので、大分混乱しました(;´Д`)

名無しさん 2008-10-11T21:46:46+09:00
loadできるようにwriteするというパターンもあるかな

g000001 2008-10-11T21:47:38+09:00
ありがとうございましたー > onjoさん
あ、NANRIさんに業務連絡なんですが
【発表者さんへの確認】ustreamでの中継、動画のアップについて
に返信して頂けると幸いです。

名無しさん 2008-10-11T21:48:31+09:00
了解です

g000001 2008-10-11T21:48:34+09:00
撮影許可の確認です。ustreamでの撮影 → ○ ニコニコ動画等へのアップ → ○
みたいな
シリアライズの問題が良くわかりました(*'-')

名無しさん 2008-10-11T21:50:26+09:00
make-load-form とか。

g000001 2008-10-11T21:50:55+09:00
ありがとうございます! >NANRIさん
永続化、次回はどうしましょう(*'-')

名無しさん 2008-10-11T21:54:35+09:00
スライド中のサンプルコードが試したい人は最新のごった煮をご利用ください。スライド中のパッチと文字列の日本語対応をCLISP用に調整してあります。

g000001 2008-10-11T21:54:37+09:00
来週、再来週、等ありますが
おお、ごった煮にはいってるってのが凄いw

名無しさん 2008-10-11T21:57:20+09:00
来週はShibuya.lispですよね。再来週かな~。

g000001 2008-10-11T21:57:41+09:00
再来週ですね、了解です(*'-')
じゃ、来週はお休みで、
21回目は、10/25日ということで
行きましょう!

名無しさん 2008-10-11T21:58:48+09:00
あれ、アカウントないと見れないのか…>スライド

g000001 2008-10-11T21:59:07+09:00
スライドは多分みれるんじゃないかと思うんですが、
リアルタイムのチャットに参加できないのかもしれませんね。
来週はどうなるんでしょうね。
ustreamでの
リアルタイム配信もある予定ではあるのですが… > Shibuya.lisp

名無しさん 2008-10-11T22:04:53+09:00
実はustreamというのも良く知らないのですが。
ブラウザで見られるんですかね?

g000001 2008-10-11T22:05:02+09:00
観れます、観れます(*'-')
リアルタイムのストリーミング配信です。
あと、チャット部屋も開設する筈です。Lingrで。
http://www.lingr.com/room/Shibuya.lisp
部屋はもうあるんですが、当日どうなるのかという。
IRCでチャットかもしれないです。
lisp_schemeで。
ということで、
みなさま、ご歓談下さいまし(*'-')

名無しさん 2008-10-11T22:10:49+09:00
LOLのカウンタは実行例が欲しかったナァ

g000001 2008-10-11T22:11:17+09:00
飛し過ぎましたw

名無しさん 2008-10-11T22:16:47+09:00
CL-USER> (setf counter (counter-class))
CL-USER> (funcall counter)
1
CL-USER> (funcall counter)
2
CL-USER> (toggle-counter-direction)
DOWN
CL-USER> (funcall counter)
1
CL-USER> (funcall counter)
0

g000001 2008-10-11T22:19:10+09:00
おおお、ありがとうございます(*'-')
すいません、ちょっと私、来週のShibuya.lispの準備で、
away気味になってしまいます(^^;
どうぞ、ご歓談をー。って今日はなんか少ないですね。

名無しさん 2008-10-11T22:22:20+09:00
はーい。

kosh 2008-10-11T22:29:19+09:00
内部変数のcounterをスペシャル変数に昇華させるとややこしい、という問題もよく聞くような

名無しさん 2008-10-11T22:33:03+09:00
それはマズイですね。

kosh 2008-10-11T22:35:26+09:00
CL-USER> (setf *counter* (counter-class))
#
CL-USER> (funcall *counter*)
1
CL-USER> (defparameter counter 100)
COUNTER
CL-USER> (funcall *counter*)
101

名無しさん 2008-10-11T22:40:15+09:00
それは危険ですよねぇ。命名規則を守りましょう。
* で囲まれた名前以外はエラーにするような defparameter とか。
let over lambdaha
規則守らないって
たしかに。
LISP STYLE & DESIGN なんかは
コメントとファイルの構成に一章さいてますね。
thisnameisveryhardtoread
ThisNameIsEasierToReadButHarderToType
this-name-is-right
↑自己ドキュメントなコードのサンプル。とてもself-commenting
単語は - で区切るべし、と。
スペシャル変数は ** で囲む。defvar, defparameter, defstruct, define-setf-method にはドキュメント文字列をつけろ、とか。
述語の p の規則:
1. すでにハイフンつきの名前には -p をつける。hash-table-p
2. ハイフンなしの名前には直接p。 => alphanumericp
3. 修飾子 - 述語名の場合は既存の述語名のまま => char-lessp

kosh 2008-10-11T22:56:37+09:00
郷に入っては郷に従え、ですね

名無しさん 2008-10-11T22:58:55+09:00
あれ?スペシャル変数ってそうゆう動きなんでしたっけ?忘れてるというか、理解してないかもです。< 内部変数のcounterをスペシャル変数に昇華させる
REPL で実行した場合はあーなるでしょうね。
(defparameter counter 100)
する前に compile しておくと、
大抵の処理系は最後の (funcall *conter*) は 2 を返すような気がする。

kosh 2008-10-11T23:04:38+09:00
CLISPはコンパイルでいけたと思います
内部変数をgensymで生成する方法もありますね

名無しさん 2008-10-11T23:06:01+09:00
あれ、Allegro だとインタプリタでも 2 が返る…
そうなんですか。コンパイルしない場合には、スペシャル変数が参照されるようになるんですね。こりゃ復習が必要だ;;
処理系によって違う?
あーちゃいます
インタプリタで、 couter-class が返すクロージャの
(let ((counter 0)) (lambda () (incf counter)))
の incf counter は、定義した時点ではレキシカルな変数 counter ですが、
その後で defparameter counter すると、スペシャル変数な counter の参照になるかなーと思ったんです。
コンパイルしちゃえば、レキシカル変数の参照のままで閉じちゃうから 2。インタプリタなら後の defparameter が効いて 101 かなーと。
内部的にシンボルをいつまで持っているか?
という話ですね
ありがとうございます。完全ではないですが理解できた気がします。
一応、clispで試したら、コンパイル後は、スペシャル変数定義後も、レキシカル変数を参照できていました。
でも fasl 消してから、再度コンパイルしたらスペシャル変数のほうを見ちゃうでしょう。たぶん。
規格ではREPLでのdefparameterの副作用は implementation-definedとなってますから、どっちでもいいんでしょう。
implementation-definedでしたか。。 とにかく、命名規則を守りましょうということですね。
そうそう。守れば別に困らない。
LOL…
これはインタプリタの実装の自由度のためにあるんじゃないかな。環境の実装とかで差がでるんでしょう。
Allegro のインタプリタも一応、自分が counter という変数を参照している、ということは覚えている。
(defun counter-class ()
    (let ((counter 0))
      (lambda ()
	(print (multiple-value-list (sys:variable-information 'counter sys:*interpreter-environment*)))
	(if (eq direction 'up)
	    (incf counter)
	  (decf counter)))))
こんなんすると、
CL-USER> (setf fn (counter-class))
#
CL-USER> (funcall fn)

(:LEXICAL (0) NIL :OUTER) 1
CL-USER> (defparameter counter 100)
COUNTER
CL-USER> (funcall fn)

(:LEXICAL (1) NIL :OUTER) 2
CL-USER> 
あれ、表示がすごく遅い…
こうなる。定義時点の :LEXICAL な counter を参照している。
逆にCLISPのインタプリタは実行時に後からdefparameterga
効くような実装になっているということでしょう。
気をつけましょう…といいたいところですが、これで自分の足を撃ったことはないなぁ。
なるほど。Allegroの場合は参照先が変わらないんですね
clispを使ってるので、気をつけます、というか、命名規則にw
そうそう。Allegro でも defparameter counter 後にもう一度定義しなおすと、
CL-USER> (setf fn (counter-class))
#
CL-USER> (funcall fn)

(:SPECIAL NIL NIL :OUTER) 101
CL-USER> 
こうなるし。一度スペシャルにすると(ポータブルには)戻せないですからね。

g000001 2008-10-11T23:43:18+09:00
どうも変だなあ、Lingr

名無しさん 2008-10-11T23:44:51+09:00
スペシャル変数の変数名は、*で囲むという命名規則は、始めて見たとき妙に感じたけど、特別なものとして扱わないとけないという先人の教えなんですね :)
あ、だからスペシャル変数という名前なのか?
寝むたくなってきたので、消えます。おつかれさまです。
お疲れ様です。
なんか遅いですよね>lingr

kosh 2008-10-11T23:49:03+09:00
おやすみなさいー>smegheadさん

g000001 2008-10-11T23:49:43+09:00
おつかれさまですー('-'*)

名無しさん 2008-10-11T23:55:48+09:00
そろそろ寝ます。明日ちょっと早起きが必要ですんで。おやすみなさい。

g000001 2008-10-11T23:56:11+09:00
おやすみなさいましー

kosh 2008-10-11T23:56:36+09:00
お疲れさまでしたー
ちょっと前にLingrがシステム調整のために落ちた日があった気がするんですが、効果なかったんでしょうか
あれ2回もw

g000001 2008-10-12T00:27:01+09:00
どっかが調子わるいのでメンテしたって感じなんですかねー
わりと崩れるとどうにもならないというLingr ww
:(|)
復活したかな
 lisp50のタイムテーブルが発表になった模様。
http://lisp50.blogspot.com/2008/10/lisp50-schedule-is-now-available.html
見た過ぎる!! 中継とかしないのかこれは!

名無しさん 2008-10-14T09:16:13+09:00
同じく、見た過ぎる!! やっぱ、50年ってのは言語にとってはすごいことなんですねぇ。

g000001 2008-10-14T09:32:12+09:00
ですねー(*'-') しかし、これは映像に記録しないのは犯罪だと思うんですよね(笑)
:(|)
 全然情報を追えてなかったのですが、
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/
数理システム ユーザーコンファレンス 2008 2008年 11月 14日(金) @六本木ヒルズ 49F
MOP (Metaobject Protocol) in one day 11月13日 (木) 09:00 〜 16:00 @新宿
今年もセミナーがあるんですね。しかも、MOPの回とか濃すぎる(*'-')
MOPの回は、AMOPをやるみたいですね。参加しようかなー。

名無しさん 2008-10-14T10:04:25+09:00
おぉ、予定が公開されたんですね。 > MOPセミナー

g000001 2008-10-14T10:06:14+09:00
 6時間位AMOPって濃そうなんですが、PCは使えないそうなので、必死にノートを取ることになるのでしょうか(笑)

名無しさん 2008-10-14T10:09:51+09:00
「講義形式: 講師が一方的にしゃべる」ですからねw。私はたぶん参加しちゃいます。

g000001 2008-10-14T10:15:26+09:00
 おお!、参加されるんですか(*'-') 自分も後悔するのもなんなんで一応申し込みメールしてみました :)

名無しさん 2008-10-14T10:22:29+09:00
私も先ほど申し込みメール出しました。黒田さんの話は期待大です。

g000001 2008-10-14T13:06:02+09:00
 とりあえず、11/13日までに、OOPCLと、AMOPをさらっとでも読んでおかねば(;*'-')

名無しさん 2008-10-14T19:12:58+09:00
メールでの告知はまだなんすかね
そろそろかなぁとメールを待ってましたけど、Webで告知があったんですね。

g000001 2008-10-15T08:07:24+09:00
 みんなもうとっくに知ってるのかと思いきや、ウェブでの告知は最近だったんですね。
LISP1.5のエミュレータ関係の配布サイトなくなっちゃったのかな。
http://web.archive.org/web/20070616032224/http://www.b54.org/lisp15
 配布停止だと寂しいなあ。せっかくLISP1.5がIBM7094の上で動くのに(笑)
まあマニアックすぎる気もしますが…。

名無しさん 2008-10-15T12:42:49+09:00
ここCL@Lingrの管理人であるg000001さんに提案なのですが
右上の説明文の欄にcaddr-MLへのリンクを貼ったらどうでしょうか。
フラっとこの部屋を見にきた人が、MLで勉強会等の告知を知ることができるんじゃないかなーと思ったので。

g000001 2008-10-15T12:43:06+09:00
こんにちはー(*'-')
なるほど、なるほど
早速そうしてみますー(*'-')

名無しさん 2008-10-15T12:43:45+09:00
早いw
対応ありがとうございます

g000001 2008-10-15T12:44:14+09:00
 IRCから接続してるので、自分の名前が呼ばれると、音がなるので反応のが早くなりました(笑)
s/のが/が/
 字数が多いと省略されてしまうので、無理矢理気味にねじこんでみました(笑)

名無しさん 2008-10-15T12:51:38+09:00
ありがとうございます

g000001 2008-10-15T12:52:05+09:00
 いえいえー、字数制限がないともう少しすっきりするんですが…。

名無しさん 2008-10-15T12:52:49+09:00
これで新規の方が少しでも増えればうれしいかも

g000001 2008-10-15T12:52:59+09:00
ですねー(*'-')
 おおー,EclipseというCL-to-CなANSI CL処理系があったのかー
http://web.archive.org/web/20010617093600/http://www.elwood.com/eclipse/eclipse.htm
UTF-8サポートで$500ということで、消滅したのは惜しかったですなー。
 comp.lang.schemeにShibuya.lisp TT#1の告知が投稿されました。NANRIさんも世界のNANRIとなりました(笑)
http://groups.google.com/group/comp.lang.scheme/browse_thread/thread/517003748aa265ec#
:(|)
(provide 'news)
SCLにお試し版ができたようです。
http://groups.google.co.jp/group/comp.lang.lisp/browse_thread/thread/950e56d9529fffaf
http://www.scieneer.com/scl/free.html
自分も登録してみましたが、ダウンロードは申し込みは許可待ちという謎。
どうやら、売り物も大分安くなってるっぽいですね。$299とか。

名無しさん 2008-10-16T19:05:42+09:00
こんばんは
「世界の~」って(苦笑)

g000001 2008-10-16T20:59:50+09:00
いやー、
世界にはばたいて下さい(笑)
うーん、SCL
SBCLの方が速いような…。
マルチスレッド環境は強いのかな。
なんとなくだけれど、
駄目なコードはより遅くなる感じがするので、
最適化の練習になるような気はしないでもないです(笑)
UTF-8も通って、SLIMEでも日本語が使えるのが
うれしいですね。

名無しさん 2008-10-16T21:27:40+09:00
そうなのか…

g000001 2008-10-16T21:28:13+09:00
SBCLが速いのかもしれないですねー
あ、コンパイルしてないかも
関数を
SBCLに馴れきってるので、確認してないや。
いや、C-c C-cだから、compile defunで、コンパイルはしてたのか。
smpを活用汁みたいな
感じで、眠りに就きたいと思います :(|)
 うーん、SCLは、コアイメージを作成して使ったら、メモリ関係のエラーが起きる。なんでだろう。
うーん、これはなんでなんだろう。
*** glibc detected *** /opt/scl/bin/lisp: free(): invalid pointer: 0x0000000000698570 ***
======= Backtrace: =========
/lib/libc.so.6[0x7fa064e9c08a]
/lib/libc.so.6(cfree+0x8c)[0x7fa064e9fc1c]
/opt/scl/bin/lisp(call_into_c_int+0x38)[0x410318]
======= Memory map: ========
とりあえずは動いてるけれど。

kosh 2008-10-18T15:51:58+09:00
Shibuya.lisp テクニカルトーク #1
もうすぐ始まりますね。

g000001 2008-10-18T21:18:33+09:00
こんばんはー
あまりShibuya.lispのustを眺めながらチャットで会話、みたいなことにはならなかったようですね(笑)

kosh 2008-10-18T21:21:42+09:00
こんばんはー

g000001 2008-10-18T21:21:51+09:00
こんばんはー(*'-')
ustream観て頂けましたでしょうか

kosh 2008-10-18T21:22:04+09:00
おつかれさまでした>g000001さん

g000001 2008-10-18T21:22:24+09:00
お疲れさまですー

kosh 2008-10-18T21:22:52+09:00
一応全部見たつもりです
g000001 2008-10-18T21:23:05+09:00
ちょっと音声が割れてるかもですね。
自分も今確認しつつ眺めているのですが、

kosh 2008-10-18T21:23:17+09:00
ただ、途中で睡眠不足が祟って。。。

g000001 2008-10-18T21:23:24+09:00
まあ、それなりに観れるかなという感じですね。
(笑)
ちょっと突っ込んだ内容が多かっただけに(笑)

kosh 2008-10-18T21:25:03+09:00
ヘッドホンで聞いてましたが十分聞けましたね
なんで途中で音声がとぎれたのかなー、自分の環境かな?

g000001 2008-10-18T21:26:14+09:00
ストリームなんで、途切れる可能性はありますね

kosh 2008-10-18T21:28:16+09:00
あとustreamにもチャット機能があったのでShibuya.lisp@Lingrに人が回らなかったのかもしれませんね

g000001 2008-10-18T21:28:28+09:00
なるほど、なるほど
チャットの会話は、
それなりにされてました?

kosh 2008-10-18T21:30:14+09:00
見ている方が多かったかも。。。

g000001 2008-10-18T21:30:25+09:00
なるほど、なるほど

kosh 2008-10-18T21:31:03+09:00
分かりそうな所に合の手打ったり、www入れたりとかくらいです

g000001 2008-10-18T21:31:21+09:00
おおお、そんなライブなことが(笑)

kosh 2008-10-18T21:31:49+09:00
そのためのチャットですからw

g000001 2008-10-18T21:32:01+09:00
なるほど、なるほど(笑)

kosh 2008-10-18T21:33:41+09:00
CLの人はどれくらい集まったor見ていたんでしょうね

g000001 2008-10-18T21:34:18+09:00
私の周りは、CLerでした(笑)
周囲4人はCLerでしたが、
他はどうだったんでしょうね。
やっぱり、Gaucheが元気良いなという感じでしたね。

kosh 2008-10-18T21:37:20+09:00
「動くもの」を紹介したのが大きいのかも

g000001 2008-10-18T21:37:49+09:00
ですね、インタラクティブなデモが多かったかも

kosh 2008-10-18T21:41:10+09:00
懇親会、終わりましたか?

g000001 2008-10-18T21:41:20+09:00
いや、自分は引きこもりなので、
懇親会は遠慮させて頂いて、
自宅なわけなのです(笑)

kosh 2008-10-18T21:41:54+09:00
なるほど

g000001 2008-10-18T21:42:23+09:00
今日は、土曜なのに、あまり人がいませんねー
やっぱりそれなりに勉強会で集合していたということだったのかな

kosh 2008-10-18T21:43:13+09:00
それはありそうですね<勉強会

g000001 2008-10-18T21:43:55+09:00
自分の妄想では、
ustreamをみながら、盛り上がってくれたらと思っていたのですが、
現実はなかなか厳しい(笑)
Schemeも含めてもうちょっと盛り上がると思ったんですが…。

kosh 2008-10-18T21:46:45+09:00
そういえばCLerより多いはずのSchemerもあまり話していないような…

g000001 2008-10-18T21:46:56+09:00
そうなんですよねー

kosh 2008-10-18T21:48:02+09:00
趣味が合っていてもやはり他人同士ですから、話しにくいのかも

g000001 2008-10-18T21:48:22+09:00
会場では、割と会話が弾んでませんでした(笑)
やっぱり、ハンドルと顔が一致してないので、
ちょっと判定に難があるかもしれないですね
今回ネームプレートが用意されていたのですが、
これは正解でしたね(*'-')

kosh 2008-10-18T21:50:44+09:00
たしか、g000001さんはsnmstsさんとNANRIさんに面識があるんでしたよね(突発的CL勉強会で)

g000001 2008-10-18T21:51:17+09:00
ですね、今日は、snmstsさんともNANRIさんともちょっと話ました(*'-')
あと、queckさんとか、bulbさんともお話できました(*'-')

kosh 2008-10-18T21:51:51+09:00
おお

g000001 2008-10-18T21:52:17+09:00
s/queck/quek/さん
あと、tszともお話できましたね、CLerでは。

kosh 2008-10-18T21:55:11+09:00
すいません、勉強会でのg000001さんの面識の話まちがってました

g000001 2008-10-18T21:55:52+09:00
あ、snmstsさんは、他でですね、そういえば(笑)
面識自体はありますね。snmstsさんは近所なので(笑)

kosh 2008-10-18T21:58:54+09:00
あ、近所でしたかw

g000001 2008-10-18T21:59:38+09:00
3、4km位は離れてる気はしますが、歩いて行ける距離ではあります(*'-')

kosh 2008-10-18T22:01:11+09:00
世界はせまいですね

g000001 2008-10-18T22:01:24+09:00
ですね(笑)
ちなみに、私は自分のブログをGoogle Analisysで
観てるんですが、
渋谷と、新宿と、世田谷、からのアクセスが
全体の4割程度を占めてまして、
非常に狭いんじゃないかと思っています(笑)

kosh 2008-10-18T22:02:32+09:00
東京方面でないCLerといえばonjo,yas,zick,smeghead,you_zさんとあと誰がいたかな…

g000001 2008-10-18T22:03:06+09:00
多分、この方々は読んでくれてないんですね(笑)
京都はちょっとアクセスあるかも
CLerは全国にちらばってるんですよねー。

kosh 2008-10-18T22:08:50+09:00
撮影された動画の配信はいつごろの予定でしょうか?

g000001 2008-10-18T22:09:04+09:00
これがまだ全然未定なのですが、
フラッシュの動画を加工して、ニコ動に
アップするという流れを予定してますね、近日中にですが‥。
それまでは、ustreamのページで
確認して頂くという感じですかね。
自分も今確認がてら観てますが(笑)

kosh 2008-10-18T22:10:57+09:00
なるほどです。ニコニコですか

g000001 2008-10-18T22:11:23+09:00
なんか、テクニカルなものは、ニコ動にアップされるっぽいので(笑)

kosh 2008-10-18T22:12:26+09:00
アカウントが必要ですがコメントできるのはやはり大きい。

g000001 2008-10-18T22:12:50+09:00
ああ、なるほど、コメントですか
なるほど、なるほど

kosh 2008-10-18T22:15:35+09:00
折角のイベントのあとの
土曜日だからもっと人が集まればなあ
g000001 2008-10-18T22:16:50+09:00
ですね、割と閑散としてて
なんとなく感想とか聴きたかったんですが(笑)

名無しさん 2008-10-18T22:18:19+09:00
風呂上りに来た。

g000001 2008-10-18T22:18:28+09:00
こんばんはー(*'-')

kosh 2008-10-18T22:18:33+09:00
そういえばここで反省会をしようかという提案もあったような

名無しさん 2008-10-18T22:18:42+09:00
今日のイベントはせいこうしたんでっか?

kosh 2008-10-18T22:18:44+09:00
こんばんはです

名無しさん 2008-10-18T22:18:59+09:00
おばんですぅ。

g000001 2008-10-18T22:19:00+09:00
それなりに良かったんじゃないかと思ってますねー。

名無しさん 2008-10-18T22:19:37+09:00
にゃる。いろんな顔のつながりが出来たらg000001さんにもプラスになるよ。きっとね

g000001 2008-10-18T22:19:47+09:00
ただ、ネットじゃあんまり盛り上がってなかったみたいで(笑)
どうなんですかね(笑) > プラス

kosh 2008-10-18T22:20:22+09:00
ん、yasさんはまだustream見てないですか

名無しさん 2008-10-18T22:20:23+09:00
koshさんははじめましてかな。
音声は聞いてないけど、所々見てました。ゆうめしのあと。

kosh 2008-10-18T22:20:55+09:00
はじめましてkoshです>yasさん

名無しさん 2008-10-18T22:21:44+09:00
フラクタルの画像でglを使って何かやってるなぁ。とかRPGのエンジンになってるんだなぁ。とか簡単な感想ですかね。深いところはよく分かってないもので^^;
よろしくね
g000001さんはclerのまとめに頑張ってたんだし、なにかご褒美があってもおかしくはないさ。笑

g000001 2008-10-18T22:23:04+09:00
自分は、特にCLer界に期待はしてないですねー(笑)

kosh 2008-10-18T22:23:18+09:00
動画配信とは別に、スライド(ppt)も見れるようにならないかなあとリクエストしてみます

g000001 2008-10-18T22:23:33+09:00
一応、予定してまして、

kosh 2008-10-18T22:23:39+09:00
細かい文字が見にくかったので

g000001 2008-10-18T22:23:46+09:00
mitamex4uさんは、アップは確定してたと思います。
Shibuya.lispのトップページから紹介するとかしようかなと思ったりはしています。

名無しさん 2008-10-18T22:24:26+09:00
ustreamからもプログラムを書いていたところはよめなかった。

g000001 2008-10-18T22:24:38+09:00
ですね、自分も今確認しているのですが、
コードはちょっと判読が、難しいかもと思いました

kosh 2008-10-18T22:27:01+09:00
個人的に最初の「俺Lsip」が一番印象でしたね

g000001 2008-10-18T22:27:31+09:00
あれ、今の現状というか、現実にマッチしてる感じで、
素晴しかったですよねー。

kosh 2008-10-18T22:28:06+09:00
Lisp
ぽくないのに中身はLispみたいな

g000001 2008-10-18T22:28:52+09:00
ですね。Dylanっぽいですねー。
Dylanは、元々S式だったんですが、
途中からAlgol系になっただけに、
やっぱりlispですね(笑)
しかし、アンチS式の主張が割と多かったのが、
ちょっとどうにかしないといけないですね(笑)
単純に馴れだと思うんだけどなあ。

名無しさん 2008-10-18T22:33:57+09:00
アンチS式かぁ。

g000001 2008-10-18T22:33:59+09:00
自分とか、Algol系の方が生理的にだめなんですが、

kosh 2008-10-18T22:34:05+09:00
括弧の群を見て安心するのがLisperだとおもうんですけどねえ

g000001 2008-10-18T22:34:23+09:00
なんでかというと、S式系でしか書いたことがないからというのが理由だと思うのですね。
これの逆パターンが多分通常なので、

名無しさん 2008-10-18T22:34:48+09:00
郷に入れば郷に従えか、俺様にあわせろかの違いか。

g000001 2008-10-18T22:35:02+09:00
そんなに、人間の生理に反してるとまでは行かないかなと思いますねー。
LISPは基本的に、括弧とその中身だけなので、
非常に簡単ですよね。
(+ 3 3 3 3 3)とか 3 + 3 + 3 ...より簡単で良いという。

kosh 2008-10-18T22:38:22+09:00
LISPは人にやさしくない、コンピュータにやさしいんだと誰かが言ってたような

g000001 2008-10-18T22:38:33+09:00
それ、mitamexさんですね(笑)

名無しさん 2008-10-18T22:38:38+09:00
最初にlispをやっておかないとアンチSになる確率はかなり高いと思ってる。

g000001 2008-10-18T22:39:06+09:00
ま、あと、EMACSに馴れてるか、とか、そういうところもありますし、
簡単には一言で言えないっぽいですが、読みにくいかというと
優先順位とか考えなくても良いし、
脳に負担は少ないと思いますよ(笑)

kosh 2008-10-18T22:41:26+09:00
このLisper主張がなかなか理解されない。。。<優先順位

g000001 2008-10-18T22:41:55+09:00
おおー、そんなもんなんですか(笑)
なんていうか、ですね、
一々括弧で囲むのは面倒かもしれないですが、
楽ですよね。

名無しさん 2008-10-18T22:42:32+09:00
負担を感じるのは頭が固くなった後にS式を触ろうとするってのもある。なれるまではちょっとイラつくけどなれたらS式の方が理解が速いというのはよく分かるんだけどね。

g000001 2008-10-18T22:43:08+09:00
多分マクロを考え始めれば、
S式じゃないと現実的に無理って感じじゃないかあなあと
思ったりもしますね。

名無しさん 2008-10-18T22:43:51+09:00
あのシンプルさが柔軟性を作ってるからね。

g000001 2008-10-18T22:44:03+09:00
メタにいじると元が単純じゃないと操作できないですし(*'-')

kosh 2008-10-18T22:44:06+09:00
リストとアトムだけ

g000001 2008-10-18T22:44:11+09:00
ですねー。

名無しさん 2008-10-18T22:45:02+09:00
複雑な文法で柔軟性を実現しようとするとかなりいろんな知識が必要になりすぎるから、人の能力の限度を簡単に越えてしまう。

g000001 2008-10-18T22:45:41+09:00
ですよねー。
あと、S式だと括弧に囲まれているので、
スコープとかの範囲が
判別しやすくて良いですよね。
これもマクロに関係してきますが(笑)

kosh 2008-10-18T22:48:03+09:00
まだスペシャル変数の束縛あたりがよくわかっていませんすいません

g000001 2008-10-18T22:48:44+09:00
トップレベル問題は自分も分かりません(笑)
自分の大まかな理解では、
スペシャルは、名前でアクセスするもので、
レキシカルは、値というかスコープで考えるものという
感じで大まかに考えています。
基本レキシカルで考えて、

kosh 2008-10-18T22:49:48+09:00
はいはい

g000001 2008-10-18T22:50:00+09:00
スペシャルは、後で必要になったらという感じで
良いんじゃないかなみたいな。
どうして名前で、という考えかというと、
実行時にアクセスする際には、シンボルの名前で
判定してることが多いというか、
スペシャルはそういう感じなので、
そういう風に大まかに考えてますね、自分は。
CLの落し穴でもやりましたが、(let ((x 3)) x)は、
(let () 3)みたいに即値に置き換えられる可能性もあるってありましたが、
そういうのもイメージしながら考えてますねー。
基本的にレキシカルな変数は、一時的に名前がついてるだけで、
コンパイルすると無名になっちゃう、みたいな。
でも、インタプリタ環境で、名前でアクセスできる拡張とかあるみたいですけど(笑) > allegroとか

kosh 2008-10-18T22:54:06+09:00
あーなるほど<コンパイルで無名変数

g000001 2008-10-18T22:54:33+09:00
スペシャルな場合は、実行時なので、
人間の読めるままというか、コンパイル後もシンボル名が生きてるみたいな。
ただ、トップレベルの動作が、これに当てはまらなかったのが、
ショックでした(笑)

kosh 2008-10-18T22:57:21+09:00
CLtL2のどこかにきっと定義されているはずだと思うんですが…

g000001 2008-10-18T22:57:42+09:00
トップレベルのsetqは、LOLみたいな本で書いて、
ああいう結論なので、
規定されてなかったりするんですかねー。
トップレベルのsetqで、symbol-valueにも値が入っちゃうのが、
イレギュラーというか、
ただ、トップレベルなので、どっからでも見えるんで、そりゃそうでしょうね、と思ったり
複雑です(笑)

kosh 2008-10-18T22:59:15+09:00
きっとelispのせいだ!

g000001 2008-10-18T22:59:49+09:00
いや、でも、ELISPより、CLの方が古いんですよ(笑)
もともと、CLより前の処理系は、レキシカルスコープじゃないので、
色々あるんでしょうね。

kosh 2008-10-18T23:01:23+09:00
コンパイルの都合で静的バインディングになった、でしたっけ
g000001 2008-10-18T23:01:39+09:00
それもありますね。
それまでは、インタプリタで、動的スコープ、コンパイルしちゃうと
静的スコープだったりしたので
割と色々面倒なことになったりしたようです(笑)

kosh 2008-10-18T23:02:56+09:00
ほう。

g000001 2008-10-18T23:03:12+09:00
1984年、当時は、それも売り文句だったようですね。

kosh 2008-10-18T23:05:18+09:00
Lispの人気の話ですが

g000001 2008-10-18T23:05:28+09:00
はいはい(*'-')

kosh 2008-10-18T23:05:32+09:00
何かの拍子でLispに目が向けられれば、あとはホイホイ上手くいくのではないか
そんな妄想が実現しないかなあ、と

g000001 2008-10-18T23:06:13+09:00
なるほど、なるほど
私が個人的に感じていることなのですが、
流行らせようと思って動く人がいない限りは、
流行らないのではないだろうかと、最近思ったりしてるんですよね
言語の素性が良ければ、勝手に流行るものでもないのかなあと、いう
気がしてますねー。

kosh 2008-10-18T23:07:40+09:00
動く人か…

g000001 2008-10-18T23:07:51+09:00
多分、Perlにしろ、Rubyにしろ、流行らせようと思ってがんばった人がそれなりにいた筈じゃないかなと(笑)
ですね、動く人がいないのが、問題じゃないかなと最近思ってるんですよね。
ま、しょうがないですけど(笑)

kosh 2008-10-18T23:08:37+09:00
それならば今のLispコミュニティはきっと上手くいくはず

g000001 2008-10-18T23:09:07+09:00
何となく言語の素性が良いから、理解されれば流行ると上段に構えてる方が多いんじゃないかなあと。
ですね、それなりに動きが出てきたのは良いことですねー。
あと、GaucheでSLIME並に便利な環境ができれば、
LISPって楽なんだよー、って流れになる気もするんですよね。

名無しさん 2008-10-18T23:10:54+09:00
gaucheに関しては本を出したりしているから、はやらせようと思って頑張っている人はいると思うよ。

g000001 2008-10-18T23:11:13+09:00
ですね、Gauche組の方々は頑張ってらっしゃいますね。

名無しさん 2008-10-18T23:11:17+09:00
それでビジネスチャンスを伺ってるグループもあるやん。

g000001 2008-10-18T23:12:13+09:00
今、CLの話ができてる現状も自分は、Gaucheのお蔭さまかなと思っています(笑)

kosh 2008-10-18T23:13:10+09:00
NANRIさんの発表中に誰かが「自分で定義した関数の引数が見られるのはいいなあ」って言ってましたね

g000001 2008-10-18T23:13:21+09:00
あ、ひげぽんさんですね。
あれは、Schemeじゃできないですよね。

kosh 2008-10-18T23:13:43+09:00
初耳でした

g000001 2008-10-18T23:14:03+09:00
CLの場合は、コンパイルした時に、定義の情報を
色々持ってたりするので、
それを呼ぶことが可能なんですね。
Schemeの場合は、defineで、
メタな情報は基本的にもたせないので、
エディタ側で、タグを引いたりして
実現するわけですね。

kosh 2008-10-18T23:15:16+09:00
その所はCL恵まれているなあ

g000001 2008-10-18T23:15:22+09:00
SLIMEの場合は、処理系に問合せてますねー。
ドキュメント文字列とかもそうですね。
あと、ソースコードに飛ぶ機能とかもですね。
この辺は、Schemeだと処理系毎に色々工夫という。
CLも処理系ごとにというところはありますが、

kosh 2008-10-18T23:16:21+09:00
以前g000001さんに煽られた記憶が。

g000001 2008-10-18T23:16:40+09:00
大体の処理系はサポートしてますね。
そうそう、これは、Lispマシンの時代からある機能なので、
無いのはある意味退化ですね(笑)
でも、Schemeは思想が違うので、
ちょっと一緒くたには言えませんが。
Lispマシンから退化してる部分って結構あるんですよね。
Symbolicsの環境が未だに一番っていう人は割と古株のLisperにはいるみたいです。

kosh 2008-10-18T23:18:30+09:00
手元にあるGCLにarglist関数は見当たらなかったんですがなんでなんでしょう
> (fboundp 'argslit)
NIL

g000001 2008-10-18T23:19:09+09:00
この辺は処理系依存なのでじゃないですかね(*'-')

kosh 2008-10-18T23:19:30+09:00
要らない機能とは思えないんですが…

g000001 2008-10-18T23:19:38+09:00
ですねー。

名無しさん 2008-10-18T23:19:42+09:00
焼酎がまわってきたんで寝る。おやすみ

g000001 2008-10-18T23:19:49+09:00
はいー、お休みなさいましー(*'-')
でも、1984当時のスペックを考えると
その辺は処理系依存になっててもという感じなのかもしれませんねー。

kosh 2008-10-18T23:20:18+09:00
よい夢をみてください>yasさん

g000001 2008-10-18T23:21:18+09:00
今日のNANRIさんのed関数についても
Lispマシンでは割と自然な動作で
(ed "file.lisp")とすれば、emacsが起動します(*'-')

kosh 2008-10-18T23:22:03+09:00
今後のバージョンアップによっては関数が追加されるかもしれませんね
g000001 2008-10-18T23:22:10+09:00
Emacsじゃなくて、Zmacsですが。
ですねー > arglist

kosh 2008-10-18T23:22:37+09:00
emacsの中でzmacs
なんだか奇妙な感じ

g000001 2008-10-18T23:23:10+09:00
Lispマシンの環境って割とSLIMEみたいな感じで
使い易いんですよね。
cadrのエミュレータとかお勧めです(*'-')

kosh 2008-10-18T23:24:24+09:00
気が向いたら手を出してみますw<エミュレータ

g000001 2008-10-18T23:24:44+09:00
変なものが沢山ありますよ(*'-')
once-onlyとかもLispマシン由来で、CLtLで消えたという。
便利なものも多いんですよね。
とりあえず、
http://www.cliki.net/Lisp%20Machine%20Videos
このリンクの動画を眺めるだけでも
結構面白いですよー。

kosh 2008-10-18T23:27:32+09:00
おお、ありがとうございます

g000001 2008-10-18T23:28:47+09:00
という感じで、今日は、自分は早起きだったので、
燃料切れな感じなので、
そろそろお暇させて頂きたいと思います〜(*'-')

kosh 2008-10-18T23:29:33+09:00
お疲れ様ですー

g000001 2008-10-18T23:29:37+09:00
はいー、お休みなさいましー('◇')ゞ

kosh 2008-10-18T23:30:09+09:00
ゆっくり休んでくださいまし

名無しさん 2008-10-19T00:09:03+09:00
ちょっと反省って感じだったなぁ
次リベンジということで

g000001 2008-10-19T00:09:53+09:00
こんばんはー、動画をもう一回見直してみたんですが、

kosh 2008-10-19T00:09:57+09:00
おつかれさまでした>NANRIさん

g000001 2008-10-19T00:10:03+09:00
全然大丈夫でしたよ。
寝るといってまだ寝れてないのですが(笑)
まだ、まとめの仕事がありました(笑)

名無しさん 2008-10-19T00:14:02+09:00
緊張で七割とか八割程度しか、話せてないんですよ。話したかったことが、けっこうぽんぽん抜けてます。

g000001 2008-10-19T00:15:44+09:00
おお、それは意外。大分堂々としてた印象が(笑)

名無しさん 2008-10-19T00:16:41+09:00
電車乗って帰ってきた
歩数をみたらもう15キロ歩いたことになっていたので
もういいやと
お疲れさまです
NANRIさんこそお疲れ様です
椅子を並べるのと、占めの挨拶しかしておらんので、普通の参加者未満の疲労度ですだ

kosh 2008-10-19T00:18:35+09:00
開発側としては仕様がきまっているのは助かるけど、利用する側としてはやっぱり完成したものが見たいのかなあと思いました。
おつかれさまです>snmstsさん

名無しさん 2008-10-19T00:19:47+09:00
実践の読書会の印象としては
format ~Rとか
そこらへんで受けを狙うとか
そういうネタも混ぜられるしー
とかは思っていたんですけど、ネタあわせをしておきたかったなぁ…という感じ
でした。

g000001 2008-10-19T00:22:14+09:00
edが受けてましたね(笑)

名無しさん 2008-10-19T00:22:21+09:00
ましたねぇ

kosh 2008-10-19T00:22:26+09:00
次回はさらに面白い話を期待しています

名無しさん 2008-10-19T00:22:53+09:00
ネタあわせはやっとくべきだったかなと自分も思いました。資料を作る遅さが敗因かなと
あー
そういえばg000001さんを藤田さんが懇親会で探していました

g000001 2008-10-19T00:25:17+09:00
あれ(笑)

名無しさん 2008-10-19T00:25:18+09:00
凄く残念な気持ちになりました

g000001 2008-10-19T00:25:45+09:00
ご挨拶はしたんですが、多分、認識はされてないでしょうね(笑)

名無しさん 2008-10-19T00:25:46+09:00
会場で一言もだったんすか…。

g000001 2008-10-19T00:25:56+09:00
あと、yuumi3さんとか(笑)

名無しさん 2008-10-19T00:26:12+09:00
えー
そんな馬鹿な…

g000001 2008-10-19T00:27:16+09:00
ま、自分は、オンライン専用なので、snmstsさん、NANRIさんに補って頂ければと!

名無しさん 2008-10-19T00:27:42+09:00
補いきれないっス

g000001 2008-10-19T00:28:17+09:00
いやいやそんな(笑)
立ち位置が微妙なだけに、なかなかオンライン以外ではからみづらいんですよねー。
立ち位置ってのは、自分の立ち位置ですが(笑)

名無しさん 2008-10-19T00:32:32+09:00
孤高な在野のlispヒストリアン!
オフラインでもオンラインでも印象変わらないんですけど〜

g000001 2008-10-19T00:33:47+09:00
とりあえず、
これを機に
もりあがると良いですねという
割と参加者は、好感触みたいなので(*'-')
オンラインでは、それなりに眺めてみたんですが、
反応薄めですね(笑)
そこがちょっと残念。

名無しさん 2008-10-19T00:35:53+09:00
反応がちょっと分からないというのは確かに感じました

g000001 2008-10-19T00:36:46+09:00
ですね、何が受けるのかという
やってみないと分からないところが多いですねー。

kosh 2008-10-19T00:38:55+09:00
チャットはあまりでしたが、ustreamを見た人はブログに書いたり何かしら話題にするかな

g000001 2008-10-19T00:39:23+09:00
なんかそういうエントリも1件あるみたいですね

名無しさん 2008-10-19T00:45:23+09:00
画質はともかく音質は自分取りの方が良いなー
g000001さんのコメント入り
ナイスな感じ

g000001 2008-10-19T00:46:13+09:00
コメントですか(笑)

名無しさん 2008-10-19T00:46:18+09:00
それは公開されるんですか?(笑)

g000001 2008-10-19T00:46:39+09:00
スタッククロージャが分かんないんですよー、ってbulbさんにしきりに話し掛けてるかもしれないですね(笑)

名無しさん 2008-10-19T00:46:51+09:00
そっすね
あー
なんかustみるよりも聞きやすくはある…

g000001 2008-10-19T00:47:42+09:00
ustちょっと割れちゃってますね。

名無しさん 2008-10-19T00:48:04+09:00
割れてるってよりも音ひろっちゃってる感じですね

g000001 2008-10-19T00:48:18+09:00
なるほど、なるほど

名無しさん 2008-10-19T00:48:18+09:00
近くにファンがあるとあんな感じです
とりあえず自分用なつもりでいたので、
前の人の頭とりまくりぶれまくり
なのですが
資料見ながら音っていう感じだと
マイ録画のほうが幸せっぽいきもします
頭のヌシが良いと言えばあっぷしても良いかも…です
誰だったんだろう

g000001 2008-10-19T00:52:39+09:00
どなたでしたでしょうね、前の方は

名無しさん 2008-10-19T00:53:48+09:00
全部で400メガバイトくらい
携帯カメラではがんばった方ですかね
運営で相談したほうがよいげですかね

g000001 2008-10-19T00:56:32+09:00
なるほど、なるほど

名無しさん 2008-10-19T01:03:29+09:00
携帯電話から引っこ抜き中
bluetooth遅い…
まぁなんだね自分の写真を見ると、「熊がいる!」
とか思ってしまいますね
いやまぁそんだけですけど

g000001 2008-10-19T01:26:24+09:00
それは、熊願望ですね。
脳生理学的には(笑)

名無しさん 2008-10-19T01:26:39+09:00
そうだったのか…
立派な熊になるよ。そのうち

g000001 2008-10-19T01:27:14+09:00
脳生理学的にS式が読み難い説には抗したい(笑)

名無しさん 2008-10-19T01:28:02+09:00
熊願望にも…

g000001 2008-10-19T01:28:21+09:00
でも、今日は、かなりS式否定が多かったですねー。見た目的にはですが。

quek 2008-10-19T01:28:27+09:00
こんばんは。おつかれさまでした。

g000001 2008-10-19T01:28:39+09:00
こんばんはー(*'-')
おつかれさまですー

名無しさん 2008-10-19T01:28:46+09:00
こんばんはー
切り替えができるかどうかだと思うんですけどね>S式
こんばんは。
熊は…

g000001 2008-10-19T01:29:25+09:00
熊キャラを望んでいるのですか(笑)

名無しさん 2008-10-19T01:29:51+09:00
熊は守備範囲外ということで(笑)

g000001 2008-10-19T01:30:03+09:00
心配なのは、スズメバチとかの標的になってしまうこと。命があぶない。

quek 2008-10-19T01:30:27+09:00
確かにどうどうとS式でいってほしいなぁ、と。熊w

名無しさん 2008-10-19T01:30:40+09:00
熊嫌な気がしてるんだけどなぁ

g000001 2008-10-19T01:30:57+09:00
どれもマクロに辿り着いてないからかなとも
思うんですが
どうなんでしょうねー。

quek 2008-10-19T01:32:03+09:00
C 的のプリプロセッサーでS式に変換、でおわりって感じでしたね。

g000001 2008-10-19T01:32:32+09:00
あれに、マクロが導入されれば、多分また
違ってくるのかもしれませんね。
もしくは、lisp1とかで、名前の競合が問題になるのかもしれないですね(笑)

quek 2008-10-19T01:34:10+09:00
プリプロセッサ部分をいじりたいですね。

名無しさん 2008-10-19T01:34:53+09:00
えーと
ぼんやりとfujita-yさんのお話きいていたんですけど
なぜschemeかアルゴル系の言語で使えるものが無いから
実装するなら同じなのではなかろうかと思った…
改めて「なぜlispか」とかは好みだとしか思えないなーと思いました

g000001 2008-10-19T01:37:45+09:00
あ、全然関係ないですが、
なるほど、なるほど
それはそうでしょうね。自分もそういう感じかなあ。
特になぜCLかと問われると、そうかも(笑)
関係ないですが、L4uのitと、->をマクロにしてみました。

quek 2008-10-19T01:39:21+09:00
おぉ、してしまいましたか♪

g000001 2008-10-19T01:39:29+09:00
(defmacro with-l4u (&body body)
  `(let (it)
     (macrolet ((-> (fn &rest args)
                  `(apply #',fn it ',args)))
       ,@(mapcar (lambda (x)
                   `(setq it ,x))
                 body))))
(with-l4u
  4
  (-> print)
  (-> list :foo :bar :baz)
  (print it))

;>>> 4 
;>>> (4 :FOO :BAR :BAZ) 
->が良く分かりませんでしたが、itは、多分、ant-let*とかの方が

名無しさん 2008-10-19T01:39:49+09:00
->っぽいものは昔書きましたね
->のほうは括弧の外っておっしゃってませんでしたっけ

g000001 2008-10-19T01:39:58+09:00
綺麗な気も。
->が括弧の外だと厳しい(笑)

名無しさん 2008-10-19T01:40:41+09:00
cpsだったっすけど

g000001 2008-10-19T01:40:41+09:00
多分、->は、同じオブジェクトに連続して適用するとか、
いうような感じなんじゃないかなと。
Flavorsでも、(<<-- obj fn fn1 fn2)とかいう構文があったりしますが。
cps展開は、無理ですね(笑)

quek 2008-10-19T01:42:02+09:00
cps の -> 見てみたいです。

g000001 2008-10-19T01:42:35+09:00
いわれたことを、そのまま直でマクロにしただけという、今日のマクロ感想文みたいなものです(笑)

名無しさん 2008-10-19T01:44:27+09:00
どこやったっけな

g000001 2008-10-19T01:44:51+09:00
あ、csp?
並列?
そういえば、並列でfibとか、

名無しさん 2008-10-19T01:45:46+09:00
継続渡しスタイル?

g000001 2008-10-19T01:46:02+09:00
あれ、わたくし全然憶えてないや(笑)
おお、なるほど、なるほど、cps
Erlangが、csp(笑)
しかし、第1引数が特別扱いってのが、自分には、謎というか、

名無しさん 2008-10-19T01:47:36+09:00
parallelで囲ってやるとタプルで返ってくるとかいうやつでした>fib

g000001 2008-10-19T01:47:40+09:00
シングルディスパッチ的な感じですね。
それとも、それは、コーディング規約的なものなのか。
あ、ありましたね、タプル。

quek 2008-10-19T01:48:51+09:00
(+) ;; => 0 とかはでのと引き換えなんだなぁ、と思いました。

g000001 2008-10-19T01:50:11+09:00
+も色々ありましたねー

quek 2008-10-19T01:51:59+09:00
日本でCLの処理系作ってる、って人はいないもんですかねぇ。

g000001 2008-10-19T01:52:58+09:00
沖電気とかが、
http://ci.nii.ac.jp/naid/110002882739/
Tachyon Common Lisp
とかはあったりしたみたいですが、
今はどこにもなさそうですね(^^;

名無しさん 2008-10-19T01:54:06+09:00
個人でclって日本に限らず記憶があんまりないのですけど

g000001 2008-10-19T01:54:10+09:00
KCL、Tachyon CL、ABCL/f(?CLなのか)、EusLisp(CL系)とかですかね

名無しさん 2008-10-19T01:54:10+09:00
どんなもんでしょう
http://homepage1.nifty.com/bmonkey/lisp/sacla/index.html
とか

g000001 2008-10-19T01:54:27+09:00
あ、CLさい実装してる人が
あ、被った(笑)
それですね。
自分もNANRIさんのReditポストかなんかで知りました(笑)
あ、TAOの上でもCLが実装されてたみたいですね。

名無しさん 2008-10-19T01:55:33+09:00
止まってるのが残念ですけどね

quek 2008-10-19T01:55:34+09:00
おぉ、CL で CL ですか

g000001 2008-10-19T01:55:37+09:00
CLtL1だと思いますが。

quek 2008-10-19T01:56:23+09:00
あ、xyzzy!

名無しさん 2008-10-19T01:56:47+09:00
それですね
これ何て読むの?> xyzzy

quek 2008-10-19T01:58:05+09:00
loop マクロを実装するより、継続を実装する方が面白い気はしますが。

名無しさん 2008-10-19T01:58:14+09:00
てきとーに読んでください>xyzzy
公式な読み方がありませんので
前の職場の人は「くそじじい」って呼んでたけどそんなワケはないだろう、と(^^;
結構ぶれます。
多分私はその場の多数派に合わせてます
あーわかる>多数派に合わせる
1.0の頃はLinuxもりなっくす派とりぬくす派とらいなっくす派とかいろいろ居たのに、今じゃすっかりリナックスになってるし

g000001 2008-10-19T02:01:30+09:00
あ、懐しいですね。

名無しさん 2008-10-19T02:01:34+09:00
ライナックスって呼んでました…

g000001 2008-10-19T02:01:46+09:00
リナックスマガジンが出て決定的になってしまいましたね(笑)

名無しさん 2008-10-19T02:02:03+09:00
僕も脳内ではライナックスです :)

g000001 2008-10-19T02:02:36+09:00
Linux自身がなんて呼んでるかの本人の音声とかもありましたね(笑)
s/linux/linus/

名無しさん 2008-10-19T02:03:05+09:00
脳内ではエクスワイゼットゼットワイなのですが、物理制約が多少。

g000001 2008-10-19T02:03:43+09:00
自分、Tachyon Common Lispの方々にもTTとか打診してみたいんですよねー。

kosh 2008-10-19T02:04:09+09:00
自分の中ではすっかり xyzzy=じじー ですね

g000001 2008-10-19T02:04:29+09:00
自分もじじいですね(笑)
これってAdventureの中の呪文がネタなんでしたっけ > xyzzy

名無しさん 2008-10-19T02:06:25+09:00
自分、名前意識してないっぽい気が……
the エディタみたいな感じかも

kosh 2008-10-19T02:06:42+09:00
あー、Wikipediaの記述にあったような<呪文

名無しさん 2008-10-19T02:07:56+09:00
単にメタ構文変数名を使っただけかと。
xyzzyの前はfooだったりしたそうですし
あとscameだったりとか

g000001 2008-10-19T02:08:54+09:00
あー、jargon fileな感じですね(笑)

kosh 2008-10-19T02:09:14+09:00
亀井さんだけにscameですか

名無しさん 2008-10-19T02:09:28+09:00
いえemacsの反転です

g000001 2008-10-19T02:09:45+09:00
おー、なるほど

kosh 2008-10-19T02:09:53+09:00
本当だ!>emacs

g000001 2008-10-19T02:10:13+09:00
そういえば、自分、Plan9のacmeってEmacsの逆のもじりかと思ってました。
全然関係なかったみたいですが(笑)
という感じで、私は、再度落ちたいと思います(笑)
お休みなさいましー(*'-')

名無しさん 2008-10-19T02:11:16+09:00
http://hie.s64.xrea.com/xyzzy/ml/msg00569.html
とか

quek 2008-10-19T02:11:21+09:00
おやすみなさい

g000001 2008-10-19T02:11:24+09:00
今日はおつかれさまでしたー。

quek 2008-10-19T02:12:27+09:00
S式亀じゃないんですね。

kosh 2008-10-19T02:13:00+09:00
おやすみなさいー>g000001さん
そういえばNANRIさんの発表見ていて、あー括弧を最後にまとめて入れるのかとどうでもいい感想を持ちました
自分が()対に入力する人なので。

名無しさん 2008-10-19T02:15:48+09:00
まとめていれるキーバインドをまだ覚えてないんですよ

kosh 2008-10-19T02:16:38+09:00
SLIMEのリファレンスカードに
C-] S式を全部閉じる
みたいものが

quek 2008-10-19T02:18:18+09:00
私も Alt-( と Alt-) の動きにどうもなじめず、最後に ) を連打してます。

名無しさん 2008-10-19T02:18:28+09:00
あるのは知ってるんですけど、ものにしてないというか、そういう感じです。

kosh 2008-10-19T02:18:46+09:00
括弧入力し忘れるとすぐ.xyzzyファイルがダメになるので困ったものです

quek 2008-10-19T02:21:52+09:00
with-l4u の -> 外だし、こんなかんじかな。
(defmacro with-l4u (&body body)
  (labels ((walk (form)
             (cond ((endp form) nil)
                   ((eq '-> (car form))
                    (let ((next-form (cadr form)))
                      `((,(car next-form) it ,@(cdr next-form))
                        ,@(walk (cddr form)))))
                   (t `(,(car form) ,@(walk (cdr form)))))))
    `(let (it)
       ,@(mapcar (lambda (x)
                   `(setq it ,x))
                 (walk body)))))

(with-l4u
  4 -> (print) -> (list :foo :bar :baz) -> (print))

名無しさん 2008-10-19T02:23:04+09:00
おおー、お見事

kosh 2008-10-19T02:24:14+09:00
'-> シンボルに見えないですね

quek 2008-10-19T02:27:36+09:00
わたしもそろそろ寝ます。
おつかれさまでした。おやすみなさい。

名無しさん 2008-10-19T02:27:53+09:00
はーい。おやすみなさい。

kosh 2008-10-19T02:28:25+09:00
おやすみなさい。そろそろ自分も…

名無しさん 2008-10-19T02:28:26+09:00
上手い

kosh 2008-10-19T02:30:42+09:00
落ちます.

g000001 2008-10-19T13:47:52+09:00
おおー、素晴らしい!(*'-') with-l4u >quekさん

名無しさん 2008-10-19T14:50:05+09:00
(defmacro pipe ((input output)
		&rest rest)
  (let ((y (gensym))
	(ret (gensym)))
    `(let (,ret)
       (funcall (reduce (lambda (x y) (funcall x y))
			(list ,@(mapcar (lambda (x) `(lambda (,output)
						       (flet ((,output (,y)
								(funcall ,output ,y)))
							 (lambda (,input)
							   ,@x))))
					rest)
			      (lambda (x) (push x ,ret)))
			:from-end t) nil)
       (nreverse ,ret))))

(pipe (in out)
      ((dotimes (i 10)
	 (out i)))
      ((when (evenp in)
	 (out in))))

-> (0 2 4 6 8)
思い出して書いてみたけどどこが似てると思ったんだろう
cpsでもないし…はて

g000001 2008-10-19T17:58:08+09:00
おおー、pipe
自分も前に作ったことがありますねー。
全然違った感じですが、シェルのパイプは欲しくなるかもという。
挑戦といえばですね、
http://cadr.g.hatena.ne.jp/g000001/20081015/1224059357
これ是非挑戦してみて頂ければとですね、
思うんですね。

quek 2008-10-19T21:27:59+09:00
pipe ありがとうございます > snmsts
reduce, lambda, flet... 難しいですね。
あ、「さん」。
mapf 挑戦してみました。

g000001 2008-10-20T00:20:40+09:00
そろそろmapfも自分のコードを公開しなくては(笑)

名無しさん 2008-10-20T00:28:14+09:00
Shibuya.lisp のustreamを見ていたらこんな時間に。

g000001 2008-10-20T00:29:23+09:00
こんばんはー(*'-')
どうでしたでしょうか、Shibuya.lisp。
機会があれば、是非onjoさんも是非TTよろしくお願いします!
是非が被った(笑)

名無しさん 2008-10-20T00:36:59+09:00
とても面白かったです。使用例とか興味深く聞かせていただきました。
LTからかなw 発表なんて学生時代以降ウン年ほとんどしてないから。

g000001 2008-10-20T00:39:00+09:00
でも、LTは5分ですよ(笑)
中間位の流さがあれば良いのかなー。
次は、comp.lang.schemeとか、comp.lang.lispとかに
事前にイベント情報を流すと思うので、
次というか、次以降ですね
告知文の添削とか作成とかご協力頂けると嬉しいです(*'-')

名無しさん 2008-10-20T00:43:40+09:00
MAPF でけた…かな?

g000001 2008-10-20T00:43:59+09:00
おお、mapfですか!
夜遅くにすいません(笑)
そういえば、自分のを先に公開した方が良いのかな(*'-')

名無しさん 2008-10-20T00:46:15+09:00
なぜか LISPMEMO に公開されない…バグかw
http://lispuser.net/memo/lisp/2008-10-20-00-20.html 直リンクだといけるな?

g000001 2008-10-20T00:49:24+09:00
おおお、
自分は、こんな感じになりました
http://cadr.g.hatena.ne.jp/g000001/20081020/1224431259
やっぱり、catchとthrowですよね

名無しさん 2008-10-20T00:52:06+09:00
あ、いきなりネタバレしてる

g000001 2008-10-20T00:52:33+09:00
いや、まあ、コードを晒してしまってますし(笑)
妙な問題に挑戦ありがとうございます!
これSchemeだと、どうなるのかとか興味あるんですよね。

名無しさん 2008-10-20T01:00:31+09:00
Scheme かぁ。頭を切り替えないと

g000001 2008-10-20T01:01:12+09:00
schemerにもお題を振ってみようかな(笑)
いや、遅くに引き止めてしまって、すいませんでした(^^;

名無しさん 2008-10-20T01:03:01+09:00
おやすみなさい~

g000001 2008-10-20T01:03:07+09:00
はいー、お休みなさいましー(*'-')

quek 2008-10-20T08:49:48+09:00
私の mapf はこんなんです。
http://read-eval-print.blogspot.com/2008/10/commo-lisp-mapf.html
throw catch を思いつかなかった。。。

g000001 2008-10-20T12:19:01+09:00
ありがとうございます! > quekさん
なるほど変数にmapretを格納するという手があったのですね。
やはり変な問題な方が個性が強く出る気がしました(笑)
すっかり忘れてしまったと思いますが、
SLIMEでの、swankサーバ別起動で、エラーハンドリングされないで
切断の原因が判明しました。
原因は、コアイメージ内で、utf-8に文字コードを設定していなくて、
swank:create-server起動する前になって、utf-8に設定していたのですが、
コアイメージを作成する時点で、一通りexternal-formatをutf-8にしたら
切断されなくなりました。
微妙に謎だったりはしますが、とりあえずは解決です(*'-')
あ、swank:create-server起動する前になって、ってのは、
 create-serverが書かれたファイルをロードしてswank起動って感じにしてたことを表現しています。

名無しさん 2008-10-21T20:14:57+09:00
Lisp50@OOPSLAはどんなだっだのかなぁ

g000001 2008-10-21T20:23:37+09:00
http://softwareengineering.vazexqi.com/articles/2008/10/21/oopsla-08-lisp50-oopsla
こんな豪華なことになってたみたいです。
昨日の#lispでは、録画してるから、ftpに動画アップするって人も
いた気がするのですが、どうも進展なしのようです(^^;

名無しさん 2008-10-21T20:27:29+09:00
動画見れたらいいですよねぇ

g000001 2008-10-21T20:28:04+09:00
生殺しです(笑)

名無しさん 2008-10-21T20:42:22+09:00
planet lispにレポートが集まるかなぁと思っているんですけど、なかなかこない

g000001 2008-10-21T20:42:56+09:00
そういえば、全然流れてこないですね
上のリンクもdeliciousでした、多分。
いや、redditだった。

名無しさん 2008-10-22T14:53:12+09:00
根性あればいけたのかな…

g000001 2008-10-22T15:12:07+09:00
oopslaの新しいレポートが
http://lukego.livejournal.com/
確かに1993年以前のことばかりだとGorrie氏のように感じる気も(笑)
 ただ勢いからすると、1993年を境に減速しているのは確かで、最近ちょっと盛り返してるのかしらと。
今回は行くべきだったんじゃないですかねー > 根性あればいけたのかな…
自分はお金がないので行けませんが(笑)

名無しさん 2008-10-22T17:46:33+09:00
lispイベントでアメリカ行ったこと無いんですよね。来年のILCに期待しよう…とか、そんな感じで。
写真がいっぱい
http://imagine27.com/lisp50/index.html
http://lukego.livejournal.com/ のコメント欄にありました
reddit にて http://www.lispcast.com/drupal/node/77

g000001 2008-10-22T21:41:51+09:00
おおー、出始めましたね、情報が。
動画みたいなー。
ContextLもどういう風に使えるのか
試してみたいですねー。

名無しさん 2008-10-23T02:22:05+09:00
ソーシャルブックマークをチェックした方が良さそうだと気づきました。
http://delicious.com/tag/oopsla
とか

g000001 2008-10-23T04:42:24+09:00
おお、なるほど、確かにw
 CLISP 2.47でましたね(*'-')
http://groups.google.co.jp/group/comp.lang.lisp/browse_thread/thread/e2c713d017da2c6c
早速ビルド中ー
こんばんはー、本日もCL勉強会20時より開催させて頂きます。
お題:今回は、onjo(lispuser.net)さんのCLでの永続化2です。

quek 2008-10-25T19:30:36+09:00
こんばんは。

g000001 2008-10-25T19:30:49+09:00
こんばんはー(*'-')
先週お休みでしたが、
忘れ去られてないか心配です(笑)
告知もう一回した方が良かったかも(^^;

quek 2008-10-25T19:32:05+09:00
あぁ、ひさしぶりって気がしますもんねぇ。

g000001 2008-10-25T19:32:42+09:00
ですねー。
先週のshibuya.lispも遠い日のことのようです(笑)

quek 2008-10-25T19:33:14+09:00
ww
とりあえず、wassr に投下しておきます(笑)。

g000001 2008-10-25T19:34:09+09:00
あ、Twitterに投下したら代わりに忘れてた(笑)
ありがとうございます!

quek 2008-10-25T19:36:33+09:00
Twitter は IM 復活しないのかしら?

g000001 2008-10-25T19:36:51+09:00
あ、前からIM使ってた人もだめなんですか?

quek 2008-10-25T19:37:49+09:00
たぶん。。。いつのまにか使えなくなってました。

tsz 2008-10-25T19:38:23+09:00
こんばんわ

g000001 2008-10-25T19:38:38+09:00
こんばんはー(*'-')

quek 2008-10-25T19:39:23+09:00
こんばんは。

g000001 2008-10-25T19:39:47+09:00
tszさんは、最初の歓談タイムで、
LOLの話をされてた方です > quekさん
って懇親会のときとかにお話してるかな(笑)
自分、懇親会に参加しなかったので、

quek 2008-10-25T19:41:10+09:00
あぁ、残念ながら懇親会のときはお話できなかったですねぇ。

g000001 2008-10-25T19:41:17+09:00
おお、こんな方も来場されてたんだー、ということばかりです(笑)
PAIP勉強会とか参加されてます(*'-')

名無しさん 2008-10-25T19:41:58+09:00
こんばんは

g000001 2008-10-25T19:42:04+09:00
こんばんはー(*'-')

quek 2008-10-25T19:42:20+09:00
こんばんは。

tsz 2008-10-25T19:43:07+09:00
LoLのHoyteさんは、nvi派らしいです。

g000001 2008-10-25T19:43:27+09:00
おお、そうなんですか
後の方にviのこと書いてましたけど、

quek 2008-10-25T19:43:37+09:00
やはり個性的な方なんですね。

g000001 2008-10-25T19:43:43+09:00
emacs使ってるのかと思った(笑)

tsz 2008-10-25T19:44:02+09:00
私もそう思っていました(笑)

名無しさん 2008-10-25T19:44:22+09:00
こんばんは、初参戦です。ついていけるか自信ないというかまったく準備できてなくLispも初歩しかわかんないですが、勉強させてもらいに来ました~

g000001 2008-10-25T19:44:33+09:00
こんばんはー(*'-')

quek 2008-10-25T19:44:42+09:00
こんばんは。

g000001 2008-10-25T19:44:50+09:00
自分も全然初心者なので、大丈夫ですー(*'-')

名無しさん 2008-10-25T19:45:07+09:00
取り急ぎ、cygwin-clisp インストールだけしました(ぁ

g000001 2008-10-25T19:45:25+09:00
windowsで、clispということになると
onjoさんの ごった煮が いろいろ入ってて
お勧めですね

名無しさん 2008-10-25T19:45:49+09:00
ふむふむ、さっそく google...w

g000001 2008-10-25T19:46:43+09:00
少々お待ちを、urlを探しています(笑)
http://lispuser.net/files/clisp-2.46-full.zip
ですね(*'-')

名無しさん 2008-10-25T19:47:53+09:00
う、そこいきついたんですが、落ちてこない←イマココ

g000001 2008-10-25T19:48:47+09:00
あれ、403ですね。

名無しさん 2008-10-25T19:48:49+09:00
http://lispuser.net/files/ だと一覧に出るのになにがいけないんだろぉ。
とりあえず今日は cygwin でいきますw

g000001 2008-10-25T19:50:11+09:00
プレゼンでも使ってるので、直近で作業中なのかもしれないですね(*'-')

名無しさん 2008-10-25T19:51:07+09:00
ROM 歓迎とのことでしたので、たぶん黙ってみてますが、よろしくお願いしますヽ(゚∀゚)ノ

g000001 2008-10-25T19:51:28+09:00
いえいえ、ROM歓迎ですー
あらためまして、こんばんはー、では20時になりましたので、開始しますー
今回のお題は、onjo(lispuser.net)さんのCLでの永続化2です。
第21回

でも、onjoさんが(笑)

名無しさん 2008-10-25T20:02:28+09:00
8888 よろしくお願いします~

g000001 2008-10-25T20:02:34+09:00
あれ、そういえば、告知はしたけど、
onjoさんがご存知なかったりするのかな(^^;
自分は、万が一のことを考えて
お題を準備して
いませんでした(笑)

quek 2008-10-25T20:03:53+09:00
w

g000001 2008-10-25T20:04:20+09:00
LOLの続きとか
登場までやりましょうか。
前回、LOLのマクロの
3.6章のonce-onlyとかまで
やりましたが、
3.7章のDuality of Syntaxとか
でしょうか。
リアルタイムに読みながらなので、
大分またーりになりますが(笑)
他になんかお題ありますかね。
emanon34さんが知りたいことに
みんなで一斉に答えるってのも
面白いと思います(笑)
emanon34はなんか知りたいこととか
ないですか?(*'-')
CLやってて意味とかあるの?とか(笑)

名無しさん 2008-10-25T20:08:47+09:00
CLやってて意味とかあるの?(マテ

g000001 2008-10-25T20:08:51+09:00
(笑)
自分は、趣味で触ってるので、
実用的なところに使えるのかな
というのは全然分からないのですが、
おもちゃとして「も」最高だと思います

名無しさん 2008-10-25T20:09:49+09:00
雑談っぽくなってなんですが、わたしはLisp経験ほとんどなくてちょこっと emacs の定義ファイルいじったくらいです。

g000001 2008-10-25T20:10:13+09:00
自分も、1年ちょっと前に書き始めたんですが、
そんな感じでしたね(*'-')
REPLで対話的に開発できるので、

名無しさん 2008-10-25T20:10:59+09:00
あとは昔 Lisp パズルブック?だかなんかそんな本がやたら面白かった記憶あるのとか、Scala とか Haskell とか流行ってるので関連つーとアレですが、Lisp も教養としてもちっと知っててもいいから覗いてみようって感じで気軽にやってきた感じですw

g000001 2008-10-25T20:11:08+09:00
なるほど、なるほど

quek 2008-10-25T20:11:18+09:00
他の言語とくらべると、触ってて精神衛生上よいのです(意味不明)。プログラム書いてて一番気持いいと思うんですよね CL が。

g000001 2008-10-25T20:11:37+09:00
CLの特長としては、

名無しさん 2008-10-25T20:11:43+09:00
ふーむ、気持ちよく書けるのは重要ですよね~

g000001 2008-10-25T20:11:47+09:00
なんでも、メタな感じを目指しているので、
基本的に制限を外す工夫はあるのですが、
制限されることってのは、
案外少ないので、
その辺が好きな人は好きな気がしますねー。

名無しさん 2008-10-25T20:12:50+09:00
ふむふむ、素朴な質問ですが、

g000001 2008-10-25T20:12:56+09:00
基本的に、気に入らなければ、自分で書き直しなさいという
スタンスに思えます(笑)

名無しさん 2008-10-25T20:13:13+09:00
clisp 慣れてる人って、他人のコード読んで理解するスピードって

g000001 2008-10-25T20:13:20+09:00
はいはい(*'-')

名無しさん 2008-10-25T20:13:23+09:00
他言語とくらべてどんなもんなんでしょう?

g000001 2008-10-25T20:13:40+09:00
自分はLISPしか知らないので、なんとも言えないのですが、
マクロでわけわかというのは、
いわれる程問題になってないと思いますねー

名無しさん 2008-10-25T20:14:09+09:00
ほほぅ・・・

g000001 2008-10-25T20:14:26+09:00
そもそも(+ 3 3)みたいに、
関数が先頭で、あとは引数という風になるので、
基本的に難しくなりようもないという気がしますが、どんなもんでしょうね、みなさま。
自分が思うのは、CLのマクロの難しさは、関数を読む難しさと、そんなに変らない気がします。
もちろん、読めないようにも書けるのですが(笑)

名無しさん 2008-10-25T20:16:09+09:00
xyzzy のソースとか読んで勉強しましたけど、
マクロは一度理解すれば問題なく読めました

g000001 2008-10-25T20:16:54+09:00
ですよねー(*'-')
いわれてる程、難しくはないんじゃないかなと(*'-')

名無しさん 2008-10-25T20:17:18+09:00
じゃ、ちょっと質問を変形させてみると、読みづらい関数って簡単にかけます?w
他言語だと、むしろ細心の注意払わないといとも簡単にかけちゃうというか
そういう関数しか書いてくれない人の存在がげふんげふんになるというか(ぁ

g000001 2008-10-25T20:18:20+09:00
変数のスコープとかに関しては、カッコで囲まれてるだけに、
常に範囲を意識するようになるので、
割と自然に綺麗に纏まってしまう気がしないでもありません(*'-')

名無しさん 2008-10-25T20:19:19+09:00
高階関数をバンバン使うと慣れない人には読みにくくてたまらないでしょう

g000001 2008-10-25T20:19:19+09:00
gotoも直に触ることもなくて、マクロにするので、その辺もそこそこ纏まるかなあと
お、onjoさん登場ですね!
すいませんでした、何時からonjoさんのプレゼン開始とか詳細にお伝えしてなくて(^^;
高階関数は、そういえばそうですね(^^;

名無しさん 2008-10-25T20:20:47+09:00
おおー、真打ち登場ですね♪ ではROMに戻ります~(ぁ
ありがとうございました m(_ _)m
こんばんは。ちょっと遅刻してしまいましたw

g000001 2008-10-25T20:20:57+09:00
いえいえー(*'-')
丁度みんな集合した感じですね(*'-')
 そういえば、高階関数に関しては、自分は、unfoldみたいな構文を思い付けるようになれる気がしないですね(笑)
高階関数スタイルも、訓練が必要って感じかなという。

名無しさん 2008-10-25T20:23:46+09:00
ちょっと複雑なことをやろうとすると CL ではループにしちゃいます
ちょっとほっとしますw
Scheme なら末尾再帰にするのかな
CLだと反復操作は手続き型からきた身としては馴染みぶかい。

g000001 2008-10-25T20:25:04+09:00
自分は、schemeだと末尾再帰でベタに書いてしまいますねー

名無しさん 2008-10-25T20:25:30+09:00
再帰派には反復(LOOP含む)は視野が狭いとか、抽象度が低いとか、いろいろ言われますが

g000001 2008-10-25T20:25:31+09:00
CLだと、loopですかね(笑)

名無しさん 2008-10-25T20:26:43+09:00
高階派には、か。
そういえば mapf はあると便利かもしれないと思いました

g000001 2008-10-25T20:28:31+09:00
お、mapfですか(笑)

名無しさん 2008-10-25T20:28:34+09:00
だいたい mapcar でいいんだけど、ちょっと例外的な場合があるときとか
ふむふむ、再帰っていうとどしてもオーバヘッド気になりますが、末尾再帰ってその辺の回避もあるのかぁ・・・とりあえずあとで kw googlew

g000001 2008-10-25T20:29:03+09:00
clだと、reduceの使い勝手が今一歩なので、
mapfの方が汎用的ってのはありそうですね。

quek 2008-10-25T20:29:16+09:00
途中で止められるのがいいですよね > mapf

名無しさん 2008-10-25T20:29:36+09:00
主にSchemerがおなか一杯になるまで語ってくれます。>末尾再帰とループ

g000001 2008-10-25T20:29:41+09:00
姉妹品に、maprってのもあるみたいですが、mdlは色々面白いです(*'-')

quek 2008-10-25T20:30:00+09:00
一つの関数をあそこまで汎用的にするのがいかにも、と思いましたがw

g000001 2008-10-25T20:30:26+09:00
ですね、mapってよりは、汎用ループ機構ですもんね(笑)

名無しさん 2008-10-25T20:30:41+09:00
Scheme の filter-map でしたっけ、ああいうのも mapf だとすっきり書けそう
CL だと無理矢理 mapcan 使ったりしてしまいますが

g000001 2008-10-25T20:31:15+09:00
mapretも便利で、mappend相当の動きも便利なんですよね
ですね > mapcan
それか、reduceに行くかという。
MDLで他に面白いところといえば、
ラムダリストパラメータで、quoteとかですかね
Lispマシンのdefunにもあるんですが、
(defun my-setq ("e x val) ...)とか書けるという
ま、あんまり面白くないか(笑)

名無しさん 2008-10-25T20:33:57+09:00
引数を評価しないということですか?

g000001 2008-10-25T20:34:09+09:00
ですね(*'-')
CLの場合マクロなんですが、
マクロでやれば良いので不要ということでCLからは消えたんでしょうね(*'-')

quek 2008-10-25T20:35:21+09:00
評価したくなったときはどう書くんでしょうか?

g000001 2008-10-25T20:35:27+09:00
evalだったような(笑)

quek 2008-10-25T20:35:35+09:00
おぉ!

名無しさん 2008-10-25T20:35:42+09:00
apply と組み合わせるとどうなるんだろうと思ったり

g000001 2008-10-25T20:35:53+09:00
昔のLISPのfexprみたいな感じですかね

名無しさん 2008-10-25T20:37:34+09:00
昔…CL以前ですか。

g000001 2008-10-25T20:37:55+09:00
Lispマシンのソースは公開されているので、
割と自分は眺めたり、CLで再現したりして、
延々と暇をつぶしています(笑)
割と行数が多くて、
19万行位あったかな

名無しさん 2008-10-25T20:39:09+09:00
CADR? Symbolics?

g000001 2008-10-25T20:39:10+09:00
ま、システム全体なんで、CLの処理系より大きいってのは当然な気もするんですが(笑)
公開されているのは、
MIT CADRとか、TI Explorerとか、
LMI Lambda
K-Machine
位だったかもという。
RMSのコードとかもありますよ(笑)
Symbolicsと闘ってたときの(笑)
あ、あと、MacLISPのコードも公開されているので、
JohnL氏とか、Kent Pitman氏のコードも面白いかなという。
(DEFUN SETQ ("E &REST SYMBOLS-AND-VALUES)
  (PROG (VAL)
   L	(COND ((NULL SYMBOLS-AND-VALUES) (RETURN VAL)))
	(SET (CAR SYMBOLS-AND-VALUES) (SETQ VAL (EVAL (CADR SYMBOLS-AND-VALUES))))
	(SETQ SYMBOLS-AND-VALUES (CDDR SYMBOLS-AND-VALUES))
	(GO L)))
setqはこんな感じでしたね。CADRだと
CADRの下の方は、gotoばっかりです(笑)

名無しさん 2008-10-25T20:43:34+09:00
年代を感じるなぁ。時代とともに進化の過程で見えなくなっちゃったんですね。

g000001 2008-10-25T20:43:54+09:00
80年位までは、直にprogを書いてて
CLで、progが、letと、tagbodyと、blockに分割されて
progを直に使うことはなくなったという
気がしますね。あと、CLtLとかで、goto反対的な感じで書いてるのと
goto反対的な世の流れかなという(笑)

名無しさん 2008-10-25T20:45:17+09:00
古めの人工知能の本でこんなコードを見たような……

g000001 2008-10-25T20:45:29+09:00
do自体は、1973年だったかに登場してるんですけど、
なんで、progが愛用されてたのかは不明ですね(笑)
LISP 1.5もlambdaか、progかという感じなので、
こういうコードですねー

名無しさん 2008-10-25T20:46:23+09:00
もとは prog だけで、それが分かれたんですね。知らなかった

kosh 2008-10-25T20:46:24+09:00
スライドの準備は大丈夫ですか?>onjoさん

g000001 2008-10-25T20:46:36+09:00
progにも一応イディオムがありまして、
上のsetqのコードみたいなのが綺麗なprogの例ですね(*'-')

quek 2008-10-25T20:47:28+09:00
たしかに > 綺麗

名無しさん 2008-10-25T20:47:36+09:00
今回は初心にかえってテキストのみでーす。

g000001 2008-10-25T20:47:56+09:00
condが使われてるのは、ifも、whenも無い時代からのイディオムだからですね(笑)
はいー、了解です(*'-') > テキスト

名無しさん 2008-10-25T20:48:23+09:00
今見るとちょっと引っかかるけど、当時はそれが普通だったわけですね
慣れれば空気みたいなもんで、なんとも思わなくなるのかも

g000001 2008-10-25T20:48:41+09:00
きちんと整形してあると割と綺麗ですよ(笑)
ですね。

名無しさん 2008-10-25T20:49:01+09:00
整形重要ですね

g000001 2008-10-25T20:49:14+09:00
ある意味doより分かりやすいかもしれないですよ(笑)

名無しさん 2008-10-25T20:49:15+09:00
構造化プログラムの議論が60年代から70年代の初めだそうで…

g000001 2008-10-25T20:49:37+09:00
それより前に確立してるので、goto論争のかやの外ですね(笑)

名無しさん 2008-10-25T20:49:51+09:00
確かに、do は慣れるまでわかりにくかったなあ

g000001 2008-10-25T20:50:07+09:00
fortranのgotoとも違って飛べる場所は分かりやすいので、
これでも、まあ不便はないかなと読んでて思ったりはします。
ただ、値の更新を忘れて、無限ループってのは、doよりは起こりやすい(笑)

名無しさん 2008-10-25T20:51:07+09:00
ああなるほど
そういうケアレスミスを減らす意味でも syntax sugar って大事なのかも

g000001 2008-10-25T20:52:29+09:00
ですねー。
なので、LISPでの構造化というと、
こういう感じで、使い勝手よく隠蔽ってのが
そういう感じなのかなーという。
あと、Lispマシン位までは、letも実際にlambdaの糖衣構文で
MacLISPとかだと、lambdaに展開されるマクロですね。

名無しさん 2008-10-25T20:54:35+09:00
Scheme は今もそうなんでしたっけ

g000001 2008-10-25T20:54:53+09:00
ですね、Schemeはそうですね
70年代のコードを読むと実際に、letの代りにlambdaでくくってて
凄い見た目になってるのがありますね(笑)
(defun foo (n) ((lambda (n) (list n)) n))みたいなのが普通にあるという。

名無しさん 2008-10-25T20:56:53+09:00
さっきのsetqの中でsetqが使われているのがなんでだかわからないんですけど
どういう挙動になるんですか?
見るだけならいいけど読みたくはないかもそういうコード
二番目がsetじゃないのはなぜ…

g000001 2008-10-25T20:58:32+09:00
setqのなかのsetqは、ブートストラップで
プリミティブが先に定義されてたからじゃないかなという

名無しさん 2008-10-25T21:00:19+09:00
そろそろ CL-PREVALENCE 紹介やりましょうか?
なるほど、一応動きそうだけどもったいないなーと思ってしまいました

g000001 2008-10-25T21:00:25+09:00
はいー(*'-')

名無しさん 2008-10-25T21:00:33+09:00
わーい

kosh 2008-10-25T21:00:48+09:00
お願いしますー

名無しさん 2008-10-25T21:01:08+09:00
今回はテキストなのでLingrでやります。
よろしくお願いします~

g000001 2008-10-25T21:01:31+09:00
よろしくおねがいますー(*'-')

名無しさん 2008-10-25T21:03:15+09:00
では CL-PREVALENCE について。
もともと Java 方面で考案された技法です。実装もいろんな言語であります。
http://common-lisp.net/project/cl-prevalence/ CLによる実装がこちら。
ここの紹介によると、
 * ほとんどのデータベースは、数百メガバイト程度のサイズしかないか、それよりも小さい
 * ほとんどのコンピュータは数百メガバイトのデータを RAM 上で操作できる。(大きなサーバなら数ギガバイト程度のデータを扱える)
 * オブジェクトをデータベースにマッピングするのは退屈で時間の無駄であるばかりか、複雑になったりエラーがでたりしやすい
小規模データ(少なくともメモリに載るレベル)向けの簡単シンプルな永続化技法です。
うわーなんかOSASK思い出す発想。逆か。

g000001 2008-10-25T21:07:01+09:00
おお、OSASK(笑)

名無しさん 2008-10-25T21:07:46+09:00
手作りOSの?まぁ、本当に手作りDBしてる人もいますからね。RDB実装するよりはすごく簡単。
* オブジェクトをファイルシステムのような永続領域にシリアライズしたり、デシリアライズして永続領域からオブジェクトを取り出せるようにする!
これはまぁ、言ってるとおりかな。
 * もしドメインモデルオブジェクトの完全な集合を永続領域の保存したいなら、スナップショットを作りましょう
 * クエリーとしてプログラム言語のデータ構造操作機能を使います。RAM 内のデータに対しては非常に高速ですから。
 * データとトランザクションを実行する関数を結びつけたトランザクションオブジェクトを使ったオブジェクトモデルを理解してください

g000001 2008-10-25T21:09:12+09:00
なるほど、なるほど

名無しさん 2008-10-25T21:09:26+09:00
後半3つがかなりポイント。
ほむほむ。
根こそぎ保存したいならスナップショット!
クエリ?自力で検索してね。
データの更新とかは「トランザクションオブジェクト」つかうよ!
とりあえず用語を覚えてくださいね~
snapshot ってのは JSON みたいなものって認識ですがずれてます?
。* ゚ + 。・゚・。・ヽ(*´∀`)ノ ハーイ
形式はなんでもいいです。JSONでもXMLでも俺超圧縮フォーマットでも。
管理してるデータを全部書き出せる / 全部呼んで戻せる、という全部をおぼえたもの、というのがポイント。
=> ACID 属性を確保するために、それぞれのトランザクションを実行した後に、シリアライズして永続化します。これを **トランザクションログ** と呼びます。
オブジェクト更新する「トランザクション」をシリアライズしてログに書く。これもポイント。

g000001 2008-10-25T21:13:55+09:00
なるほど、なるほど

名無しさん 2008-10-25T21:14:41+09:00
* 意図したか意図していないかに関わらず、システムがシャットダウンした時には、最初に最新のスナップショットをロードし、それぞれのトランザクションログを再実行してrestoreします
初歩のDB講義っぽい
スナップショットを呼んで、トランザクションログを再生するとあら状態が復元できる!(注落とし穴アリ)

g000001 2008-10-25T21:16:07+09:00
なるほど、なるほど、BKNrもそんな感じだったような(*'-')

名無しさん 2008-10-25T21:16:22+09:00
で、スレッドとか性能とか分散化は今回はやらないのでスルーします。
トランザクションログを書くときにシリアライズ(←並列用語のほうの、順番にやるの意)すればスレッドセーフ、くらいかな。
仕組みのまとめ:

   1. メモリ上にオブジェクトを用意
   2. 管理したいオブジェクトはルートオブジェクトから参照する
   3. 管理下オブジェクトのスナップショットをファイルに書き出す
   4. オブジェクトへの変更をトランザクション単位にする
   5. CL-PREVALENCE がトランザクションを実行することで、オブジェクトを変更する (このとき、トランザクションをログファイルに書き出しておく)
   6. いか繰り返し。適当なときにスナップショットを取ろう。

g000001 2008-10-25T21:19:13+09:00
なるほど、なるほど

名無しさん 2008-10-25T21:20:32+09:00
じゃあ、まず簡単な永続化をしてみましょう。使うAPIはこちら。

| (make-prevalence-system [ディレクトリへのパス]) | 指定したディレクトリを使った永続化システムを作成する |
| (snapshot [システム])                           | スナップショットをとる                               |
| (restore [システム])                            | スナップショットとトランザクションログから復元       |
| (make-transaction [関数名] [引数...])           | トランザクションオブジェクトを作成する               |
| (execute [システム] [トランザクション])         | トランザクションを実行する                           |
| (get-root-object [システム] [キ?])             | ルートオブジェクトハッシュからキーに対応する値を取得 |
| (setf (get-root-object [システム] [キ?]) [値]) | ルートオブジェクトハッシュのキーに対応する値を設定   |

おぉぉぉずれて

g000001 2008-10-25T21:21:21+09:00
自分のところだと割と綺麗に

kosh 2008-10-25T21:21:24+09:00
横が長すぎるw

g000001 2008-10-25T21:21:24+09:00
見えてます(*'-')
画面を広くすれば良いのかな? = フォントを小さくする

名無しさん 2008-10-25T21:22:24+09:00
私の環境でも横が足りません…
make-prevalenc-system : 管理用のオブジェクト作成
snapshot : スナップショット取る
restore : スナップショットとトランザクションログから復元
make-transation : トランザクション作成
execute : トランザクション実行

g000001 2008-10-25T21:22:26+09:00
8pointとか(笑)

名無しさん 2008-10-25T21:22:47+09:00
get-root-object はルートオブジェクトの取得です。
じゃあコード例をいきますよ。

g000001 2008-10-25T21:23:56+09:00
はいー(*'-')

名無しさん 2008-10-25T21:24:00+09:00
(defpackage :tutorial (:use :cl :cl-prevalence))
(in-package :tutorial)

(defvar *datastore* #P"/tmp/prevalence-db/")
(defvar *system* (make-prevalence-system *datastore*))

(defun step1 ()
  (setf (get-root-object *system* :fixnum) 1024
         (get-root-object *system* :string) "初期値"
         (get-root-object *system* :list)   '(1 2 3 4)))
幅狭いなぁ…
フォント小さくするとchattersが壮絶に余る…
なんか悔しい

g000001 2008-10-25T21:24:57+09:00
画面の比率は変えられないみたいなので、フォントを小さくする他ないみたいですね

名無しさん 2008-10-25T21:25:12+09:00
コンパイルすると datastore フォルダ以下にシリアライズされたデータがぽこぽこできます。
コンパイル&ロードすると、か。

g000001 2008-10-25T21:26:01+09:00
なるほど、なるほど

名無しさん 2008-10-25T21:26:24+09:00
TUTORIAL> (step1)
のあとで
TUTORIAL> (get-root-object *system* :fixnum)
1024
T
おー設定されている。
で、この段階では何にもファイルにはかかれてません。
最初にいった「トランザクションで更新する」でもないので
トランザクションログもありません。
つまりまったく永続化されてません。

g000001 2008-10-25T21:28:15+09:00
なるほど

quek 2008-10-25T21:28:32+09:00
ディレクトリの下はからっぽです。

kosh 2008-10-25T21:28:38+09:00
まだプロセスな内部でしか生きていない、と

名無しさん 2008-10-25T21:28:47+09:00
んでは、スナップショットをとってみましょう。
TUTORIAL> (snapshot *system*)
NIL
うりゃ!

quek 2008-10-25T21:29:31+09:00
snapshot.xml できました。

名無しさん 2008-10-25T21:29:39+09:00
戻り値はNILですが、そーゆうもんです。これでオブジェクトの状態が snapshot.xml にできます。
中をのぞいてみましょう。でも読み難いので整形したものがこちら。

  
    :LIST
    1234
  
  
    :STRING
    初期値
  
  
    :FIXNUM
    1024
  

キーと値をもったエントリが3つありますね。これがルートオブジェクトをシリアライズしたものです。

g000001 2008-10-25T21:31:30+09:00
なるほど、なるほど

名無しさん 2008-10-25T21:32:10+09:00
試している人は、一旦処理系を終了して再度コードをロードした後、今度は (restore *system*) してみましょう。ルーとオブジェクトの中身が復元されます。
あ、restore しなくてもいいのか。
make-prevalence-system した段階でデータがあったら復元されますよね。

g000001 2008-10-25T21:33:22+09:00
(get-root-object *system* :fixnum)だけで
読めました(*'-')

名無しさん 2008-10-25T21:35:03+09:00
# API の説明よりももうチョイ中身を見る系の入門です。トランザクションはもう少し後ででてきますのでしばらくお待ちください。

g000001 2008-10-25T21:35:24+09:00
はいー(*'-')

名無しさん 2008-10-25T21:35:34+09:00
次にこんな関数を定義してみます。
(defun step2 ()
  (setf (get-root-object *system* :string) "失敗するよ"))
何が失敗するのかは、まぁ見ててください。
TUTORIAL> (step2)
"失敗するよ"
TUTORIAL> (get-root-object *system* :string)
"失敗するよ"
一件ちゃんとルートオブジェクトが更新されてるように見えますが…
ここでさっきの仕組みのリストでふった番号が活躍するところです。

   4. オブジェクトへの変更をトランザクション単位にする
   5. CL-PREVALENCE がトランザクションを実行することで、オブジェクトを変更する (このとき、トランザクションをログファイルに書き出しておく)
そう、この setf はトランザクションではないのです。
あなたの setf は更新時にトランザクションログに出力しますか?いやですねそんなの。
大抵はメモリ上の値を設定しておわりでしょう?少なくとも標準では。
つまり CL-PREVALENCE の関知しない操作であるため、 4. を満たしておらず、結果的に 5. が実行されないということです。
結果としてこの操作 (setf) は永続化されていません。

g000001 2008-10-25T21:39:13+09:00
なるほど、なるほど

名無しさん 2008-10-25T21:39:31+09:00
…とコピペするのははやいけど読むのは追いつきますかね

g000001 2008-10-25T21:39:48+09:00
自分は全然OKな感じです('◇')ゞ

quek 2008-10-25T21:39:54+09:00
大丈夫です。

g000001 2008-10-25T21:39:58+09:00
IRCクライアントで読んでますが(笑)

名無しさん 2008-10-25T21:40:37+09:00
読むのだけはおいついてます(ぁ
g000001さんのLOLの半分くらいのペースだと思います。これなら余裕です。
じゃあ、どうなるのか結末を。
TUTORIAL> (restore *snapshot*)
NIL
TUTORIAL> (get-root-object *snapshot* :string)
"初期値"
あー変更がなくなっちゃった。

g000001 2008-10-25T21:40:45+09:00
コードを実行しながらでも丁度良い感じかなと思います(*'-')
根に持ってますね(笑) > LOL

名無しさん 2008-10-25T21:41:25+09:00
つらかったですもんw
大事なデータじゃなくてよかった!
加えた変更を記録するには、スナップショットを取るか、あるいはトランザクション機能を使います。

g000001 2008-10-25T21:42:06+09:00
なるほど、なるほど > リストア

quek 2008-10-25T21:42:25+09:00
*snapshot* じゃなくて *system* ですか?

名無しさん 2008-10-25T21:42:35+09:00
そうです!
コピペ元が間違えている…想像で書いたな>俺
step1 と step2 の相違は (snapshot *system*) の実行の有無ってことでおkですか?
そうです
スナップショットしないと直接書き換えたデータは反映されません。
ふむふむ。実にシンプル。
そう、シンプルなシステムなのです。
ということで、スナップショットの理解が怪しい人は手をあげください。
スナップショット: ルートオブジェクトから根こそぎシリアライズ
なので、毎回こんなことやってられませんよね~
そこでトランザクションの登場です!もっと細かい単位で記録できますよ~
わくわく
進行の都合上ここでトランザクションってどうするの?と興味がでてくる設定なので、
| (make-transaction [関数名] [引数...])           | トランザクションオブジェクトを作成する               |
| (execute [システム] [トランザクション])  トランザクションを実行する
あ、また。いいか。
トランザクションは基本関数単位です。
こんな感じ。
(defun tx-test-1 (system text)
  (setf (get-root-object system :string) text))
なんかあんまり変わりばえしないなーと思った人もいるかもしれませんが。

g000001 2008-10-25T21:50:01+09:00
ですね(笑)

名無しさん 2008-10-25T21:50:22+09:00
ひょっとすると些細な違いに気がついた人もいるかもしれませんね。でもネタバレはしばらく待ちましょう。

g000001 2008-10-25T21:51:00+09:00
期待(笑)

名無しさん 2008-10-25T21:51:03+09:00
では、トランザクションをつくります。
(defun step3 ()
  (execute *system*
    (make-transaction 'tx-test-1 "今度はうまくいく")))
こんなんなります。

g000001 2008-10-25T21:51:53+09:00
なるほどー

名無しさん 2008-10-25T21:52:13+09:00
make-transaction はトランザクションオブジェクトを作ります。
(tx-test-1 [ここに*system*きてほしい] [文字列])
こんな関数。で、execute が *system* を当てはめて実行します。
なんか怪しげですね。なんでこんなんなってるんでしょうか。
さっそく見てみましょう!
まず使ってみましょう。
TUTORIAL> (step3)
"今度はうまくいく"
TUTORIAL> (get-root-object *system* :string)
"今度はうまくいく"
T
どこが怪しいのかが理解できずorz

kosh 2008-10-25T21:55:06+09:00
make-transaction の引数は funcall と同じみたいですね

名無しさん 2008-10-25T21:55:12+09:00
あぁ、 make-transaction ← なんで「作る」のかな~と最初思ったんで。with-transaction とか begin / commit とかならわかるけど~という第一印象。

g000001 2008-10-25T21:56:14+09:00
自分はなんか、デザインパターンみたいだなと思いました。デザインパターン分かってないですけど(笑)

名無しさん 2008-10-25T21:56:46+09:00
トランザクションオブジェクトをシリアライズする、に絡んでるんですね~。一応流れでこの後ででてきますのでしばらくお待ちを。

g000001 2008-10-25T21:56:57+09:00
なるほど、なるほど

名無しさん 2008-10-25T21:57:04+09:00
TUTORIAL> (restore *system*)
NIL
TUTORIAL> (get-root-object *system* :string)
"今度はうまくいく"
T
おーちゃんと記録されてますね。シャットダウンしても大丈夫!
(snapshot するとログは消えちゃうので、動作してる人は snapshot をしばらく我慢してください)
これは、スナップショット+トランザクションのリプレイで復元されてるからです。
なるほど。だんだん怪しさわかってきた…遅い
スナップショット: "初期値"
トランザクション: "今度はうまくいく"
という二段階で復元されてるんですね。
ではトランザクションログを見てみましょう。
ディレクトリ内にずばり
transaction-log.xml
ができてます。(snapshot しちゃったひとは再度トランザクションを実行してつくりましょう)

g000001 2008-10-25T22:00:28+09:00
おおー、なるほど

名無しさん 2008-10-25T22:00:33+09:00
で、例によって読み難いので整形したものがこちら。

  
    
     今度はうまくいく
    
  
  TUTORIAL::TX-TEST-1

これをS式風に解釈すると次にような「関数呼び出し」をシリアライズしたものである事がわかります。
(tx-test-1 _ "今度はうまくいく")

g000001 2008-10-25T22:02:11+09:00
なるほど、なるほど

名無しさん 2008-10-25T22:02:45+09:00
これがトランザクションです!リプレイは要するに
(tx-test-1 *system* "今度は上手くいく")
を実行してるだけなんですね~

g000001 2008-10-25T22:03:05+09:00
なるほど!

名無しさん 2008-10-25T22:03:10+09:00
おー、シンプルだw

g000001 2008-10-25T22:03:19+09:00
tx-test-1まで、transaction-log.xmlに記録されてるのかと思った(笑)

名無しさん 2008-10-25T22:03:39+09:00
無名関数は遺憾な感じですね

quek 2008-10-25T22:03:48+09:00
再起動後、(defvar *system* (make-prevalence-system *datastore*)) のとこで The function TX-TEST-1 is undefined. のエラーがでました。これは、そういうわけだったんですね。> (tx-test-1 *system* "今度は上手くいく") を実行してるだけなんですね~

名無しさん 2008-10-25T22:04:15+09:00
そう、中をのぞくと一気に理解が深まるでしょう。
のぞいてみると中スカスカなんだけど、DBだのトランザクションだのでより付かない人が多くて…
quek さんのエラーを回避しようと思ったらどうしたらいいんだろう。

g000001 2008-10-25T22:05:29+09:00
なるほど、割とシンプルということなんですねー。

quek 2008-10-25T22:05:32+09:00
(defun tx-test-1 (system text)
  (setf (get-root-object system :string) text))

名無しさん 2008-10-25T22:05:35+09:00
同じコンパイル単位もしくはそれ以前に関数定義を呼んで置けばいいでしょう。

quek 2008-10-25T22:05:48+09:00
で tx-test-1 を定義後は大丈夫でした。

g000001 2008-10-25T22:06:07+09:00
なるほど、なるほど、そういうことか。

名無しさん 2008-10-25T22:06:23+09:00
あぁなるほど。ふむふむ。

g000001 2008-10-25T22:06:27+09:00
関数は別保存なんですね。
適材適所みたいな。

名無しさん 2008-10-25T22:07:02+09:00
…関数保存しようと思えばできるような…
気持ち悪い利用が考えられる程度にシンプルでよいですね
イロイロ思うところはありそうですが、この「関数の呼び出し」をトランザクションオブジェクトとする方式には当然制約がつきます。
関数がないと駄目、というのは勿論ですが、
関数の結果が決定的でないといけません。
tx-test-1 が乱数つかってランダムに結果を返すようだと…?

quek 2008-10-25T22:08:58+09:00
なるほど、確かに。

名無しさん 2008-10-25T22:09:09+09:00
なるほどなるほど。
さらに、保存時とリプレイ時に関数定義の中身がかわっていると…
emacs/xyzzyのキーボードマクロとかでそんな感じの気持ちになったことがあった…

quek 2008-10-25T22:09:56+09:00
過去を書きかえちゃだめですよね。

名無しさん 2008-10-25T22:09:56+09:00
一応例を出しますか。
(defun tx-test-4 (system n m)
  "ダメな例"
  (setf (get-root-object system :bug-random) (loop repeat (random n) collect (random m))))

(defun step6 ()
  (execute-transaction
   (tx-test-4 *system* 10 100)))
これは皆さんバラバラな結果になると思いますが
TUTORIAL> (step6)
(13 46 64 81 22 32 85)
TUTORIAL> (get-root-object *system* :bug-random)
(13 46 64 81 22 32 85)
T

乱数じゃなくても、現在時刻取得とかはいると一発アウトですね
ここまで典型的だとこういうものがゴショモウなブツなような気がしてきますね
あとはリプレイするたびに
TUTORIAL> (restore *system*)
NIL
TUTORIAL> (get-root-object *system* :bug-random)
(42 26)
T

g000001 2008-10-25T22:12:19+09:00
なるほど、なるほど

名無しさん 2008-10-25T22:12:30+09:00
そう、だからパラメータは引数でトランザクション外で決定して、トランザクションには決定的な関数、パラメータを渡す。これが綺麗に復元するコツです。
なるほど
あと、当然トランザクション用の関数定義の変更も諸刃の剣ですので気をつけましょう。

quek 2008-10-25T22:13:36+09:00
値の変化を記録するんじゃなくて、値を変化する方法(関数名)を記録するのはユニークだと思いました。

名無しさん 2008-10-25T22:13:37+09:00
どっちかっていうと自分に向いてる刃のほうが良く切れます。


quek 2008-10-25T22:14:22+09:00
まさに ”ゴショモウなブツ” な感じですね。

名無しさん 2008-10-25T22:14:46+09:00
こっちは気をつけるしかないので、慎重さと、それにバックアップを用意しておきましょう。なに、スナップショットをコピーすればいいだけですから。

g000001 2008-10-25T22:14:55+09:00
なるほど、なるほど

名無しさん 2008-10-25T22:16:03+09:00
で、ここで execute + make-transaction を略記するマクロの説明です。
;; 律儀
(execute *system*
   (make-transaction 'tx-test-2 "タナカ" "ニホン"))
;; お気楽
(execute-transaction
  (tx-test-2 *system* "タナカ" "ニホン"))
どっちも同じです。てゆうか execute-transaction は上の形式に変形してから実行されるだけです。
おぉ、しまった。使わなかった例がサンプルになっている。
わかってください。
(defun tx-test-2 (system name address) ...)
こんな関数なので、後者のほうが使いやすいのです。

g000001 2008-10-25T22:19:08+09:00
なるほど、確かに(*'-')

名無しさん 2008-10-25T22:20:20+09:00
トランザクションオブジェクトの構造と実行の過程を考えると、
execute + make-transaction が正しいんですけどね…
人間が記録したいのは execute-transaction 形式のほうなんです。(ただし *system* はそのたびにかわるけど)
構文を変形することで、理想(しかし実は嘘)な形にして、「わかりやすい」ようにしているんですね。

g000001 2008-10-25T22:22:02+09:00
execute-transactionも単純に構文を組替えてるだけみたいですね(*'-')

名無しさん 2008-10-25T22:23:01+09:00
マクロはプログラムをわかりやすくする…ただしコードの意図が理解できていれば、ね…。

g000001 2008-10-25T22:23:09+09:00
形としては、その場で関数呼び出ししているようにみえるが…という(笑)
なるほど、なるほど、ですねー。

名無しさん 2008-10-25T22:23:53+09:00
最初は大抵、なんでイロイロ形式あんだろう?どっちつえばいいんだろ?となるのでめんどい方から説明しました。
逆はちょっと経験上問題があったのでw

g000001 2008-10-25T22:24:28+09:00
なるほど、なるほど

名無しさん 2008-10-25T22:25:34+09:00
で、ですね。残りは管理されたオブジェクト、オブジェクトIDとインデックス、応用、あたりですが…
そろそろいい時間ですので今日はここらへんで…

g000001 2008-10-25T22:26:14+09:00
ですね(*'-')
勉強会としても、続きものの方が嬉しいです(笑)
続けて頂けるなら(笑)

名無しさん 2008-10-25T22:26:41+09:00
ちょこっと質問、clisp環境数時間前につくったばっかりでいまいち理解できてないんですが
実は原稿が尽きましたw

g000001 2008-10-25T22:27:13+09:00
いや、丁度良い分量かと思います(*'-')

名無しさん 2008-10-25T22:27:20+09:00
cl-prevalence 落としてざらっとみてみたところ、小さい lisp のマクロ群があるだけ?
= clisp 環境あるならどこでも動くのでしょうか。
マクロの組み込み方がわかってないので、まだ動かせてないのでそれは宿題なんですが、例えば xyzzy なんかに組み込んだりして動かしたりできるのかなと、素朴な疑問。
大体動くんですが、ファイル操作系の関数とか、MOP のパッケージ名とかが処理系毎に違うので標準サポート以外の処理系で動かすにはコツがいります。
動くと思いますよ。CLOS部分を落とせば。
おおぅ、コツさえあればいろんな環境で persistency 手軽に確保できるってのは面白いなぁ。
理解しました。ありがとうございました m(_ _)m
あ、CLOSがないと大幅書き換えが必要か…
あら><w
ごった煮版ではCLISPで動くように修正したものがついてます。

g000001 2008-10-25T22:33:07+09:00
あ、そういえば、
ごった煮版が
wget http://lispuser.net/files/clisp-2.46-full.zip
で403でした。
さっきemanon34さんと試したのですが(*'-')

名無しさん 2008-10-25T22:33:49+09:00
ぁさきほどうかgったんですが、ごった煮版おとせませんでした><
直しましたw
パーミッション間違えてた。

g000001 2008-10-25T22:34:54+09:00
おお、落ちてきました(*'-')

名無しさん 2008-10-25T22:35:25+09:00
わーい、きました♪ 試してみます

g000001 2008-10-25T22:36:49+09:00
という感じで、今回もonjoさんお疲れさまでした!(*'-')
次回なのですが、
まったくの未定ですので、
何かあれば、是非とも皆様、立候補してみても
誰も止めませんよ(*'-')
水曜日までに、このLingrに
ネタを投稿して頂ければ、
私が告知させて頂きたいと思いますー

kosh 2008-10-25T22:38:56+09:00
ありがとうございました>onjoさん

名無しさん 2008-10-25T22:39:48+09:00
勉強になりました m(_ _)m 888888

haiju 2008-10-25T22:40:12+09:00
あとで、じっくり復習します

g000001 2008-10-25T22:40:13+09:00
これからは、水曜までに、立候補がなければ、
土曜の開催は見送りで
という感じにしようかなと思っています(*'-')

名無しさん 2008-10-25T22:40:41+09:00
とりあえず目標は果たしました♪「CLに関して一つ位賢くなった気になること」w

g000001 2008-10-25T22:40:58+09:00
おお、ありがとうございます! > emanon34さん
emanon34さんは、プログラミング初心者というわけではなくて、他の言語で
何かされてるんですよね?
主な言語は、どういうものをお使いですか?(*'-')

kosh 2008-10-25T22:42:14+09:00
隔週もアリなんじゃないかなと考えた時期もありました<勉強会

名無しさん 2008-10-25T22:42:38+09:00
うーん、長いし雑食ですけど、C/Java といった王道系外してますし、

g000001 2008-10-25T22:43:15+09:00
なるほど、なるほど > 勉強会

名無しさん 2008-10-25T22:43:46+09:00
今は PHP か Excel VBA か R か、ばらんばらんです><

g000001 2008-10-25T22:44:04+09:00
なるほど、なるほど > Rとかマニアックですね(笑)

名無しさん 2008-10-25T22:44:53+09:00
Rもたいしたことできてないのですが、lisp とか関数言語の知識役に立ちそうかなって勝手に連想してますw

g000001 2008-10-25T22:44:54+09:00
来月数理システムさんで、AMOPの講習があるので、
AMOPへの道ってのも良いかなと思ったんですが、
ちょっとお題の準備が難しい(笑)
なるほど、なるほど > 知識
 ちょっと趣向を変えて、
集まって、みんなでコードを書いてみるってのも
ありかなあとは思ったりしてますが、どんなもんでしょう。
どう書くのCL版みたいな。
lisppastとか、gistとかを利用して結果を見せあうみたいな。
初心者向けということなら、

名無しさん 2008-10-25T22:50:12+09:00
ペアプロならぬみんプロw

g000001 2008-10-25T22:50:19+09:00
reverseを作って解説とか(*'-')
これは、ちょっと進行を考えないとgdgdになる可能性はあるんですが(笑)

kosh 2008-10-25T22:51:00+09:00
ためしに今やってみましょうか<コード

g000001 2008-10-25T22:51:02+09:00
やってみたら、わりかしエキサイティングかもしれないですよね(笑)

名無しさん 2008-10-25T22:51:11+09:00
末尾再帰 vs ループ とか

g000001 2008-10-25T22:51:14+09:00
おー、積極的な(笑)
やっぱ、コード書いてなんぼじゃんみたいな(笑)
末尾再帰 vs ループのお題って
どういうのがありますかねー。

名無しさん 2008-10-25T22:52:22+09:00
みんなでonce-only…とかで悩むと楽しいんだろうか

g000001 2008-10-25T22:52:39+09:00
once-onlyは暗記してるので、
すぐ書けます(笑)

名無しさん 2008-10-25T22:52:54+09:00
悩まない
暗記すごいですね

g000001 2008-10-25T22:54:05+09:00
loopを使ったバージョンがあるんですが、
これなら、なにも考えなくても
割と暗記できるかもという気がします(*'-')
(defmacro rebinding (vars &body body)
  "Ensures unique names for all the variables in a groups of forms."
  (loop for var in vars
	for name = (gensym (symbol-name var))
	collect `(,name ,var) into renames
	collect ``(,,var ,,name) into temps
	finally (return `(let ,renames
			   (with-unique-names
                               ,vars
                             `(let (,,@temps)
                                ,,@body))))))
暗記じゃないですが(笑)
`(let ,renames
(with-unique-names
,vars
`(let (,,@temps)
,,@body))))))
ここだけ憶えればOKなので。

名無しさん 2008-10-25T22:56:32+09:00
確かに、骨格だけ覚えてればすぐに再構成できるという意味で暗記してるものならけっこうありそうですね
reverse とか
リスト操作の基本的な関数は大体そうかもしれない

g000001 2008-10-25T22:56:57+09:00
ですね、doのイディオムとか
最後にnreverseするとか
さっきのprogのやつも
(prog (変数名))
setqで初期値設定
condで条件が満されれば、return
本体処理
(go L)
みたいな感じで、イディオムって
割とありますよね。

名無しさん 2008-10-25T22:58:12+09:00
with-unique-nameってcl-utilitiesでしたっけ

g000001 2008-10-25T22:58:28+09:00
lw-compatとかですね。
もともとLispマシンにあったマクロで、
once-onlyなんですが、
LispWorksだとwith-unique-nameって名前みたいですよね。
いや、with-unique-nameが、with-gensymsで
rebindingが、once-onlyだ(笑)

名無しさん 2008-10-25T22:59:31+09:00
なるほど。

g000001 2008-10-25T23:00:05+09:00
何か適当なお題はないですかねー。
let-ifとかどうでしょう
(let-if cond (binds...) then else)みたいなやつで、
condが真の時に、bind部が生きるというLispマシンにあった
マクロです(*'-')

名無しさん 2008-10-25T23:01:56+09:00
bindsなのは多値ですか?

g000001 2008-10-25T23:02:00+09:00
ま、お題にする程でもないですが(笑)
letのバインド部分そのままですね。
;; 動作
(let-if t ((foo 8) (bar 9))
  (list foo bar))
; => (8 9);; 動作
(let-if t ((foo 8) (bar 9))
  (list foo bar))
; => (8 9)


名無しさん 2008-10-25T23:02:45+09:00
ほあー

g000001 2008-10-25T23:02:55+09:00
あれ、nilになるとどうなるんだろうな。
あ、else部が実行されれば良いのか。
if-letとバインドの順番が違うだけかな。

名無しさん 2008-10-25T23:03:57+09:00
たちがとれるaifかとおもた

g000001 2008-10-25T23:04:07+09:00
こういう時は、とりあえず仕様が確定しないといけないな。
ああ、aif2みたいな。

名無しさん 2008-10-25T23:04:59+09:00
とりあえず多分かける人とかけない人の差が激しいとおもうので

g000001 2008-10-25T23:05:28+09:00
そうか、いきなりマクロってのもあれですね。
じゃ、reverseで良いんじゃないですかね。

名無しさん 2008-10-25T23:05:37+09:00
鼻ほじりながらできるのくらいで良いんじゃないですかね…
いまcl-utilitiesをみたらwith-unique-namesとwith-gensymsがあるなぁ。何が違うんだろ?

g000001 2008-10-25T23:07:10+09:00
gistが重いー

名無しさん 2008-10-25T23:07:51+09:00
名前だけ聞くと前者は名前を作ってくれそう

g000001 2008-10-25T23:08:26+09:00
http://paste.lisp.org/display/69180
あ、試しにreverseです。
末尾再帰じゃないやつ
自分、reverseは末尾再帰の方が簡単に考えられる代表例かなーと思ったりしてます。

名無しさん 2008-10-25T23:10:10+09:00
むむむ、次回のお題らしきものがすごいスピードで消化されてることまで理解(ぁw

g000001 2008-10-25T23:10:30+09:00
(笑)

kosh 2008-10-25T23:10:31+09:00
xyzzy-lispの関数ですが、sub-directory-pってCLだとどんな風になるのかなあ
http://xyzzy.s53.xrea.com/reference/wiki.cgi?p=sub-directory-p

g000001 2008-10-25T23:11:10+09:00
おおー、なるほどー。

kosh 2008-10-25T23:12:03+09:00
パス名が存在するかを考慮するかどうかで、実装が変わる気がします

g000001 2008-10-25T23:12:51+09:00
なるほど、なるほど

名無しさん 2008-10-25T23:13:36+09:00
pathname-directory して mismatch を使う……とかになるんでしょうか?

g000001 2008-10-25T23:13:56+09:00
自分もそんな感じで書いてました(*'-')

kosh 2008-10-25T23:14:26+09:00
http://paste.lisp.org/display/69181
じぶんでつくってみました
(sub-directory-p "C:/home" "C:/cygwin") ; =>T
多分だめですねw

g000001 2008-10-25T23:16:47+09:00
本格的にやるとシンボリックリンク問題とか
いろいろありそうですね(笑)

名無しさん 2008-10-25T23:17:02+09:00
考えなきゃいけない問題が多すぎて…
truenameやっていい?
悩む

kosh 2008-10-25T23:17:51+09:00
やっぱりパス名問題は鬼門か…

名無しさん 2008-10-25T23:18:23+09:00
あとcl-fadのpathname-as-directoryもひつようかな

g000001 2008-10-25T23:18:49+09:00
異様な手抜きバージョンを作成してみました(笑)
http://paste.lisp.org/display/69182
でも、お題としては、こういう色々な問題を再確認できるわけで、
割と良いんじゃないかなという。

名無しさん 2008-10-25T23:20:14+09:00
http://paste.lisp.org/display/69183
末尾再帰って何?
という感じ

g000001 2008-10-25T23:21:13+09:00
あ、reverseですねー。

名無しさん 2008-10-25T23:21:14+09:00
ですよね。じぶんもdolistをまず思いうかべました
手抜きっぷりが良いなぁ

g000001 2008-10-25T23:21:47+09:00
自分は、ループなら、doかなー

名無しさん 2008-10-25T23:23:04+09:00
えー

g000001 2008-10-25T23:24:09+09:00
http://paste.lisp.org/display/69180#1
これも完全なイディオムですね(*'-')
これも末尾再帰に形としては似てますね。

名無しさん 2008-10-25T23:25:11+09:00
えー、nreverseつかっておっけーなんですか?
イディオムだからこそ dolist があるんじゃないかという気もしないでもないところ

g000001 2008-10-25T23:25:43+09:00
dolist登場前のイディオムですね(笑)
schemeなら、foldとかなんですかね(*'-')

名無しさん 2008-10-25T23:26:17+09:00
dolist だとその前に accumulator を宣言しないといけないのがあまり好きではないんですけどね

g000001 2008-10-25T23:27:30+09:00
なるほど、なるほど

名無しさん 2008-10-25T23:27:43+09:00
(defun rev (list) (nreverse (copy-list list)))
こうかな

g000001 2008-10-25T23:27:52+09:00
http://paste.lisp.org/display/69180#2
reduceだとfoldみたいにすっきりしないのが、残念なところという。

名無しさん 2008-10-25T23:29:26+09:00
もすこしまともなの考えよう

g000001 2008-10-25T23:29:51+09:00
nreverseつかって大丈夫というのは、上のcopy-listと同じってことですね(*'-')

名無しさん 2008-10-25T23:30:24+09:00
うん。ちょっとズルイきがしたのでよりズルイ感じでかきました。

g000001 2008-10-25T23:30:46+09:00
いや、ズルイもなにも、昔からのイディオムなんですよね(笑)
あ、まちがえてた(笑)

kosh 2008-10-25T23:31:15+09:00
reverse関数を作れという問題にnreverse関数使うのはどうなんでしょうね…

名無しさん 2008-10-25T23:31:19+09:00
(reduce #'(lambda (x y) (cons y x)) list :initial-value ())

g000001 2008-10-25T23:31:21+09:00
nreverseはいらないです(笑)

名無しさん 2008-10-25T23:31:28+09:00
reduce 使うとこうでしょうか

g000001 2008-10-25T23:31:39+09:00
意味なかった(笑)
reduceもそうでした(笑)
ぼけてましたねー。
逆さの逆さ、みたいな(笑)
処理で逆にしたのを、ひっくり返す方が多いので、

名無しさん 2008-10-25T23:33:28+09:00
わはは

g000001 2008-10-25T23:33:29+09:00
癖で、ひっくり返してしまいまいしたね(^^;

名無しさん 2008-10-25T23:33:56+09:00
イディオムに忠実…と
たまにやりますねー

g000001 2008-10-25T23:34:20+09:00
(rev '(1 2 3 4)) => '(1 2 3 4)
よし! OK! みたいな感じで投稿してました(笑)
ま、自分は、頭使ってコード書いてないので(笑)
ま、やってみるとこんな感じに展開するのは
大体分かりましたね。
あとは、問題の難易度なんですかねー。
あんまり難しいと、沈黙になりますんで、
なかなか難しいかなー。
あ、古い変なイディオムなら自分は、割と好きで集めてたりするんですが、
それも興味持たれないだろうし(笑)

名無しさん 2008-10-25T23:40:28+09:00
イディオムの話は面白いかも、と今思いました
何か具体的な案があるわけではありませんが

kosh 2008-10-25T23:40:44+09:00
schemeにあってCLにない関数って何がありますかね?

g000001 2008-10-25T23:40:59+09:00
and-let*とか使いたくなることは
たまにありますねー
割とLISPならではのコードってのは、やっぱりあるので、それなりに自分は面白がってます > イディオム
(push (pop lst) ans)とか好きかも(笑)

名無しさん 2008-10-25T23:42:53+09:00
srfi-1 にあって CL にないものがいくつかありますね

g000001 2008-10-25T23:43:25+09:00
リスト操作系では、srfi-1は便利ですよねー
take、drop、色々便利なものは多いかなという。
SRFI-1も自分は、CLの練習で作ってみてたことがありますね。
割と良い練習じゃないかなあと個人的には思ってるんですが…。

名無しさん 2008-10-25T23:45:30+09:00
練習問題によさそうですね

g000001 2008-10-25T23:45:58+09:00
ですね、日課練習って感じで、一通り書けば、
CLのリスト操作も好きになるような(*'-')
で、リスト操作ができるようになると、自動的にマクロも書けるようになるんじゃないかなという。
風に考えてはいるんですがー。

名無しさん 2008-10-25T23:47:33+09:00
写経もよさそうですね
確かにマクロ書くのはリストになれてることが前提になりますね

g000001 2008-10-25T23:49:06+09:00
 マクロでは、式をどういう見た目に変形するかってのが結構多いと思うので、リスト操作得意なら、簡単ー、と思う人は増えるんじゃないかなあと。
あとは、定番の多重評価と、変数捕捉位押えれば、
ごちゃごちゃやってれば、とりあえず、書く方法は身に付きますよね。

名無しさん 2008-10-25T23:51:03+09:00
再帰的にデータ構造を触る感覚って、Lisp に限らず関数型言語の基本という意味でも大事だと思います

g000001 2008-10-25T23:51:30+09:00
ですねー、再帰の練習にも、もってこいですよね。
リストは。

名無しさん 2008-10-25T23:52:27+09:00
単純な構造で実用性もあるところが、ちょうどいいですね

g000001 2008-10-25T23:53:01+09:00
ですよね、リストは末長く楽しめます(*'-')

名無しさん 2008-10-25T23:53:05+09:00
一番単純なのは自然数ですけど、あれは練習にはなっても実用性はあまりないので

g000001 2008-10-25T23:53:16+09:00
自分はリスト言語が好き = LISPが好き = マクロが好き という感じですね。
なるほど、なるほど
リスト言語 っていうところで見ると、
Schemeは、CLよりちょっと離れ気味というか、
多分、CLの方がリストに身近かなという気がしていて、
その辺が、CLの方が好きな理由になってる気もします。
高階関数ならSchemeだとは思うんですが。

名無しさん 2008-10-25T23:58:09+09:00
そんな感じですね
Scheme のコードがリストでないといけない場面ってどこにあるかなって考えてみると
CL ほど S 式を前面に押し出してる感じではないというか
R6RSを読んでないのですが
ちょっと CL と Scheme だと目指すところが違うというんでしょうか

g000001 2008-10-26T00:01:14+09:00
なんとなくリスト言語である必要性は
薄くなってる気はしますよね(*'-')

名無しさん 2008-10-26T00:01:44+09:00
Scheme は普段使っていませんが、そんな印象があります。

g000001 2008-10-26T00:02:26+09:00
昔のLISPは今の関数型言語を規準に考えると
全然、関数型言語じゃないのですが、(goto とか)
リスト操作言語なんですよねー。

名無しさん 2008-10-26T00:03:46+09:00
Lisp が関数型である必然性って、あまりないのかも
というか、ないんでしょう

g000001 2008-10-26T00:04:01+09:00
自分は、そういう風にLISPを捉えてますねー。

名無しさん 2008-10-26T00:04:26+09:00
関数型ってのはlispを学ぶ前には聞きましたねー
関数型的な書き方もできますよ、っていうような
まぁ関数型具合はCと同程度だと思いますが
その点、Scheme は関数型と呼んでもいいような感じがします

g000001 2008-10-26T00:06:30+09:00
ですねー。
という感じで、リスト操作言語としてのLISPを熱く語ってみましたが、
この辺、もうちょっと興味を持ってもらえたら
楽しいなあと思ったりもしているんですよねー。
という感じで、
次回のネタを是非 みなさま
考えついたら、MLとか、こことかに投下してみて
くださいませ!(*'-')

kosh 2008-10-26T00:13:54+09:00
MLのリンクは右上に、ですね

g000001 2008-10-26T00:14:11+09:00
おお、ありがとうございます! ですね。リンク貼ってみました(笑)

名無しさん 2008-10-26T00:15:24+09:00
お疲れ様です。勉強になりました~

g000001 2008-10-26T00:15:43+09:00
お疲れ様です〜(*'-')
また、是非参加してみてくださいまし!

名無しさん 2008-10-26T00:16:06+09:00
最後にちょこっと質問です。lingr 長くなると結構重いんですが、irc gw ってあるなら接続先教えてほしいです~

g000001 2008-10-26T00:16:23+09:00
自分は、

名無しさん 2008-10-26T00:16:27+09:00
はい~ついてくだけって感じですが、また参ります^^

g000001 2008-10-26T00:16:33+09:00
perlのtiarra
を自前で立てて
lig.rbというのを通して、
ircクライアントから接続してます(*'-')

名無しさん 2008-10-26T00:17:34+09:00
あぁやっぱりlocalなんですね>< 理解しました、そっちもなんとかやってみますw

g000001 2008-10-26T00:17:45+09:00
ローカルプロキシですね(*'-')
また、よろしくおねがいします > emanon34さん

名無しさん 2008-10-26T00:18:41+09:00
はい~、ではお疲れ様でした~♪

quek 2008-10-26T00:19:18+09:00
今日は CL から Lingr API たたいて SLIME の repl に発言が表示されるようにしていたのですが、なかなかいい感じでした。発言の方はブラウザからですが。

g000001 2008-10-26T00:19:29+09:00
おお、それも凄い(笑)
specbotと連携して、
HyperSpecが引けるようにしてみて下さい(笑)

kosh 2008-10-26T00:20:24+09:00
いいなー

quek 2008-10-26T00:20:33+09:00
いや、そこはもう SLIME なんで(笑)

g000001 2008-10-26T00:21:39+09:00
プレゼンのスライドみたいに連動して動いたりできると、
進行としては、便利な感じですよね。
予め発言は全部用意しておいて、みたいな。

quek 2008-10-26T00:23:14+09:00
repl への入力と結果がそのまま投稿されるような?

g000001 2008-10-26T00:23:49+09:00
台本のデータをS式で用意して、
replから状況をみつつ
キューを出して、
スライドみたいに、するするっと行けると、
便利な気もしているのですが、
実際のところどういう風になるんだろう(笑)

quek 2008-10-26T00:26:30+09:00
アドリブ以外はショートカットキーのみってかんじですね。

g000001 2008-10-26T00:26:40+09:00
ですね、そんなイメージですね。
実際そういう感じでやってるので(笑)

quek 2008-10-26T00:26:49+09:00
この部屋専用プログラム(笑)
なるほど。

g000001 2008-10-26T00:27:22+09:00
台本を用意してないと、
ツッコミにも対応できないんですよね(笑)
余裕がないので(笑)

quek 2008-10-26T00:28:50+09:00
そうですよねw

g000001 2008-10-26T00:29:08+09:00
あと、slimeなら、台本をS式で用意しておいて、
バッファを評価してGOってのも
ありかもしれないですね(笑)
slime-eval-last-expressionとかで。

quek 2008-10-26T00:31:49+09:00
台本S式にするとき、文字列中の " のエスケープがめんどくさかったりw

g000001 2008-10-26T00:32:09+09:00
なるほど(笑)
そこでcl-interpolの出番ですが、そこで本番トラブルみたいな(笑)

quek 2008-10-26T00:33:02+09:00
ありそう!ww

g000001 2008-10-26T00:33:07+09:00
そうか、かっちり準備すると、リカバリも割と大変なのかな(笑)
いや、でも便利な仕組みができれば、CL普及の起爆剤になるやもしれませんね。
空前の勉強会ブームだそうですし。
なんつって(笑)
とりあえず、S式を綺麗に投稿できて、テンプレも簡単に投稿できると最高ですねー。
複数行まとめて投稿したときって、ちょっと水色になって view pasteできたりしますが、
やっぱり投稿方法が違うんですかね。
ここを切り換えるだけで、大分楽になりそうです。
もしくは、カレントバッファの選択した式をlingrに投稿できる機能

quek 2008-10-26T00:40:01+09:00
それだけなら割とかんたんにできそうな気が。。。

g000001 2008-10-26T00:41:16+09:00
おおー、欲しいですщ(゜▽゜щ)

quek 2008-10-26T00:43:31+09:00
Linger API は drakma で ok なんで、あとは elisp 側でしょうか。

g000001 2008-10-26T00:43:32+09:00
おお、いつの間にやら、もう0時をとっくに回っているのですね、
なるほど、なるほど
自分も、はてな日記は、SLIMEから投稿してるんですが、
elispとの連携で、躓きますね(笑)
SLIMEに式を送るのは良しとして、
反応の拾いかたが分からないので、投げっぱなしという(笑)

quek 2008-10-26T00:45:34+09:00
そういえば私も以前なにか似たようなことをしたようなw
私も投げっぱなしです

g000001 2008-10-26T00:46:00+09:00
slime-scratchとかもあるし、なんかしらあるに決まってるんでしょうけれど
結局、面倒なので、replから関数を実行してますね(笑)
で、成功すれば、返り値の文字数を返してくれるとかにしてます。
emacsのバッファと簡単に連携できれば、なんでも、slimeに送り付けてしまって、
elisp使わないってこともできそうなんですけどねー。

quek 2008-10-26T00:49:39+09:00
CL 側から emacs バッファをいじる方針ですか。。。できたら、いいかも。

g000001 2008-10-26T00:49:39+09:00
というところで、
ですよね、
CLで書いてしまうという(笑)
slimeに丸投げで、cl-ppcreとか使って文字列処理とか(笑)
と夢は広がっているのですが、
本日は、この辺で、
燃料切れな感じなので、
お暇させて頂こうかと思います(*'-')

quek 2008-10-26T00:52:07+09:00
はい。おつかれさまでした。

g000001 2008-10-26T00:52:14+09:00
はいー、お休みなさいましー(*'-')

名無しさん 2008-10-26T00:53:05+09:00
お疲れ様でしたー
おつかれさまでした。

quek 2008-10-26T01:20:11+09:00
そろそろ寝ます。ありがとうございました。おやすみなさい。

名無しさん 2008-10-26T15:40:24+09:00
こんにちは
ちょっとお聞きしたいんですが
evalのエラーをプログラム内でキャッチするのって
どうやるんでしょう?

g000001 2008-10-26T19:08:00+09:00
(map nil (lambda (expr)
           (handler-case (eval expr)
             (simple-error () (format *error-output* "~&simple-error?~&"))
             (warning () (format *error-output* "~&warning?~&"))))
     '((error "foo")
       (warn "bar")))
handler-caseとかhandler-bindとかで
解決できるパターンとかだと
こういう感じなんでしょうか('-'*)
あまり自分はエラーハンドリングしないので、
実際どうなるのかなというのは
自信がないのですが…。
PCLの
http://gigamonkeys.com/book/beyond-exception-handling-conditions-and-restarts.html
この辺りには色々書いてます('-'*)
(provide 'news)
SBCLの1.0.22がリリースされた模様
目玉的なところ:
new feature: new commandline argument: --script, which supports shebang lines. See documentation for details. (based on work by Kevin Reid)
リリースノート:
http://www.sbcl.org/news.html#1.0.22
ダウンロード:
http://prdownloads.sourceforge.net/sbcl/sbcl-1.0.22-source.tar.bz2?download

名無しさん 2008-10-31T10:32:09+09:00
ががが、2度め参戦ごーごーと思っていたら、連休でがっくり不参戦です。

g000001 2008-10-31T10:32:38+09:00
こんにちはー(*'-')

名無しさん 2008-10-31T10:32:48+09:00
CL のコードどころか、Lingr のローカルプロクシ構築でつまづいて進んでいない体たらく。あふぅ。マイペースでいきまーす(ぁ
Σ (゚Д゚ 人がいたっ 書き逃げする予定でしたのに><w

g000001 2008-10-31T10:33:06+09:00
(笑)
勉強会も長く
続けられるように
がんばりたいところです(笑)
いや、たまたまいただけので、
おきづかいなくw
またよろしくお願いしますー(*'-')

名無しさん 2008-10-31T10:34:17+09:00
あはんw オンライン勉強会は、該当の内容だけじゃなく、まずツール類に慣れるのが一苦労です・・・w

g000001 2008-10-31T10:34:38+09:00
Lingrとか
ちょっと面倒なところがありますね(*'-')
ローカルプロキシの設定もどっかに
晒してみたりすると良いのかなと思ったりもしますが、
IRCからLingrに接続する人って少なそうですね(笑)

名無しさん 2008-10-31T10:35:38+09:00
ただ使うだけなら、おーーですむんですけど、便利に使おうとか、あとツール自体で見えてること見えてないことでニュアンスとか変わったりしますので、わかってるようでわかってなかったり意思疎通難しいです~><

g000001 2008-10-31T10:35:55+09:00
手順を纏めてみようかしらという。
なるほど、なるほど

名無しさん 2008-10-31T10:36:16+09:00
IRC でも twitter でもなんでもいいんですけど、ajaxでがんばってもやはり
ブラウザ経由は重い&いろいろ無理が有りますもの。

g000001 2008-10-31T10:36:42+09:00
ですねー。
手軽ってのは良いんですけどね(*'-')

名無しさん 2008-10-31T10:37:24+09:00
ちょこっと覗き見だったらいいんですけど、こないだみたいなガチ&長丁場だとロートルPCにはきついw

g000001 2008-10-31T10:37:58+09:00
たしかにIRCだと軽いですよね

名無しさん 2008-10-31T10:38:05+09:00
こうしてる間にもどの程度ログ保全されてるのか、雑談で有用トークを見れなくしてないか不安なのです><w

g000001 2008-10-31T10:38:21+09:00
ログは
ずっと保持されてるみたいですよ
まあ、閑散としてるよりは良いので、がんがん埋めてやって下さい(笑)

名無しさん 2008-10-31T10:38:59+09:00
おー、じゃ、過去ログ漁ろうと思えば、いくらでもいけるんですね。

g000001 2008-10-31T10:39:04+09:00
ですね。
しかし漁るのが面倒なので、
ググった方が早かったりします(笑)

名無しさん 2008-10-31T10:39:54+09:00
あらん><w そういうのも便利になりそうでなかなかならないですねぇ><w

g000001 2008-10-31T10:40:00+09:00
ですねー。
ログが
一行一行URLが付きってのは
良い感じなのですが、
纏める方法がちょっと確立してないですねー。

名無しさん 2008-10-31T10:41:02+09:00
うわー、ある意味究極の REST 実現してるんだなぁ

g000001 2008-10-31T10:41:46+09:00
googleで、
site:http://www.lingr.com/room/common-lisp-jp
するとそれなりに、いろいろ後で参照できるかもという

名無しさん 2008-10-31T10:42:56+09:00
google group っていま必須ツールだなと思いつつ、いまいち UI 慣れず理解しきれてない感じです・・・MLつーのに違和感あるんですが、あれはMLなんですか?
ぁそじゃなくて site: 検索かぁ、なるほど。

g000001 2008-10-31T10:43:27+09:00
MLですね。
あ、そうですね、検索は、普通のgoogleですね。
検索でひっかかりやすいように

名無しさん 2008-10-31T10:46:01+09:00
おーとりあえずログはぎっちり残ってるんですね・・・keyword でひっかかればハッピーって感じでしょうかw

g000001 2008-10-31T10:46:01+09:00
勉強会開始の文言は、
ですねー
意識して、ユニークなものにした方がいいかもとか思いました(笑)

名無しさん 2008-10-31T10:47:05+09:00
caddr ってのはある意味ユニーク?w

g000001 2008-10-31T10:47:25+09:00
ですね、結構そうだと思いますよ(笑)

名無しさん 2008-10-31T10:48:36+09:00
情報は集約するスピードより分散するスピードの方が、どんなツールがあってもはやいですね・・・うーんうーん><w

g000001 2008-10-31T10:49:20+09:00
書き置きの
おしらせとかができると
良いなあと思うんですけども > Lingr
付箋みたいなのが、
サイドバーとかにあると良いなという。

名無しさん 2008-10-31T10:50:46+09:00
わたしも今回のみたいなのは、こっちにかけばいいのか、google group の方(join してないですけど) に post すべきなのかちょっと悩みました。
#join しなくていいからこっちかきにきただけともいうw

g000001 2008-10-31T10:51:13+09:00
現状どこでもOKです(笑)
どこもあんまり活溌ではないので(笑)

名無しさん 2008-10-31T10:51:57+09:00
あわわわw

g000001 2008-10-31T10:52:32+09:00
割と自分で解決しちゃうような人が多いみたいなので
共有してみよう! って人は少ないみたいですね(*'-')
CL人口が多くなれば、変ってくるんでしょうけど(笑)
少ないが故に自己解決型が多いのではないかという。

名無しさん 2008-10-31T10:53:43+09:00
でもいま自分で解決できちゃう派と、できない派・やろうとも思わない派の隔絶って開く一方な感じなんですよね~
できちゃうとあっというまにアタリマエ・陳腐化スタートっていうか。

g000001 2008-10-31T10:54:18+09:00
できない派を取り込みたいところですよねー。

名無しさん 2008-10-31T10:54:33+09:00
教えてもらってもやらない派はともかく、そそ、できない派代表として一石を(マテ

g000001 2008-10-31T10:54:52+09:00
割と、CLでは、「アタリマエ・陳腐化スタート」の敷居が
高いかもしれないですね。
あと、良く分からないエリート集団的な偏見が(笑)

名無しさん 2008-10-31T10:55:22+09:00
みなさん普段 emacs 使いってわけでもないんですよね?

g000001 2008-10-31T10:55:43+09:00
emacs使ってる人は多いんじゃないかなと思います

名無しさん 2008-10-31T10:55:44+09:00
ぶっちゃけ他日常で cl みかけるところってないような・・・w

g000001 2008-10-31T10:55:47+09:00
普段から(笑)
Rubyみたいに身近に
使うってのは、あんまりないかなという
ところですよね(笑)

名無しさん 2008-10-31T10:56:19+09:00
うーんやっぱそうかぁ、わたしエディタは結構マイナーなのしか使ってないので・・・

g000001 2008-10-31T10:56:34+09:00
自分は、CLしかわからないので、Rubyを使うようなところも
CLで書いてますが(笑)
LISP系の場合は、プログラムを書くのに
エディタの支援が必須なので
どうしても限られて来てしまいますねー。

名無しさん 2008-10-31T10:57:25+09:00
エリート意識かぁ、あんまアカデミックばっかりもよくないと思うんですが、啓蒙意識あるうちは・・・大丈夫じゃないかと?w
emacs はかつて、快適になるまでの設定が面倒で投げた口です><w

g000001 2008-10-31T10:58:06+09:00
普段のエディタは別に
emacsでなくて良いと思うのですが、
CLの開発ということになると、
それように特化してないと、
不便かなーというところがありますね、

名無しさん 2008-10-31T10:58:47+09:00
↑の問題解決自力で云々とも絡みますけど

g000001 2008-10-31T10:58:56+09:00
不便というか、Emacsは特化してるところが沢山ありますので便利なのですね。

名無しさん 2008-10-31T10:59:27+09:00
日常の使い捨てプログラムかくかどうかでなれ親しみ度というか使い込みっぷりのレベルに各段の差がでますもんねぇ

g000001 2008-10-31T10:59:50+09:00
CLで日常の使い捨てプログラムは書けるんですが、
その方法がちょっと
UNIXとか、Windowsでの通常の方法と
違ったところがありまして、
自分は、SLIMEからエディタのバッファを評価することで、
書き捨てなことをやってます。

名無しさん 2008-10-31T11:00:45+09:00
Emacs の特化かぁ・・・あの unix お作法というか、GNUお作法というか、RMSお作法というかがなかなか障壁高い・・・

g000001 2008-10-31T11:01:05+09:00
UNIXだと、スクリプトを書く→実行という流れですよね。
バッチ処理みたいな。
自分の方法は、UNIXの一行野郎をエディタのバッファから書いてるって感じですね。
そういえば、こういうところも、議論してみたいですねー。

名無しさん 2008-10-31T11:02:02+09:00
わたしエディタには Vz から入ったので、Emacs の「テキストファイルの編集ツール」じゃなくて「汎用テキストバッファ編集ツール」って方向性はわりとすんなり理解できたというか、Windows のエディタで同じようなことはわりとやるんですが
GNU お作法も理にかなってるところもあれば、単なるバッドノウハウの巣窟でもあるとこもあると思うんですねぇ。

g000001 2008-10-31T11:03:17+09:00
VzでもLISPの編集は、Emacsより便利にすることは可能だと思うのですが、
いかんせんLisper人口が多分少ないという(笑)
のが原因じゃないかなという気がしますね。
Vimもそうですが。
Vimだと、CLと連携して色々できるようになって来てるみたいです。

名無しさん 2008-10-31T11:04:09+09:00
なんとなくどっちもアカデミックな香り(とカルトな香り(ぼそ))が強くしちゃうのと

g000001 2008-10-31T11:04:35+09:00
なんというか、中途半端にそんな感じですね(笑)

名無しさん 2008-10-31T11:04:59+09:00
やっぱりうーん、語弊ありますけど、数学的な美しさみたいなのにたいする心理的抵抗がある気がします。

g000001 2008-10-31T11:05:19+09:00
割とそういうのからは、
遠いんですけどね(笑)

名無しさん 2008-10-31T11:05:35+09:00
あと、カルトつながりですけど、まー最初わかんないと思うけど、まず信心から入れって言われてる気がしちゃうとことか(ぁw

g000001 2008-10-31T11:05:36+09:00
Lisp都市伝説みたいな(笑)
多分、80年代位のLISPのイメージが

名無しさん 2008-10-31T11:06:04+09:00
そうですかねぇ、最近の言語に取り込まれてるクロージャ文法とかはわりと数学的だなぁって思いますねぇ

g000001 2008-10-31T11:06:07+09:00
未だに残ってるんでしょうねー。
なるほど、自分は、数学はからっきしなので、

名無しさん 2008-10-31T11:06:41+09:00
ああいうのでパズル的にひょいひょいっと、あれーこんなんでましたけどー的なのって

g000001 2008-10-31T11:06:41+09:00
どういうのが数学的なのかは分からないのですが、
分からなくても多分大丈夫なのではないかと(笑)

名無しさん 2008-10-31T11:07:08+09:00
lisp と unix 1liner に共通してるのか、なるほど。

g000001 2008-10-31T11:07:20+09:00
いやー、多分、RubyとかPerlと一緒ですね。

名無しさん 2008-10-31T11:07:21+09:00
まぁわたしも数学は門外漢ですけどw

g000001 2008-10-31T11:07:52+09:00
どういう風に普段使ってるのか、
情報共有したいですね(*'-')
それネタにしましょう! 来週位に(*'-')

名無しさん 2008-10-31T11:08:33+09:00
結局はどう転んでも入出力フィルタをいろいろ作ってるだけ・・・なんですけどね、プログラムなんて全部w

g000001 2008-10-31T11:08:43+09:00
その辺の扱いが、
フィルターの組み合わせってのが、

名無しさん 2008-10-31T11:09:01+09:00
はーい、来週こそ参戦できるよう調整&今週のはログ読みます・・・(あたふた

g000001 2008-10-31T11:09:02+09:00
UNIXの特長的なところがあるので
LISPな方法って別にあるんですよね。
あんまり、自分も分かってないですが(笑)

名無しさん 2008-10-31T11:09:37+09:00
ふむ・・・別な方法ですか・・・ pipe 的でない何か?

g000001 2008-10-31T11:09:46+09:00
ですね、世間が
UNIXに毒されすぎなので
という。
PIPEより古くさい手法かもしれないし、
不便かもしれない(笑)

名無しさん 2008-10-31T11:10:50+09:00
ふーむ、わたしのなかでも lisp - emacs - gnu -unix って結構ワンセットだなぁ><
そこに新しい違う何か見いだせたらそれだけで大いなる収穫ですw

g000001 2008-10-31T11:11:01+09:00
なるほど、
LISPは、50年の歴史があるわけなので、
UNIXより古いんですよね。
なので、別に歩んできた
歴史もあったりしますが、

名無しさん 2008-10-31T11:11:33+09:00
あぁそれもそうか

g000001 2008-10-31T11:11:35+09:00
滅びました(笑)

名無しさん 2008-10-31T11:11:46+09:00
||||||||||||||(* ̄ロ ̄)ガーン|||||||||||||||| いきなり滅んだ><w

g000001 2008-10-31T11:11:58+09:00
Lispマシンとか、
UNIXとは別の流儀なんですよね。
その辺を、ネタにしてみたいと思いますー

名無しさん 2008-10-31T11:12:35+09:00
ふむふむ・・・Lispマシン周りは全然未知の領域なので楽しみにしますw

g000001 2008-10-31T11:12:46+09:00
是非是非!

名無しさん 2008-10-31T11:13:23+09:00
わたしの目標としては、Lisp が日常言語・メイン言語になることはないと思うのですが
別言語でなんかやってるときとか、制約のないちょっとしたデータ処理するときに
ちぇっ こういうの lisp なら楽に書けるのになーって
年に一回くらいおもえるようになれば達成ってくらいですw

g000001 2008-10-31T11:14:21+09:00
なるほど(笑)
あるのかな、そういうの(笑)

名無しさん 2008-10-31T11:14:38+09:00
えー、ないのかなw

g000001 2008-10-31T11:14:44+09:00
そういうのあると良いですよね(*'-')
データ処理に特化したDSLとか、

名無しさん 2008-10-31T11:15:05+09:00
ここだけっ ってピンポイントなのでそういうのちょいちょいあるじゃないですかw

g000001 2008-10-31T11:15:13+09:00
でっち上げて対処とかに
なるというか、そういう発想は、
LISPやってると出てくるのかもしれないですね(*'-')

名無しさん 2008-10-31T11:15:46+09:00
ですです、そういうのに出会いたいのですw

g000001 2008-10-31T11:15:56+09:00
なるほど、なるほど。
Lispの人は、DSLとか、マクロとか鬼の首とったみたいに連呼してますんで、
多分、そういうのが得意なんじゃないかなと(笑)

名無しさん 2008-10-31T11:16:24+09:00
あとやっぱり lisp やってる人は良くも悪くも?美感にうるさいというか
コード書くとき美しさへのこだわりって度を過ぎると良くないんですけど

g000001 2008-10-31T11:16:59+09:00
そうなんですかねー。
その辺のイメージも自分は、
壊したいと割と思っている口です(笑)

名無しさん 2008-10-31T11:17:20+09:00
ないとひどい方向へ行っちゃうので lisper 的センスってのももうちょっと身につけたいというか理解できる程度になりたいというかw

g000001 2008-10-31T11:17:48+09:00
なるほど、なるほど

名無しさん 2008-10-31T11:17:53+09:00
いやーでも、コード見て、理屈抜きで汚いと思うセンスって何気に重要じゃないかと思うんですね。

g000001 2008-10-31T11:18:12+09:00
なるほど、70年代のLispのコードって
理屈抜きで汚かったりするんですけど、
なんというか、LISPって美化され過ぎてる気がするんですよね。
最近の関数型言語の流行で、
そういう筋の良い文化が色々組み合わさったイメージなのかもという
気もします(笑)

名無しさん 2008-10-31T11:19:53+09:00
ふーむ、生粋の lisp 文化はかならずしも美しくもないとw

g000001 2008-10-31T11:20:07+09:00
Schemerとかは、多分、綺麗さにこだわるんじゃないかなという(笑)

名無しさん 2008-10-31T11:20:50+09:00
ふーむ、未だ clisp と scheme の違いはさわりすら理解してないのでアレなんですが、心にとめておこう(ぁw

g000001 2008-10-31T11:20:53+09:00
CLのプリミティブは、結局gotoだったりしますし。
マクロに隠蔽されてて見えないですけど、代入の嵐だったりもしますし、という(笑)

名無しさん 2008-10-31T11:21:34+09:00
goto も使いようでは十分わかりやすいコード書けるんですけどねぇ

g000001 2008-10-31T11:21:49+09:00
gotoもマクロに隠蔽されてて見えないんですけども。
ですね、単発でgotoを書くことは
ないとは思います。

名無しさん 2008-10-31T11:23:10+09:00
まぁでも CPU のコードから goto 相当のアドレスジャンプがなくなることはありえないでしょうし

g000001 2008-10-31T11:23:18+09:00
ですねー。

名無しさん 2008-10-31T11:23:45+09:00
内部的に goto って仕組みが駆逐しえない=便利な場合は当然あるよってことだけだと思うんですけどね。

g000001 2008-10-31T11:24:08+09:00
Schemeだとその辺の事情がちょっと変ってくるので、
またちょっと違った文化になってますね。
より純粋に関数的な方向ですね。
CLはなんでもありですね(笑)

名無しさん 2008-10-31T11:24:48+09:00
ふむふむ、そのへんのエッセンスが垣間見られるだけでよい刺激になりそうですw

g000001 2008-10-31T11:26:16+09:00
是非覗いてやってくださいまし(*'-')

名無しさん 2008-10-31T11:26:38+09:00
はいー、半端な参加者で申し訳ありませんが、ちょいちょい参ります*・゜゚・*:.。.(*´▽`)パァァ.。.:*・゜゚・*

g000001 2008-10-31T11:26:54+09:00
おまちしていますー

名無しさん 2008-10-31T11:27:19+09:00
はーい、それでは落ちます~ ありがとうございました m(_ _)m

g000001 2008-10-31T11:27:28+09:00
はいー(*'-')

名無しさん 2008-10-31T11:37:36+09:00
急にログが伸びてるのでびびった
load-shared-objectとかsave-lisp-and-dieに手が入ってますね

g000001 2008-11-01T16:51:28+09:00
今日もCL勉強会開催させて頂きます!
お暇ならいかがでしょうか!20:00〜開始
お題: CL家族会議
他、どう書くorgを眺める。
うーん、scala勉強会は素晴らしいなあ
http://sites.google.com/site/scalatohoku/dai-13kai-benkyou-kai
こういう風にできたら良いなあ


kosh 2008-11-01T19:45:23+09:00
お邪魔します

g000001 2008-11-01T19:45:34+09:00
こんばんはー(*'-')

crq9jYZnSHw 2008-11-01T19:46:00+09:00
はじめまして、こんばんは

g000001 2008-11-01T19:46:12+09:00
はじめまして、こんばんはー(*'-')
よろしくお願いしますー

crq9jYZnSHw 2008-11-01T19:46:47+09:00
よろしくお願いしますー

g000001 2008-11-01T19:47:21+09:00
今日は、gdgdになる可能性があります(;´Д`)
ノープラン気味なので(笑)

crq9jYZnSHw 2008-11-01T19:47:54+09:00
それはそれで楽しみですw
Lisp初めて一ヶ月たたないので
やさしい話題だとうれしいです

g000001 2008-11-01T19:49:14+09:00
それは、心強い(笑) > それはそれで楽しみ
今日は、今週の自分のCL的活動を報告するのが、第1部で
誰でも発言できる筈です(笑)

kosh 2008-11-01T19:49:57+09:00
CL家族会議に話せるようなネタがないのでROM側に回ろうかと思うんですがw

g000001 2008-11-01T19:50:15+09:00
いや、無ければ、無かったという風に参加して頂ければ(笑)
[1]今週のCL的活動を報告(書いたコード/勉強してる内容とか)
[2]疑問に思ったことを報告
[3]やってみたいことを相談
らしいですね。自分のメモによると
自分も大したことは全くしてないので、
是非ともお気楽なノリでという

kosh 2008-11-01T19:52:41+09:00
じゃあ、発言はする方向で。

g000001 2008-11-01T19:52:42+09:00
今日は連休だし参加者は少ないかなー。
是非是非(*'-')

quek 2008-11-01T19:53:09+09:00
こんばんは。よろしくお願いします。

g000001 2008-11-01T19:53:15+09:00
こんばんはー(*'-')
家族会議って名前もおかしいといえば、おかしいのですが…。
後は、どう書くorgのCLコードを勝手にレビューという
のがその後ですね。
割と会話がメインかなという気がしますので、
ガンガン発言を投下して頂ければなという
ところでございます。

名無しさん 2008-11-01T19:56:58+09:00
こんばんは

g000001 2008-11-01T19:57:06+09:00
こんばんはー(*'-')

crq9jYZnSHw 2008-11-01T19:57:35+09:00
こんばんはー

g000001 2008-11-01T20:00:24+09:00
あらためまして、こんばんはー、では20時になりましたので、開始します。
第22回

今回のお題は、(1) CL家族会議、(2) どう書くorgを眺める です。
(1) CL家族会議
ってなんだか良くわからないですが、
ひとりずつ順番に
[1]今週のCL的活動を報告(書いたコード/勉強してる内容とか)
[2]疑問に思ったことを報告
[3]やってみたいことを相談
みたいな感じで報告しあったら何か面白いんじゃないのかしら、と
いういきあたりばったりな
思い付きです、すいません(笑)

quek 2008-11-01T20:02:10+09:00
いえ、なかなかおもしろそうです。

g000001 2008-11-01T20:02:11+09:00
今7名参加されてると
それは良かった(笑)
とりあえず、
いいだしっぺなので
自分から行こうかという
ところですね。
では、
自分ですが、
今週は、CLの本を読んでまして、
OOPCL読んでます。
http://www.amazon.co.jp/Object-Oriented-Programming-Common-Lisp/dp/0201175894
これですね。
邦訳もあるんですけど、
入手できないので、
泣く泣く洋書で読んでます。
数理システムさんのAMOPセミナーがあるんで
それの前には読み終えたいんですが、
めんどうですね(笑)
で、他の活動ですが、
goo-compat
という、gooのコンパチユーティリティを作って暇潰し
したりしました。
でも、飽きました。
http://gist.github.com/21487
こんなの途中まで書いてたりしました。
GOOというのは、DylanとかSchemeに影響を受けた処理系です。
~-compatを作ったりするのは、割と趣味です(笑)
で、他ですが、
「暇なので、CLで勉強会の告知作成」
をしてみました。
最初テンプレートパターンで作成してみたんですが、
ContextLが使えそうなので試しに作り直してみたりしてました、
http://gist.github.com/20629
あと、
「spam-champruが面白そうなので適当に作成」
してみました。
inserted by FC2 system