LISP Scheme Part8

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
      /⌒ヽ 
     /   ゚ω゚)
     |  U /
     ( ヽノ
      ノ>ノ  ヒタヒタ
. 三  しU
□参考リンク□

日本Lispユーザ会(日本語)
http://jp.franz.com/jlug/index.html
ここにかなりの情報があります。
http://jp.franz.com/
削るとAllegro Common Lispのページへ

プログラミング言語Scheme(日本語)
ttp://www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html
Schemeの人はまずここを見ましょう。

Lisper への道(日本語)
ttp://www.geocities.co.jp/SiliconValley-Oakland/1680/rakup.html
判りやすいLISP入門サイト。

Schemeへの道(日本語)
ttp://www.stdio.h.kyoto-u.ac.jp/~hioki/gairon-enshuu/SchemeNotes/scheme.html
ここはschemeの入門サイト。
慶応の授業のページ・記号処理プログラミング 2001
http://buri.sfc.keio.ac.jp/lisp/menu.html

Practical Scheme(日本語)
ttp://www.shiro.dreamhost.com/scheme/index-j.html
「普通のやつらの上を行け」など、興味深い文書を沢山翻訳されてます。
(Gaucheという完成度の高いscheme処理系作者さんのページでもあります。)

Scheme Hash(英語)
http://okmij.org/ftp/Scheme/index.html
S式でXMLを使える様にするSXMLなど

John McCarthy's Home Page
http://www-formal.stanford.edu/jmc/
LISPの生みの親、J・マッカーシーのページだそうです。

お隣りのプログラマ板のLISPスレのログです。(dat落ち)
http://mentai.2ch.net/prog/kako/963/963134110.html
□仕様書関係□

Common Lisp the Language, 2nd Edition(英語)
http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/cltl2.html
CommonLispの仕様書です。

アルゴリズム言語Schemeに関する第五改訂報告書 R5RS(日本語)
http://www.sci.toyama-u.ac.jp/~iwao/Scheme/r5rsj/html/r5rsj_toc.html
http://www.biwa.ne.jp/~mmura/scheme/tspl.html#r5rs
日本語訳はここ以外にもあるそうです。

Scheme Requests for Implementation SRFI (英語)
http://srfi.schemers.org/

Scheme Frequently Asked Questions (英語)
http://www.schemers.org/Documents/FAQ/
□SICP関係□

SICP(英語)
http://mitpress.mit.edu/sicp/full-text/book/book.html
「計算機プログラムの構造と解釈」の原書です。
全てオンラインで読めます。

計算機プログラムの構造と解釈 第二版 (snip) に関連するホームページ
http://www.ipl.t.u-tokyo.ac.jp/sicp/

SICPの回答集
http://www.melt.kyutech.ac.jp/~gogogo/sicp_ex/
http://pluto.aurorasd.co.jp/~mkama/sicp/
http://www.ipl.t.u-tokyo.ac.jp/sicp/solution.root.html
http://www.sampou.org/scheme/sicp/answer/
□その他□

Schemeで書かれた正規表現ライブラリ
ttp://www.cs.rice.edu/~dorai/pregexp/pregexp.html

幻の「入門Scheme」
ttp://www4.ocn.ne.jp/~inukai/scheme_primer_j.html
オンラインで読める

各種scheme処理系をcygwin上からビルドする方法など。
ttp://www.geocities.co.jp/SiliconValley-PaloAlto/7043/

Bit - Implantation compacte de Scheme
http://www.iro.umontreal.ca/~dube/
mini-schemeよりも小さい(?)bytecode変換系

Lisp 言語処理系: CAMPUS LIsP, Lemon version
http://aten.aial.hiroshima-u.ac.jp/~kakugawa/clisp/index-ja.shtml
Cコードによるわずか1000行の実装
Scheme 処理系に追加( Scheme 処理系を自作したい人向け)。

Minischeme: 1 ファイルに凝縮された Scheme 処理系
http://tinyscheme.sourceforge.net/minischeme.tar.gz

TinyScheme: Minischeme の発展版
http://tinyscheme.sourceforge.net/

KI-Scheme, AM-Scheme, etc...
http://www.nifty.com/download/dos/prog/lisp/

LispMe: Palm 上で動く Scheme 処理系
http://www.lispme.de/lispme/
Tiny CLOS Tutorial
http://home.adelphi.edu/~sbloch/class/272/tclos/tutorial.shtml

Schemix
http://www.abstractnonsense.com/schemix/
Linuxのkernelへのパッチで、/dev/として扱えるTinyScheme

Bibliography of Scheme-related Research
http://library.readscheme.org/
Scheme関連の論文リンク集

>1
乙彼
PetiteChezSchemeで、バグみたいなの見つけたんだけど、
(do ((i 0 (+ i 1)))
((< i 1000000) 'ok)
(display "このdisplayが実行されないよー"))

何か勘違いしてる?
あああ、おれの頭がバグっていた。
(do ((i 0 (+ i 1)))
((= i 1000000) i)
(display "このdisplayが実行されまくる"))
だった。
iが1000000になっても止まらないってこと?
14デフォルトの名無しさん:03/07/15 21:41
ちがくて、停止条件と継続条件を間違えただけでした>13
doなんてめったに使わないから、やられた。
なんか書き込みもバグってるよ
Petiteのバグじゃなくて、おれの勘違いと言う事でした。
clisp で unicode を扱えるようにするには何か設定が必要ですか? それともコンパイルオプションで
unicode を使用させるようにしなければいけないのでしょうか。教えて下さい。

Mac OS X で Fink パッケージからインストールした clisp 2.29 を使っているのですが、
(string-width "日本語") => 6 になってしまいます。端末エミュレータは UTF-8 で入力/出力する
ような設定にしてあります。
>>16
OSXでclisp使ってないからハズしてるかも知れないけど、*features*に:UNICODEが
入っているかどうかまず確認してみて話はそれからだね。
もし入ってたらlibiconvはリンクされてると思われるので(apropos "coding")とでも
して関係ありそうな函数一個ずつ調べて行ってみてください。
system::*terminal-encoding*が#<ENCODING CHARSET:ASCII :UNIX>のままとか
いうオチだったらコロ助。

ぼちぼち寝るので返事くれても反応できないからそのつもりで。んじゃおやすみ。
>>17 さん
丁寧なレスありがとうございます。
おっしゃる通りでした。逝ってきます。string-width は変わりませんでしたが、aref ではきちんと
UNICODE 文字として認識されているようですので、string-width についても自分で調べてみます。
どうもありがとうございました。

% clisp -q -Eterminal UTF-8

[1]> (print *features* )

(:CLOS :LOOP :COMPILER :CLISP :ANSI-CL :COMMON-LISP :LISP=CL :INTERPRETER
:SOCKETS :GENERIC-STREAMS :LOGICAL-PATHNAMES :SCREEN :GETTEXT :UNICODE
:BASE-CHAR=CHARACTER :UNIX)
(:CLOS :LOOP :COMPILER :CLISP :ANSI-CL :COMMON-LISP :LISP=CL :INTERPRETER
:SOCKETS :GENERIC-STREAMS :LOGICAL-PATHNAMES :SCREEN :GETTEXT :UNICODE
:BASE-CHAR=CHARACTER :UNIX)
[2]> (print *terminal-encoding* )

#<ENCODING CHARSET:UTF-8 :UNIX>
#<ENCODING CHARSET:UTF-8 :UNIX>
[3]> (string-width "日本語")
6
[4]> (aref "日本語" 0)
#U65E5
前スレの >>769 にて
> 参考になる綺麗なコードも少ない。
といった話がありましたが、
参考になる綺麗な Lisp コードって、どういったものがありますか?
「これは綺麗だった!」ってのをいくつかみつくろって教えて下さい。
(begin (display "Part8") (newline)
(for-each (lambda (x) (display x) (display "━━"))
'(キタ (゚∀゚) (∀゚ ) (゚  ) (  ) (  ゚) ( ゚∀) (゚∀゚)))
(display "!!!!!") (newline))
>>21 正直、ありがとう。Common Lispe 派の俺は継続はよく分かって
なかったんだ。ちょっぴりコストが気になるんだけど、Scheme 方面では
継続つかいまくりなんでしょーか?
普通は使わないんじゃない?
裏で使ってるかもしれないけど。
>>19
CL-HTTP はどう? 個人的にこういうスタイルが好み.
http://www.ai.mit.edu/projects/iiip/doc/cl-http/

John Foderaro のコードは「Lisp Coding Standards v1.0 」なんて
言っているくせに AllegroServe のコードは全然綺麗じゃないと思う.
http://www.franz.com/~jkf/coding_standards.html
>>24 then, else を明示的に書く if* を試してみようかと思いはじめますた.
>>19
applyやmapが上手く使われてて、lambdaがないと綺麗に思うな。
初歩的だけど参考になったという意味では、
(define (rev a)
 (if (list? a) (reverse (map rev a))
   a))

(define (flatten a)
 (if (list? a) (apply append (map flatten a))
   (list a)))

(define (for-each-tree f g a)
 (let self ((a a))
  (if (list? a) (apply g (map self a))
    (f a))))
(define (sum tree) (for-each-tree + + tree))
(define (map-tree f tree) (for-each-tree f list tree))
wxLisp に期待。
28flatline ◆r6EONKKhcc :03/07/18 08:56
It's fine with me if you want to put a Japanese translation
online.  I doubt the new publishers will issue a Japanese
version.  --pg

とのことです.という訳でOn Lisp邦訳版(1-7章のみ)の公開を再開しました.
ttp://user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.{dvi,pdf,tex}.bz2
しかし今は期末テスト前半中なので作業再開は8月に入ってからになります.
(゚д゚)ウマー Paul タンマンセ- flatline マンセー
AllegroCommonLispの使い方おしえてください。
登録とか必要なん?めんどいっすか?
親切な説明きぼんでございます。
試用版なら,メールアドレスを登録してライセンスファイル
を取得する必要があります.また,定期的にライセンスファイル
の更新が必要です.もっと詳しく聞きたい?

めんどくさいと感じるなら,フリーの実装使ったほうがいいかも.
継続の勉強を継続中。。。むずかしい。。。
ところで継続が扱える言語って何があるんですか?
とりあえずGoogleしてこれだけわかりました。

Ruby
Scheme
Prolog
Smalltalk
Standard ML
Haskel
Stackless Python

33デフォルトの名無しさん:03/07/20 02:50
継続難しいか?
CPSはそれなりに難しいかも
>>28

先に出しときゃ煽られなかったね。
で、これからは訳の進捗で煽られると。
てことはどっちにしても煽られる?(をい

LispとSchemeを同時に勉強してるんですけど、
この2つで何が違うのかいまいちよくわかりません。

SchemeはLispのサブセットといいつつ、継続と
delayやforceはSchemeにしかないですよね?

SchemeとLispの区別をあいまいにしててハマるツボとかあります?
スコープと関数の名前空間。
サブセットじゃない。
便利な関数リファレンスとかってありますか?
便利を定義してください。
BENRI Benri is Effective aNd Reliable Interface
>>36
サブセットではなく方言の一つ
4336:03/07/20 22:43
レスどうもです。

なるほど、スコープや名前空間で違いがあるんですね。
このあたりしっかり理解してなかったんで勉強しておきます。

サブセットというのも勘違いだったようで…
仕様が巨大なのはLispのほうですよね?
ACL trial 版って GUI 作れないのね。
>>43
単に、LISPと言っても色々あるからな。
巨大な仕様のLISPと限定すれば、CommonLISP。
と言っても、最近のC++程に巨大かというと、そうでもない。
>>43
Lisp は総称であって 「Lisp という名の言語」 があるわけではない
47デフォルトの名無しさん:03/07/21 09:05
gcのゴミ集めの様子をグラフィカルに表示できる処理系ありませんか?
(windowsのデフラグの様な)
無かったら自分で作ろうかと。
48デフォルトの名無しさん:03/07/21 09:21
Lisp系?
emacsでM-C-aとかって押せるわけないと思う。
なんで?
>>49
指がJOJOっぽくなる。(すごーく押し辛いのよ)
右親指でalt 右小指でctrl
でaを押せばいいんじゃない?
MってAltキーのことなんだっけ?Metaキーという名前だったような・・・
右のAltが小さくて押す気がおきなかったんだけど、普通そうするのか。
それにしてもなんだよ、右Altの左の”カタカナひらがなローマ字”ってキー。
ESC 押して離して、普通に Ctrl + a でいいじゃん
日本語キーボードを使わないかキーの配置を変える。
英語キーボードだとスペースキーの右が右Altだから押しやすいと思うが。
Ctrl + [ を押して Ctrl を離さず a を押す。
TeX に疲れたので、だれか Lisp 系の組版システム作ってください。
無論自分でもやりたいが、TeX も理解できないヘタレな漏れにはムリポ。
>58
どういうのをイメージしているのか教えてぷりーず
それってTeXよりもいいものなのか?
>>58
DSSSL?
(math (= (+ 1 1) 2))
>61
なんですか?
6359:03/07/23 01:13
>62
勝手に推測すると $1+1=2$ と言いたいのと思われ
でも $(1+1)=2$ はどうするのだろう?
>>61
クォートしようよ。
(math '(= (+ 1 1) 2))

>>63
勝手に推測すると
(math '(= (explicit-paren (+ 1 2) 2)))
=> $(1+1)=2$

勿論implicitなparenthesisもあるわけで、
(math '(* (+ 1 2) 2)
=> $(1+2)*2$

って、これって相当するTeXソースを標準出力か何かに吐く関数を定義すればいいのかな?
6559:03/07/23 03:22
>64
括弧の位置が微妙な予感w

いっそのことMathMLと等価なS式で…TeXの方がまだましか (´・ω・`)
>65
括弧の位置って?ええと、3つ目の例で閉じ括弧を忘れてるのはごめんなさい。
MathML、そんなのもあったね。。。

スワップアウトの外だったのでぐぐってみたらアドワーズ広告大量でちょっとびっくり。でも
>とても人間が書くような内容とは思えない。
うん、確かに。まあもともとXMLが人間の書くものじゃないんだけど。
だれと話してるの?
見えないお友達と
Wiki に TeX の数式やレイアウトコマンドが埋めこめるよーなやつ
キボンヌっと.TeX の数式はしょうがないとは思うんだが,マクロ
書き難くない?漏れだけ?スタイルファイルとか暗号に見える…
内部表現に S 式使いたいなー。
(document (chapter "..." (section "...") (section "..."))
(chapter "..." (section "...") (section "...")))
だったら、激しく section や chapter やらをいじるのが楽。
使いたいなら使えばいいじゃん
アフォ?
S式M式
>>71
それくらいなら、Cのプリプロセッサを用いて出来そうじゃない?
完全なS式では無いけど。
世の中なんでも XML なので,XML -> SXML でいいんでない.
>>75
で、DSSSLの後継作ってSXML処理させるのがSchemerの正しい姿かな?
お話の途中で恐縮ですが、質問させてください。
当方、俄かに思い立ち、Schemeを学ばんと志す初学者ですが、
petite chez のインストールで既に躓いて、難儀しております。
インストーラーがするすると懇切丁寧にインストールしてくれるまでは良かったわけですが、
どういうわけか "cvs6.0a/i3nt/" 以下に生成される筈の "petite.heap" なるファイルが見当たりません。
"INSTALL.LOG" を見ると、きっちり当該のディレクトリに copy された旨、明記されておりますが、
どういうわけか存在しません。
どうも、対応OSの項にXPが明記されていないのが怪しいと踏んでおりますが、素人算段ではあてにならんかと。
それとも私は、何か馬鹿な勘違いをしでかしておるのでしょうか?
申し送れましたが、当方の環境は以下の通り。

Windows XP Home Edition SP.1 (filesystem は NTFS でフォーマット)
Petite Chez Scheme ver.6.0 for Intel Windows NT/95/98/2k

お忙しいところ申し訳ありませんが、一つ有志の助言を仰がせていただけましたらば、と思います。
Gauche release 0.7.1:
# SXMLフレームワークが統合されました。 SSAX XMLパーザ、SXPATH問い合わせ言語、および Kirill LisovskyとDmitry Lizorkinによるsxml-toolsが含まれます。
# Boehm GC 6.2へとアップグレード。
# fluid-letマクロを追加 (thanks to Dorai Sitaram).
# Gaucheの拡張モジュールのサンプルソースをexample/spigotに置きました。
# text.html-liteは、空エレメントに対して XHTMLと互換性のある "<tag />" を出力するようになりました。
# www.cgi: cgi-header は任意のキーワード引数 を取り、それらを追加のヘッダとして出力するようになりました。 また、 :location 引数とset-cookieヘッダを同時に使う事も できるようになりました。
# 変数 *program-name* and *argv* は -u, -l, -e コマンドラインオプションが評価される前に設定される ようになりました。したがって、これらのオプションで引用される ファイル中のこれらの変数への参照が正しく動作します。
あとはバグフィックス
79デフォルトの名無しさん:03/07/28 01:17
Windowsで使えてGUIが組めて、Cに組み込み可能な処理系ってあります?
schemeでもlispでも構いません。教えて下さい。
80デフォルトの名無しさん:03/07/28 01:22
★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
★☆                       
☆★ 送料激安!!  送料激安!!  送料激安!!
★☆      http://www.get-dvd.com      
☆★  激安アダルトDVDショップ        
★☆    お買い得セール1枚500円〜980円!急げ!
☆★    インターネット初!「きたぐに割引」  
★☆    北海道・東北の皆様は送料も激安!   
☆★      http://www.get-dvd.com      
★☆        スピード発送!        
☆★      http://www.get-dvd.com      
★☆        商品が豊富!         
☆★      http://www.get-dvd.com      
★☆                       
☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆
81山崎 渉:03/08/02 02:15
(^^)
この寂れようは何?
>>79 がLispでWinのGUIというNGワードを吐いたからでしょ。
あ、xyzzyってのがあったか(w  何とか組み込みに改造しなよ。
Allegro CL があるじゃん。
LispWorks とかもあるな。GCL もなんか GUI ライブラリがどーのって前にでてたようだが。
CLISP の GDI モジュールに期待しつつ、黙って待つのが通。
77のインストールできないって話はどうなったんだ?
ACLって高いね
>>87 >>77
まずは対応OSに入れてみれば?
Petite Chez SchemeのWindows版はインストーラ形式になっているが、
結局はレジストリ関係の設定は不要で、ファイルさえあれば動く。
インストーラでコケてるんで、XPでも問題なく動く保証はない。
>>79
今ちょうど、そういう処理系を作ってる。
GUIも一応組める様になった。
ということで、処理系はあるね。
>90 公知でなければあるとは言わない。
そうですか。
すまんこ
Zaurus SL-7x0 で動く Scheme処理系が欲しいでつ…
>>93
Linuxなら色々処理系あるんでは?
あ、Zaurusはプロセッサが違うのか。
>>93
とりあえずLinuxが入ってるのなら、
umb-scheme辺りは動く様な気はするので試してみては?
メンテ終わってるそうだが。
普通にgauche入れて使ってますよ
漏れも gauche コンパイルしてみたんだけど real number 使うと落ちるよ
>>90 公開する予定はないんでしょうか?
Lisp/Scheme から wish を呼び出せば良いんじゃない?
100デフォルトの名無しさん:03/08/06 01:16
100ゲトしたのでageますよ〜!

101デフォルトの名無しさん:03/08/07 21:08
Gauche0.7.1のマニュアルに、コールバック内外へ向けての
継続呼び出しは無理だと書いてあったんだけど、
これをちゃんと実装してる処理系ありませんか?
あんまり使わないってのはわかるんだけどね・・。
横からすまんけど、コールバック内への継続呼び出しってどんな風に使えるんですか?
継続とか使ってる人とあまりみたことないんで興味津々。
>>102
まず、デバッガの実装に使えるね。
他に、真の協調スレッドタスクが組める。
わざわざCPSを使う必要がなくなるだろう。
いくら言語側をスタックレスに作っても、
GUIを扱うならコールバックによるネストは避けられない。
pythonや他の言語はどうしてるのかな。
コールバックを使う GUI はクソ。と言ってみたいです。
解せないのがSCMの方式。(continue.c)
Cによる無理矢理とも思えるスタック退避+setjmp/longjmp。
あれでちゃんと動いてるのかね。
107デフォルトの名無しさん:03/08/08 23:53
有理数がサポートされていないと,
完全数のまま演算できないよ ヽ(`Д´)ノ

mit-scheme はできるけど,重いのなんのって.

みなさん,有理数をサクサク使うにはどうしてますか?
有理数をサポートすると mit-scheme みたいな動作になるんですか?
分数ならPetite Chez Schemeでも扱えたけど。
109デフォルトの名無しさん:03/08/09 08:57
>>108
ありがとう.使えました.とっても軽いですv

有理数の扱いは難しいということですか?
ちゃんと書いたのに +#.# (顔文字) を返す guile って...
guileはよくわかんねえな。
遅いし。
>>79
biglooにWindows版あるけど、これでGUI扱えんかね?
DrScheme の UNIX 版使ってるけど一応 GUI あるぞ。
Win 版でも使えるんじゃねーかな。
113 :03/08/12 19:36
記号微積システムを考えているのですが、積分がいまいち分りません。
「計算機プログラムの構造と解釈」には微分が載っているので参考にできるのですが・・・
なにか参考になるサイト等はないでしょうか?
Maximaのソースとか?
今ちょっと試したけど、biglooのインタプリタってそんなに速くないね。
どうやってコンパイルするのかな・・
116flatline:03/08/13 01:54
>>113
をを同士よ.木村巌氏のScheme総合サイト
www.sci.toyama-u.ac.jp/~iwao/Scheme/scheme.html
からA. Jaffer氏のサイトに行けば,Jacalというのがあります.
これはSchemeで書かれたフリーソフトです.
変わったところでは,Mathematicaのわずかな部分だけをCommon Lispでエミュレートする
MockMMAというのをRichard Fateman享受@バークレーが密かに配っている.
www.cs.berkeley.edu/~fateman/
から探せば見付かります.
あと本格的過ぎて役立たないだろうけど,計算機代数システムMaximaのサイト
maxima.sourceforge.com
ここからCommon Lispのソースをゲト.
あと確か,Structure and Interpretation of Classical Mechanicsという
授業の教科書がMITのサイトから配られてたので,何か関係あることが載ってるかも.

>>みなさま
On Lispの翻訳,相変わらずびみょーに進めてます.洩れのサイト
user.ecc.u-tokyo.ac.jp/~g340299/
をたまにのぞくと更新されてるかもしれません.
補足.
つながらなくはないけど, maxima.sf.net とした方がよかったですね.
あとSICMのサイトは
mitpress.mit.edu/SICM/
でした.G. Sussmanが関わってるんですよ.
ここのscmutilsは,MIT Schemeの実装にべったり依存だそうです.
SICMはShiro KAWAIさんのWikiで知ったんですけど,誰かがそう書いてました.
そういや、MIT-Schemeもいつのまにか
MIT/GNU Schemeになってるな。
前からそうだったっけ?
>117
この本のタイトルは知ってはいたけど、こういう本だとは知らなかった
力学の数学的抽象を計算機に載せたいとか考えていた漏れは読まなきゃダメか
CLOSのマルチメソッドってなに?
CLispにはCLOSの超簡単なチュートリアルが付いてきます。
それでだめならALU: The Asocciation of Lisp Usersのサイトから
適当に文書探して下さい。
122山崎 渉:03/08/15 15:39
    (⌒V⌒)
   │ ^ ^ │<これからも僕を応援して下さいね(^^)。
  ⊂|    |つ
   (_)(_)                      山崎パン
123デフォルトの名無しさん:03/08/16 21:15
bigloo使ってる人いる?
Allegroのトライアルで密かに開発すべきか、GCLで堂々と開発すべきか...
トライアルでも別に密かに開発しなくてもいいんじゃ…。
なぜ scheme の MIT-scheme の方が Common Lisp の clisp よりも重いのでしょうか?
127デフォルトの名無しさん:03/08/19 18:09
>>126
コンパイルすりゃ速くなるんじゃない?
clispのVMはコンパイルしても大した速度出ないよ。
Javaで動くScheme使ってる人いますか?
129CL派:03/08/19 19:28
>>127
くっ、しょうがねーだろう。clisp はバイトコードにコンパイルなんだから。
ネイティブコンパイラなら Common Lisp のほうが速いからいいんだ。と、
ライバル心を出してみる。
130126:03/08/19 21:27
>>127
MIT-scheme は処理系自体が重いのです.
重い処理をやらせているわけではないので,
その処理系自体の重さが目立ってしまいます.

scheme 処理系は簡単に作れると言われながら,
有理数が扱えてフリーなライセンスとなると MIT-scheme しか無いのも不思議です.
131直リン:03/08/19 21:29
普通は有理数使わないしなぁ
133Greenblatt:03/08/19 21:55
どこかのハッカーが、どこかのマシンにしがみついて二週間ばかりがんばって LISP を書き、
「見てくれ、LISP をものにしたぞ」という。そんなことが何度だってあるだろうさ。だけど、
それと本当に使い物になるシステムとの間には天地ほどの差があるんだよ。
ACLの実装技術を盗もう
>>128
自分で書いたのなら使ってるよ。
scheme から java のクラスが使えるので結構便利。
>>135
是非拝見いたしたいのですが。

>>130
有理数って、具体的に何ができればいいの?
分数(exact)が使えればいいの?
おれ数学弱いからわかんねえ。
長整数と浮動少数点使えればいいや、って気もするし。
138130:03/08/23 09:07
>>137
> 長整数と浮動少数点使えればいいや、って気もするし。

有理数と言っても,bignum が 2 つペアになったやつでいいんです.
そうすると有理数は完全数ですので,有理数だけで済む計算は
完全数で出すことができます.
手元で pi ウン万桁とかが簡単に出せます.
DrScheme フリーで有理数が使える。

http://www.drscheme.org/
>>138
じゃあ自分で有理数用の関数書いたら?
141130:03/08/23 11:52
>>139 スマソ.調べていませんでした.

>>140
ごもっとも!でも,
1/2 ===> 0.5
になる処理系では,使い勝手は悪いです.
自分で新しい表記として
#hoge1/2 ===> #hoge1/2
みたいには出来るのでしょうか? Common Lisp のように.
>>141
対応してない処理系でrationalを入出力で扱いたいなら、
とりあえずreadとwrite(とdisplay)を再定義すれば、見かけ上の
問題はなくなる気がする。
内部のread/writeを外部参照しない処理系ではできないけど。
(let ((read-org read)) (set! read (lambda args ...))
あと、number->string string->numberもかな。
データの内部表現は
(define (make-rational 分子 分母) (vector '*rational* 分子 分母))
(define (radd2 lop rop) ... )
(define (rsub2 lop rop) ... )
(define (rmul2 lop rop) ... )
(define (rdiv2 lop rop) ... )
などとして、オペレータを定義していくとか。
(rdiv2 1 2)=> #rational1/2
bignumもこの応用で。
143デフォルトの名無しさん:03/08/26 13:47
まちがえた
ひっそりひそひそ。
ILC2003行く人いる?
Franz Storeから去年のProceedingsとかVideoWareとか買ってみても
どんな雰囲気なのかいまいち想像できないんで躊躇してるんだけど(お値段結構お高いし…)
ILC2003で検索するとInternational Lunar Conference 2003
が出てきますが。
月と何か関係が?
三日月→ )
 満月→ ( )
 新月→ '()
148デフォルトの名無しさん:03/08/30 00:07
いつのまにかIMEがONになってsちぇめ、
sちぇめえ!
>> 146
hxxp://www.international-lisp-conference.org/
こっちのことと思われ。
どっちにしろ外国かよ
keynote の arc 話聞いてきて.おながいします.>>145
152デフォルトの名無しさん:03/09/02 19:19
LISPってJAVAみたいにVMとかないの?

C:>LISPC TEST.lc
TEST
・・・
・・・

みたいにさ
>>152 どーしても VM がほしければ clisp の VM とかがあるけど…。
なんで VM がほしいの?
emacsにもvmあるよ
C++と連携させて開発しなきゃいけないので、どちらかといえばVMがあるほ
うがいいようなきがするだけ。ちなみにLISPの開発はこれが始めてです。
つまりスタックレスかな?
scheme48 とか plt には vm 入ってるけど
これのこと?
C++ との連携方法ってどんなのを考えてるの?
>>155
何故VMがあるほうがC++と連携しやすいと考えたの?
batでファイル名指定して動かしたいので、VMみたいなものがないと困るから、です。
大して深い意味はないです。
>>160
コンパイルできる処理系使えば?
>>160 clisp なら

-- sample.lisp --
(format t "~S~%" *args*)
-- sample.lisp --

> clisp sample.lisp hello world
("hello" "world")

とか簡単に実行できるYO
LispWorks の Mac OS X 版出てるけど、これって GUI はもしかして Qt 使ってるの?
Cocoa API 使っているって書いてあるけど、Fake な予感...
>160
Gauche じゃだめ?
batファイルの関連性がわからない
便乗質問
>164
GaucheとCの連携はまだ公式にはアナウンスされてないようだが、まともに動くの?
同梱されてるテストプログラムではやってるようだけど。
skimuさんのGGCのFFTモジュールに,
実際の計算部をCで書いてるところがある…これを見てみれば?
>>165 バッチファイルなんだから Windows ってことだろう.Cygwin 抜きの.
というわけで clisp を勧めたんだが,Gauche も Windows で使えるんだっけ?
>>168
正式対応はしてないよ
cygwinでconfigure通してmakeして、動いたってだけらしいし・・・
>>168
clisp が windows 対応というのを始めて知りました.
配布が安心なスクリプト言語は python しかないなあ (鬱,
と思っていたところでした.
171デフォルトの名無しさん:03/09/08 21:13
(defun in(a)(if(= a 0)'contract-error a))
(defun body(a b)(/ a b))
(defun out(a)(print a))

(defun func(a b)
(out(body a (in b))))
何が言いたいんだ?
某 R からはじまる言語関連で lisp はユーザビリティが低い,と言われてますが
lisper の皆さん,使っててどうですか?
>>173
Rubyのこと?
どこで言われているのでしょうか?ソースを教えて。
Ruby の usability とはどの変のことを言うんだろう。
Matz 日記の話だろう.今日続編がでるんじゃなかったっけ?
配列のアクセスが面倒なのは同意だな〜.ヘタレなのでマクロ使える人に
[ary x y] => (aref ary x y)
みたいなのリーダーマクロをつくってもらって満足してる漏れ.どーせ趣味で
いじってるだけだし〜.
>>175
それをやるだけで,usability が一気に改善されるのでしょうか?

一気に汚くなるに一票.
「彼の言う usability」 とやらが美しさと引き換えなのであればそんなもんイラネ
俺には前置記法の方が読みやすいし。
Lispはこのままでいい
Rubyが使いやすくなるなら、それはそれで結構
言われるほどマクロって理解不能か?使うだけなら大抵,
A: この aif とか awhen ってなに?
B: あー,条件の値を it で参照できる if とか when
A: let 省略 ウマー
くらいじゃねぇ?
>>180

マクロのせいで「俺様構文」が多くなるから、いやーんな感じがする。
aif とか awhen とかいう名前もセンスが悪いし。


Anaphoric if に aif じゃないセンスの良い名前を付けてやってください.
anaphoric-if
matzの日記の「慣れ」と「常識」についての言い分はよくわかる。
普段lispやschemeを使っている人にとっては、とっさの場合マクロ等を
駆使して書いた方が早いが、多人数の仕事で使うとなると、初心者
(C言語程度は読める)にS式を見せても分かってくれない(=理解しよう
としない)場合が多い。
そういう輩は大抵S式の括弧を毛嫌いしている。そこへS式の内側で
暗躍するマクロを持ち出してきても問題は改善しない。
schemeの規格書をいくら薄っぺらくしても同じ事かもしれない。
そういう時、なにも始めから無理矢理S式で書かせる必要はない。
フロントエンドにC風の構文を用意しておけば納得する。
自分は、C+MLっぽい文法を用意している。
コードは可逆変換できるので、Schemeの勉強にもなるかもしれない。
クロージャなどのscheme特有の概念を使わなければ、型の無いCと
同じ感覚で書ける。
これでS式の鎖国は終わった。
カッコを嫌う原因は何なんでしょうか?
どんな人でも馴れるものではないのでしょうか?
187デフォルトの名無しさん:03/09/11 20:42
ネストしまくって読みにくいから
鎖国なんてしたんですか?Algol ライクな文法とか、中置記法マクロとか
あったし、いろいろ考えてたみたいだけど。ML ライクな構文のフロントエンド
公開キボンヌ。
>>186
1. 偉い人がそう言ったから。
2. 括弧の対応を追うのが嫌。
3. 括弧だらけで美しくない。
190bloom:03/09/11 21:38
マクロを使うと分かりにくくなるというのはプログラミング言語の問題ではなくプログラムの問題に他ならない。
マクロを用いることで分かりにくくすることもできるが、分かりやすくすることも同様に可能。
プログラムの設計次第でどちらにもなりうる。
事実の片方だけを持ち出し、あたかももう片方が無いかのごとく議論を進めるのはいかがなものか?
>>191
>事実の片方だけを持ち出し、あたかももう片方が無いかのごとく
>議論を進めるのはいかがなものか?
どのレスを見てそう思った?
それともmatzの日記のこと?
M式マンセー。
つーかmatzの日記で本人も書いてるけど
所詮Rubyの作者の言い分だからねえ
内容もLisp黎明期から言われつづてる
S式が分かりにくいって話でしかないし

あの人Pythonでも前科があるけど
何かとRubyの優位性を説きたがるしね
よく言えば単なる言語ヲタク
悪く言えばRubyのためにFUDも辞さない人格者

しかもあれは読みようでは
RubyがLispより優れているところは読みやすさしかないって
作者本人が認めてるようなもんだから
S式ネイティブな人たちは
ニヤニヤ眺めてればいいんじゃないの
LISPのマクロは構文だと思えば全然問題ない。
だが使いどころが肝心。
例えば+をマクロと定義して、それを知らずにapplyに渡すと
目も当てられない自体を引き起こす。「それを知らずに」

(defmacro + (&rest ) 〜.)

(apply + '(1 2 3 4 5)) ;;アイタタタ・・・
=> ???

こういった値として扱う可能性、勘違いを引き起こすマクロには何の価値もない。

((if fun + *) 1 2 3 4 5) ;;アイタタタ・・・

まさにマクロとしては悪性。

賢いコンパイラを持たない処理系で暗黙のインライン展開を
引き起こしたい場合にこういったマクロを使うかもしれない。

今日のキーワード:「それを知らずに」
嫌がる奴に直接S式で書かせる必要はない。
フロントエンドがS式を吐けば同じ事だからだ。
もしRubyっぽいフロントエンドがLISPにあればmatzも納得するだろう。
あれでまた、S 式は読みづらい、マクロはプログラムをわかりにくくする、
って思う人が増えるわけでしょ?一昔前は GC だからインタプリタだから
遅いとかって偏見があったわけで。
使いようによって良くも悪くもなるのはマクロに限った話じゃなかろうに
>>196
べつにmatzに納得してもらう必要などないが
ああいう輩はほっとけ
データ構造としてのLispのリストは柔軟な形式で良いと思うのだが、だからと
いってコード全体をああいう括弧で括る記述をしなければならない理由がよく
分からない。構文解析なんか如何様にも出来るわけだし。例えば (if ... と
か書いたときコーディングする側にとって初めの括弧は余計な情報に過ぎない。
OnLisp読め
まつもと氏は cmail の作者だから、一応 LISP の読み書きはできるはず。
ruby-modeだって書いてるわけだし一応というレベルではないだろう
んな事は今回の話には関係ないよ

単に自分の言語を広めたい奴と
何でもいいから有能な言語を使いたい奴がいるってだけの話さ
>>200
> 例えば (if ... とか書いたときコーディングする側にとって初めの括弧は余計な情報に過ぎない。
本当にそう思っているのか?
いろんな言語を好きに使えばいいんでないかい?
私はSchemeで再帰パターンを探してるときが一番楽しい。
>>204

広めたいからというよりmatz氏は単に記述方法の比較をしているだけだろう。
>>197
> 一昔前は GC だからインタプリタだから遅いとかって偏見があったわけで。

そういうことにしたいんですね。
>>207
> 広めたいからというよりmatz氏は単に記述方法の比較をしているだけだろう。

ということにしたいのですね?
面白くないよ
>>200
Emacs とかエディタの S 式操作コマンドのためだと思えば?正直いって,
S 式以外だと f(y)/g(x) を g(x)/f(x) とやってしまったときに修正するのがメンドウ.
S 式なら (/ (g x) (f x)) から C-M-t で一発で (/ (f x) (g x)) だし,式を操作
してるって気になる.マークするときも,式単位でマークできるし.
212しょしんしゃ:03/09/12 13:28
S式の括弧だらけのLispのプログラムは激しく読みにくいです。
どこがまず評価されるのか、結局自分の頭で括弧をカウントして
いかないと判らないのが面倒だし、人間の思考順序と逆順に
プログラムが展開しがちなのもイヤなところです。
分かりやすいシンタックスの皮をかぶせるのなら、結局、Rubyや
Pythonを使っているのと同じことですよね。
>>207
>matz氏は単に記述方法の比較をしているだけだろう。

セマンティックスから独立にシンタックスを語れると思っているところが
すでに十分イタイんだが

ただの逃げ口上なのかもしれんが
もし本気でそう思っているなら今までmatzを買いかぶっていたんだな

Ruby界隈でどういう記法がいいかみたいな話をやり過ぎて
言語設計者としての根が腐ったのかもね
思考順序とは逆というけど、最終的に呼び出したい関数が先に来ると処理全体における重要なポイントが把握しやすいようにも思う。
この違いはプログラムを書くときに頭を働かせる順序にも関係するだろうから、C言語等に慣れた頭では気持ち悪く感じるのも無理はない。
わしもそうでした。

たとえばC言語でプログラムを書くという場合でも、結局やりたいことはある関数の呼び出しであり、
その関数呼び出しの前にツラツラと書いてあるのは、その関数の引数に与えるデータを作ることだけだったりします。
そういう意味では、C言語では重要な部分と補助的な部分が同列に並んでしまうので,あとでコードを読むときに大事な部分がつかみづらいといえるかも。

と、まあLispの書き方に感じる利点をあげてみました。
また,if, let, do, cond, caseといった、プログラムの構造を決める式の使い方が頭になじめばだいぶ読みやすく感じるようになると思います。
どうしてもなじめなければprognとsetfを多用する書き方でもいいかと。

できれば私もバリバリのLisperがプログラムを書くときにどういう頭の使い方をしているのか聞いてみたい。
>>212 括弧をカウントしないとわからない?エディタのインデントを信用しょぅょ.
216デフォルトの名無しさん:03/09/12 14:39
>>212
単純なほうだと思うけど・・・。
letとかは分かりづらいかな。
>>213
> セマンティックスから独立にシンタックスを語れると思っているところが

語れるだろ。例えばlispのセマンティックスを持ちAdaのシンタックスで記述
する言語を作ろうと思えば作れる。lispのセマンティックスにlispのコード全
体をリストにさせる必然性はなにもない。
218デフォルトの名無しさん:03/09/12 15:18
Dr.Schemeを使っているんですが、n以下のランダムな自然数値を返すような関数ってありませんか?
219218:03/09/12 15:21
nは任意の自然数nの間違いです。すみません。
いま >>211 がいいことを言った.
せっかく emacs で lisp を書いているのに,
式単位のコマンドを徹底して覚えていませんでした.
今まで何やってたんだろw

>>212
> いかないと判らないのが面倒だし、人間の思考順序と逆順に
> プログラムが展開しがちなのもイヤなところです。

この部分は思い込みなんじゃないかな?
たまたま >>212 の思考が計算機に近いだけかもよ.
221218-219:03/09/12 16:51
languageをPrettyBigにしたらありました。
すみませんでした。
>>218
(random k)
>>212
思考の順番と逆ってのは
(f4 (f3 (f2 (f1 hoge))))
みたいなやつのこと?慣れるまでは
(funcall (compose #'f1 #'f2 #'f3 #'f4) hoge)
とか
(let ((v1 (f1 hoge))
(v2 (f2 v1))
(v3 (f3 v2)))
(f4 v3))
とかすれば?漏れはカウントアップとカウントダウンくらいの差しか感じないけど
(loop (print (eval (read))))
と書いて、人間思考に併せて read-eval-print-loop と読む。
しかしこれは関数型の言語の性質であり、S-exp とは関係ない。
225デフォルトの名無しさん:03/09/12 18:20
じゃあ逆にすればいいんだろ?
((((read) eval) print) loop)
(define (gcd a b)
  (if (eq 0 (% a b)
    b
    (gcd b (% a b)))))

((a b gcd)
  ((0 (a b %)
    b
    (b (a b %) gcd) eq) if) define)

とりあえず何も考えずにSchemeを前置→後置にしてみたが、むしろ死ねる。
もしかして、forth ってこんな感じなの?
むしろ,こんな感じだろう.こんなマクロならたしかに見難いかもなー.
read-eval-print-loop は #{read $ eval $ print $ loop} だ.

* (quote #{ #{1 2 *} #{2 2 *} + $ 1+ $ print})
(print (1+ (+ (* 1 2) (* 2 2))))

(set-dispatch-macro-character #\# #\{
#'(lambda (stream char1 char2)
(declare (ignore char1 char2))
(let* ((brace (prog1 (get-macro-character #\}) (set-macro-character #\} (get-macro-character #\)))))
(body (read-delimited-list #\} stream t)) program chunk)
(labels ((push-program ()
(setf program (nconc (cons (car chunk) (nreverse (cdr chunk))) (if program (list program) nil))
chunk nil))
(push-chunk (e) (push e chunk)))
(dolist (e body) (if (eq e '$) (push-program) (push-chunk e)))
(push-program)
(set-macro-character #\} brace)
program))))
非数値を扱う lisper で,かつマシンを部品で買う人は,
やはり VIA の C3 プロセッサですか?
そのこころは?
231しょしんしゃ:03/09/12 23:16
前置を後置に変えれば読みやすくなるわけはないです。
そうではなくて、「式と文」を分けることのユーザビリティを
高慢ちきなLisper/Schemerの方々にも考えてみて欲しいっす。
多分「式と文」じゃなくて、演算子の事だよな?>>231
233しょしんしゃ:03/09/12 23:37
式と文、だと思います。
演算子は「式」に属するものでしょう?
なんだかね…いちいち対応する括弧をカウントしてるんでしょ?それは「読み方」を知らない
だけだと思うんだが…。間違った読み方をして読みにくいって言われてもねぇ。インデントを
見るんだよ。括弧なんて正しいところで閉じてりゃいいんだ。

それはおいといて、式と文を分ける事がユーザビリティを向上させるならそれは
(多分)誰も文句はないでしょ。どう向上するの?馬鹿な漏れに説明してくれ。
235非Lisper/Schemer:03/09/12 23:46
>231
何故分けることを考える必要がある?
文=式である方がユーザビリティが高いと素人目にも思えるけど?
>>231
>「式と文」を分ける
って何?
237しょしんしゃ:03/09/12 23:50
>>234
>それは「読み方」を知らない
それは違います。インデントはプログラムを読む
一つのヒントに過ぎません。
インデントでヒントを与えるのは、つまり、ヒントが
なければ読みにくいからでしょう?
インデントでヒントを与えるのはLispだけの作法では
ありませんよ。

>どう向上するの?
式と文を区別してLispよりも読みやすいと思われる言語は
たくさんありますがなにか?






文って、例えばifとかの構文のことか?>>231
C言語のifは、それ自身値がないので文、
LISPやRubyのifは、それ自身の値があるので式
こういう前提で言ってるんなら、
「式と文」を分けたとするとユーザビリティは下がる気がするが?
ここでの「式」と「文」の定義を明確にしてくれないと、

ちゃんと答え様がないぞ >しょしんしゃ
240しょしんしゃ:03/09/12 23:58
>>238
>それ自身の値があるので式
たとえ、値を返したとしても、その値を別の式に渡さなければ、
式の結合はそこで切れます。
そこには意味的には「文」に相当する区切りがあるはずです。
プログラムが純粋に演算子だけでなりたっている場合は、
「文」は存在しないことになりますが、実際には宣言等の
構文が存在するでしょう。
これら意味の上で違いのある部分が、同一の()で区切られて
いるのはやはり「読みにくい」と言っておかしくないと思います。
逐次実行とかそういうことか?
>>237
>式と文を区別してLispよりも読みやすいと思われる言語は

ここでもう主観が入ってる時点で議論にはならないよ
243しょしんしゃ:03/09/13 00:01
>>242
>ここでもう主観が入ってる時点で議論にはならないよ
主観だと判断されるのなら私にも議論の余地がなくなります。
ではまた。
> それは違います。インデントはプログラムを読む
> 一つのヒントに過ぎません。
ほら、大きく勘違いしてる。 Lisp では、python と同じくインデントは
ヒントどころではなく *クリティカルな* 情報なんだYO!!(人間には、ね)
インデント無いLisp コードをすらすら読めるって Lisper はあんまり居ない。
だからインデントを見ろっていってるのに…。

幸い、S 式のインデントはエディタがうまく面倒みてくれるので宗派の
争いが起きる事は lisp 界ではあんまりない。
245しょしんしゃ:03/09/13 00:04
>>244
>クリティカルな* 情報なんだYO!!
それはインデント以外にヒントがないことを言っているに過ぎません。
>>239は無視ですか?
247しょしんしゃ:03/09/13 00:07
>>246

>>240を読んでなんとなく感じて下さい。
結局、「私は括弧を沢山使うS式が嫌いです」としか読めないけど?>>247
適当だな、おい。
>>249>>247 宛ね。
251しょしんしゃ:03/09/13 00:13
>>248
YES!!
ですが、S式の単純さがLispの強力な武器でもあることは理解します。
が・・・それでもやっぱり読みにくいYO!
Lispは読みやすい、って言い張っても仕方ないんじゃない?
って言いたかっただけです。
252非Lisper/Schemer:03/09/13 00:14
>240
>これら意味の上で違いのある部分が
何が「意味の上で違いのある」なのか全然解らんのだけど?
勝手にそう「思っているだけ」でないの?
いやいや冗談。
しょしんしゃの言い分もわかるよ。
クラスや構造体を->や.でアクセスしたり、
if else whileを括弧で括らずに書きたいってことでしょ?>>247
これのメリットは、読み込み完了点が構文毎に決まっているので
構文チェック等は定義を途中まで読み込んだ段階でもできる。
CとかPascalの有名所の構文だし。
matzの言う所のユーザビリティだよ。

S式はどこかの括弧の対応があってないだけでファイルの末尾で
やっとエラーがわかる始末。構造上どうしようもないね。
でさ、そういうのが嫌だとして、それでもLISPを使わなきゃならない場合、
フロントエンドでも用意するしかないわけよ。>しょしんしゃ
エディタの機能で補助するつったって、いつも誰もがそのエディタを
使って作業できるわけじゃないし。

ただし「それでもLISPを使わなきゃ」って状況は日常あんまりないのが悲しい所。
まあ、無理矢理作れるわけだけど。
括弧に違和感があるなら OCaml とか Dylan を使えば良いんじゃないかな?
>>255
いやいや、他の言語に移行するほどの問題でもない。
機能的な問題がLISPやSchemeで十分足りるのなら、
トランスレータを作ってしまえば十分。
ベース言語まで変えてしまうと逆に問題が難しくなる。

ただしこれは理想。
現実はそういうフロントエンドは確かに沢山あるが、
なぜかどれも中途半端。
あー、人それぞれ違うもんだな。漏れはいろんな言語見るたびにその構文や
記号に頭を悩ませるんでね。 S 式見ると安心するんだ。確かに Python とかは
見た目はすっきりしてると思うけど、式単位の操作がやりにくいので不便に感じる。
インデントも完全自動じゃなくて書きにくい。
S式の利便性は活かしたいが、括弧が嫌いという人は結構いる。
C++も最初はトランスレータだった。
クラス定義がない、構文がダサい、括弧がウザい。
トランスレータで解決できる問題なら、それを使ってもいいわけだ。
セマンティクスの違う別の言語にわざわざ変える必要はない。
定番がない分、トランスレータも功罪相半ばすると思うけど。
>>260
普通はそう。トランスレータと聞くと、機能追加一辺倒の大掛かりな
一方通行を想像する。だけど問題になっていたのは単にS式の括弧ぐらいなもの。
トランスレータが単なるlexerにまで及んだマクロの構文変換と同じ役割を
果たすだけならば、理論的にはS式と新言語の相互変換が保証される。
マクロを使われた場合は全く同じというわけではないけど、意味は変化しない。
既存のS式で書かれたソースのほとんどは新言語でも即座に見ることができる。
この逆変換が可能という事実は安心感を与え、
同時に大量の新言語のサンプルが手に入る。
作るトランスレータは2通り。
新言語->S式とS式->新言語。
よし、その言語をM式と名づけよう。
新言語->S式をS式で作成し、
S式->新言語を新言語で作成する。
S式->新言語は新言語->S式を入力に渡す事でデバッグ。
一石二鳥。
プログラムの一部分だけを切り出して S 式が冗長だというのはどうかなぁ。

>>261
結局 S 式読む事になるんじゃないの? とか、マクロ使えねーじゃんとか、学習コストとか
考えると、別の言語採用した方が(その人に取っては)幸せかもと思うね。
構文が変わればエディタにも影響ありそうだし。
>>240
構文が同一のかっこ以外のもので区切られてればいいの?
XML みたいに。
"]" を使えば括弧の対応によるバグを局所化できるんじゃないかな。
M式とCとかPascalの合いの子みたいなもんじゃないか?
cons[1 ()];とか
if null?[x] then (); else ...;
let x = 0; y = 0; do ...;
やっぱり括弧がないと素っ裸で表に放り出されたみたいで落ち着かない
やっぱりlispカッコいいよね
括弧は(・{・[のどれ使ってもいいことになれば便利かなぁ?
>>270
ちょっと試したけど gauche ならいけるっぽい。
まず,生理的にカッコを受け付けない原因をハッキリさせないと.
なんか話が低いところに落ちてきたね。
もともとmatzの日記からして低レベルだったから
「セマンティックスとシンタックスを別々に考えないといけないんじゃないか
と思います。」と指摘しただけでも意義はある。

両者をごっちゃにして括弧による記法がlispの必要条件(少なくともセマンティッ
クスに関しては)だと思い込んでいるように思われることがけっこうある。
S 式 or マクロは読み難い,と言われたらもうそれで終りだからね。S 式は最初はちょっと抵抗があったが,
↑ででてた「読み方」がわかってくればそーでもない。マクロはどうだろうね?ネタプログラム意外で読み難い
マクロってのにであった事がないのでよくわかんない。むしろ簡潔な表記でプログラムを短くしてくれるので
読み易いという印象しかない。一番酷くて他の言語の特殊記号や構文覚えるのと同じくらい。簡単なものなら関数と
同等の手間くらい。でも S 式をメモ帳とかで開くと確かに読みにくい/書きにくいと思う。
>>276

今、あるLispのプログラム、例えばEmacs Lispを書こうとしているとき慣れは
重要だろう。慣れるなりして書かないと初まらないから。

でもプログラムの記法はどうあるべきかということを考えるときにその慣れは
かえって邪魔なものにもなりうる。
Lisp の括弧は
メリット: ツリー的な構造+簡潔な文法+マクロ+エディタの支援
デメリット: 括弧嫌い.表示方法に気をつけないと見た目が悪い.
との丁度いいトレードオフだと思うけどね.もっと複雑な構文だったら,マクロは書くのも使うのも
制限を受けそうな気がする.

エディタによる支援は,たとえば
if ... then ... else ... end
みたいな書式で,if 上にカーソルがあるとき,if 式全体をコピーしたいという操作は無理.(対応する end まで
勝手にマークというのでもいいかもしれないけど,if だけコピーしたい場合と区別つかないよね?)
(if .... .... ...)
という lisp 的表記は if の前にカーソルを置いて一発で if 式がコピーできる.Emacs なら M-C-@ とか.
これは括弧無しで実現できるのか? if だけをコピーしたいのか,式全体なのかを明示的に指定できるのは
Lisp 記法ならではだと思うのだが.学が無いので学問的に記法がどうあるべきかってのはよくわかんないけど.
書きやすさ≠読みやすさ
Lisp 好きの視点(要らない括弧はどーでもいい)
define fac x
 if (= x 0)
  1
  * x (fac (- x 1))

Lisp 嫌いの視点(意味のない括弧がたくさん)
(((((((define (fac x)
   ((((if (((= x 0)))
      1
      ((((* x (((((fac (((((- x 1)))))))))))))))))))))))))
括弧に薄い色を使えばいい。paren
>>280 がいいことを言った。

慣れてくるとなんの苦もなく上のように見えるけど、
最初は下のようにしか見えなかったもんね。
>>275
そこまで言うんならまず実装してみなよ
指摘するだけなら誰だってできるし
内容もまったく目新しくないからね

S式が見にくいなんて話は
それこそLispの歴史40年の間常に言われてることだし
DylanみたいにS式を取り去ったLisp風言語は今までにもあったけど
結局Lispそのものを越えるものはまだないんだから
>S式が見にくいなんて話は
>それこそLispの歴史40年の間常に言われてることだし

やっぱ読みにくいんじゃん。
285261:03/09/13 19:06
275じゃないが、実装は済んでいる。
IPAは取り合ってくれるかな?
>>284 あぁ、読み難いよ。ただ S 式が読み難いと確認したいだけか?そんなのすぐわかる
だろう。やっぱり読み難いんだ、ヤパーリ漏れの信念は正しかった!と確認してから気分良く
帰ってください。
common lisp に while ってありませんでしたっけ?
今 HyperSpec や CLtL2 を見てみたら (loop while となっています.

「ANSI Common Lisp」という本を読んで,
loop を使うことはないだろう,と思っていたのですが...

頻繁に改訂されているんでしょうか?

(do () ((test)) (...)) で代用したら嫌われますかねw
10.3 を読み直してみよう。 あと、Paul Graham のユーティリティくらいは
イメージに取り込んどけば?
289287:03/09/13 21:05
>>288
「ANSI ...」は図書館から借りていたんです.もう _| ̄|○

> イメージに取り込んどけば?

/usr/lib に入れておくくらいの気持ち,ということですか?
>>285

ホントならすごいじゃない

S式と同等以上の表現能力があって
より可読性が高いものなら画期的だね

Schemeの
((if x + -) 1 2 3)
みたいなのはどう表現するの?
(do () ((test)) ...) まで考えられてるならもう一歩だな。本には
(defmacro while (test &rest body)
`(do ()
((not ,test))
,@body))
が載ってる。

lisp ファイルをロードした状態で clisp なら (saveinitmem "hoge.mem") とか
cmucl なら (save-lisp "hoge.core") とかして、以降はそれを使うってこと。
ロードする時間が省けて起動が速くなる。
292287:03/09/13 22:44
>>291
すみません.
「common lisp の規格として while って無いんですね!?」
と思っただけなんです.

というのを,「ANSI ...」を読んで気づくべきだったんですね...
しかし,(loop while というのは何なんでしょう?
emacs lisp の while とは全く異なるものですか?
>>289
「ANSI...」に載っているコードならPaul Grahamのサイトにおいてるよん♪
ttp://www.paulgraham.com/paulgraham/acl.html
294261:03/09/13 23:23
>>290
>S式と同等以上の表現能力があって

表現能力の向上には関与しない。
目的は、言語の特性を殺さずに可読性を高くするという事。
S式そのものを消し去るわけではない。

>より可読性が高いものなら画期的だね

これは当てはまるかもしれない。
少なくとも記述上の不要な括弧からは開放される。

>みたいなのはどう表現するの?

必要に応じて構文変換を行う。
例えばより一般的な形式(if x (+ 1 2 3) (- 1 2 3))
どこがより一般的なの?
>>294
具体的なものが見えないんけど

不要な括弧ってのは上のほうで出てきた(ifみたいなもののことだよねえ
(if x (+ 1 2 3) (- 1 2 3))では括弧が残ってるけど
言ってるもののS表現なの?

それから
一般に((a b c d) e f g)が(a b (c e f g) (d e f g))がなるわけじゃないけど
大規模なセマンティック解析をやってるの?
297261:03/09/13 23:49
>>295
名前がある場合、構文によって結果的に導き出された値を使う、
(値 引数)
よりも、
(関数名 引数)
が一般的という意味。
構文や、古くから存在するマクロもこの形式を想定している。
(構文 構文要素)
(マクロ名 引数)
298261:03/09/14 00:07
>>296
その辺の話は公開の算段が整い次第。
ふーん

どうやらS式と等価じゃなくて
表現範囲がS式のサブセットみたいだから
その言語→S式は期待できそうにないけど
S式→その言語には期待してるよ
ガンガレ
S四季は右斜めにインデントする傾向が高いよね。
長い関数にすると画面からはみ出るし。
>>284
読みにくいということで納得する方向で前向きに検討していきたいと思います。
このような意味のない議論については無駄という方向で、今後ともよろしくお願いします。
302デフォルトの名無しさん:03/09/14 06:37
((if x + -) 1 2 3) → (if x + -) 1 2 3
一番外側の括弧ははずせるね。
(if (x,+,-))(1,2,3) だと括弧の数は減らないね。
そんだけ。


(* 4 ((if x + -) 1 2 3) 5)
ってなったら(ifの括弧ははずせないじゃん
トップレベルの括弧をはずすってだけの話かい?
しかも progn が出てきたら,結局なにも変わらない感じ.
結局LISPをまともに使ったことがない香具師が、脳内でS式は不要って妄想してただけってことか?
306デフォルトの名無しさん:03/09/14 11:27
common lisp が複雑だょぅ...

(defun hoge (&optional (a 'standard) b)
(values a b))

(aaa) => standard ; nil
には問題ありませんが,
(aaa nil) => nil ; nil

となるんですYO!最後の nil も渡されるなんて,
まるで special form みたいじゃないですか?

関数の中で (read-line strm) としたときに,
strm が nil でも *standard-input* から読んでくれますか?
いや,やってみたら大丈夫なんですけど.不安です.
307306:03/09/14 11:44
またおかしくなりました.
labels は lambda が不要なんですね.でも,

(letrec
((a
(if x
(lambda () (f))
(lambda () (g)))))

みたいなことは,どうやればいいんですか?
R5RS 読んだ後のせいか,混乱がハゲすぃ...
>>306
何を問題としているのかさっぱり分からんのだが
309306:03/09/14 12:11
>>308
すみません.
&optional な関数で,しかもデフォルト値が nil でない引数があるときに,
nil を渡してしまっても大丈夫か,と気にしています.

たいていの関数は nil がデフォルト値なので,
(defun f (&optional arg)

(let ((arg nil)) (f arg)
としても挙動が変わることはありませんが,
read-line の stream はデフォルトが *standard-input* なので
(read-line nil) と (read-line) は違うかも知れないと思うのです.

read-line 側で対処しているようですが...
>>306 最初のはなに言ってるのかわからん.なるんですYO! っていわれても,あたりまえだYO としか…
その動作のどこに不満があるのか?多値がわからんとかそーゆう話?

read-line の第一引数は input stream designator で t なら *terminal-io*, nil なら *stream-input* になる.
ANSI 規格準拠の処理系なら心配しなくていい.

>>307
(defun test (x)
(labels ((a (x)
(if x
(lambda () (f))
(lambda () (g)))))
(funcall (a x))))
みたいな話?
311306:03/09/14 12:41
>>310
いろいろやって気づきました.
(list 1 '())

(cons 1 '())
は,等価ではないんですね.おさわがせしました.

> nil なら *stream-input* になる.

安心しました.ありがとうございます.

> (defun test (x)

あ,そうやればいいんですね.すみません.
なんでマクロはわかりにくいって言われるのかねぇ?
>>312
解答例
1. 学生の時 LaTeX で嫌な思いをした.
Emacs から (require 'cl) で Common Lisp の勉強をするのはありですか?
ありえない
>>313 名前は確かにマクロだが…。マクロって名前が悪いんじゃねーの?
テンプレートとかって名前にしとけばよかったのかも。
>>312
式中のどこが評価される/されないかが一見して分からないからでは。

ユーザ定義マクロじゃないですが、私は昔Emacsのためにしかたなく
lispに触れた時にsetqの動作が不可解でしょうがなかったです。後から
(set 'hoge fuga) という表現を知って、ようやく理解すると共にシン
タックスシュガーの使いどころを間違った言語という感想を持ちました。

その後S式やlispのセマンティクス自体には慣れて好きにもなりました
が、コード上の評価される/されない部分を常に意識するのは疲れます。
速っ。レスどうもありがとうございます。CLisp 入れてみます。
Emacs から呼び出すのは M-x run-lisp が一般的なのでしょうか?
>>314 以下の点がお勧めできない。
1. レキシカルスコープじゃない
2. 数字周りが違う。Emacs は有理数扱えない。
3. CLOS がない。少なくとも標準では。
4. C と連携するのもイマイチ。
clisp + ILISP でもどーよ?
>>317 なるほど。(set 'hoge fuga) == (setq hoge fuga) だと知らないとそうですね。
setq の q はクォートの q 〜と習った僕は全然苦労しませんでしたが、言われてみれば
ヤヤコシイかも。setf なんかは理解するのは大変そうですしね。
314 じゃないですが.

ilisp って,画面が 3 分割 (ソース,inferior,output) になるので
ちょっと使いづらいです.
もっと軽く describe-function できないもんですかね...
結局,HyperSpec を w3m で見ながらになってしまいました.

# 液晶 20 inch 画面にドドーーンと emacs を広げられればなぁ.
>>320
setf は不思議ですよね.scheme と決定的に違うところなのでしょうか?
設定でなんとかなりそうだけど。ILISP から HyperSpec 引くほうが楽じゃない?
ILISP 以外となると Franz の ELI か java が動くなら jabberwocky か?
CMUCL 限定なら Hemlock もつかえるね。SLIME も sf にプロジェクトが
登録されてるね。ML で公開されたやつは最低限の機能って感じだったけど、
今後に期待。
(let ((hoge '((a . 1) (b . 2) ... すごく長い alist.)))

となるような hoge を,別のファイルに分けようと思います.
しかし,

(with-open-file (hoge-strm "hoge.lisp" :direction :input)
(let ((hoge '()))
(load hoge-strm)
hoge))

とやっても,hoge は top level になってしまい,
上の with-open-file の値は nil になる始末です.
どうしたらよいのでしょうか?
data.lisp に
((a . 1) (b . 1) (c . 1))
とか書いといて、
(with-open-file (s "data.lisp" :direction :input)
(let ((hoge (read s)))
hoge)))
とか?
その方法って、alistがquasiquoteされてたらやばいよね。
read後evalすればいいんだけど。
まぁ,それ以前に data.lisp に
(defparameter hoge '((a . 1) (b . 1) (c . 1)))
と書いといて,
(load "data")
でよくないか?データが激しく大きい場合にはハッシュテーブル使うとか
コンパイルするって手もあるし.
>>322 漏れは Scheme と Common Lisp の決定的な違いは,#t,#f と t, nil
あとは関数と変数の名前空間が分かれているかどうか,だと思う.
特に #f と nil の違い決定的だと思うぽ.

名前空間はなぁ.funcall がなくてちょっと楽ができるけど,変数名に関数と
かぶらないように気をつけなきゃいけないのがウザいので CL のが好き.
実装に依存するのか,ちょっと分からなくなりました.

(let ((alist '((a . 1) (b . 2))))
(let* ((str "a")
(sym1 (make-symbol str))
(sym2 (intern str)))
(values (symbolp sym1) ; T
(symbolp sym2) ; T
(symbol-package (caar alist)) ; #<PACKAGE COMMON-LISP-USER>
(symbol-package sym1) ; NIL
(symbol-package sym2) ; #<PACKAGE COMMON-LISP-USER>
(assoc sym1 alist) ; NIL
(assoc sym2 alist)))) ; NIL

str を "A" にすれば,最後の assoc は (A . 1) を返します.
大文字にすれば,どの処理系でも最後の assoc が
(A . 1) を返すと期待していいのでしょうか?

それとも,alist を (A . 1) にしておかないと危険ですか?
>>328
CL では無闇に #'(lambda と書いてしまったり...理解していないだけ.

漏れの書き換え alist
((list lst)
(string str)
(car booboo) (ry
シンボルとして |A| と |a| が違うからね..symbol-name をとってみりゃ一目瞭然だけど,まぁ,
実装というか *readtable* の設定によるんでない? (readtable-case *readtable*) が :upcase なら,"A" にするべき.

(readtable-case *readtable*) は case sensitivity mode が設定される.:upcase, :downcase, :preserve, または :invert
で,それぞれ,大文字に,小文字,変換無し,大文字小文字を反転となる.:upcase が普通なので (a . 1) か (A . 1) は関係ない.
どっちも symbol-name は "A" になるから.
booboo ワロタ
333329:03/09/16 17:47
>>331
おお,選べるんですね.
でも,let で局所的に変更することが出来無いみたいです.
用が済んだら (setf *readtable* (copy-readtable nil))
しておかないといけませんね.
そうしないと,let みたいな普通の symbol が
小文字では見つからなくなってしまうようです.

何を使って後始末を明示しましょう...? unwind-protect?
でも,なんで readtable を書き換えたいの?大文字小文字を区別したいだけなら |SyMBoL|
表記でよくない?表示の大文字が嫌なら (setf *print-case* :downcase) でいいだろうし.

グローバルに変えたくて,かつ cons を CONS と書きたくないなら :invert が比較的マシなのかなぁ.
>>333
read の前に let しないとね
336329:03/09/16 19:03
>>334
たとえば,大きくて alist な設定ファイルを書くとします.
((Sec1 ((itemA1 . a) (itemA2 . b) ...
の方が,
(("Sec1" (("itemA1" . "a") ("itemA2" . "b") ...
よりも書き易いと思うのです.

readtable の書き換えは,挙動が分かりづらいですね.
(let ()
(setf (readtable-case *readtable*) :preserve)
(let ((alist '((a 1) (b 2))))
(caar alist))) ===> A
となってしまうし,もう一度評価すると the function let is undefined ですよ.
複雑だぁ..._| ̄|○
337デフォルトの名無しさん:03/09/16 21:43
readtable, lisp reader について勉強したほうがいいと思うぞ。マジで。
お望みのことなら↓でどうだ。あるいは設定ファイルで lisp 起動時の
readtable-case を :invert に設定しろ。
(with-open-file (s "data.lisp" :direction :input)
(let ((*readtable* (copy-readtable)))
(setf (readtable-case *readtable*) :preserve)
(read s)))

:preserve だと let は |let| と読まれるのは理解しているか?
複雑というより、lisp reader がソースをパースする→評価
という流れが理解できてないのにいじろうとしてはまってるだけだろう。
338337:03/09/16 21:45
しまった age ちゃった。吊ってくるわ…
339329:03/09/17 00:11
>>337
ご指摘ありがとうございます. ; とりあえず HyperSpec か...
340デフォルトの名無しさん:03/09/17 22:36
xyyzzyで時間を(秒以下のレベル)で計るコードの書きかたってあります?
341デフォルトの名無しさん:03/09/17 23:01
例えば、処理速度を量れるくらいの精度で。
342名無しさん@Vim%Chalice:03/09/17 23:08
clispのregrepモジュールのインストール方法が詳しく載っているHPありませんか?
付属のドキュメントに沿ってインストールしたんですけど(use-package "REGREP")
でTが帰ってくるけどmatchとかが動きません。
>>340
(get-internal-real-time) とか。

こんな感じで、処理時間が計れる。
(let ((x (get-internal-real-time)))
(測定したいプログラム)
(- (get-internal-real-time) x))
cl-ppcre - portable Perl-compatible regular expressions for Common LISP
http://www.weitz.de/cl-ppcre/
特徴
- Perl 互換
- 高性能
CMUCL でコンパイルすれば Perl の正規表現エンジンと同等くらいの性能.
CLISP でコンパイルしても CLISP 自身の regexp モジュールと同等くらいの性能はでる.
- ポータブル
Allegro, CLISP, CMUCL, Corman, MCL, OpenMCL, SBCL, Scieneer, Lisp Works 等々で動く
などなど.
346デフォルトの名無しさん:03/09/19 10:06
質問です。cond を if で書くことはできますか?
それとも、スペシャルフォームなので処理系に任せないと無理でしょうか?
if は special operator だけど cond はただのマクロなんで↓のように書けるけど.
(defmacro cond (&rest clauses)
(if (endp clauses)
nil
(let ((clause (first clauses)))
(when (atom clause)
(error "Cond clause is not a list: ~S." clause))
(let ((test (first clause))
(forms (rest clause)))
(if (endp forms)
(let ((n-result (gensym)))
`(let ((,n-result ,test))
(if ,n-result
,n-result
(cond ,@(rest clauses)))))
`(if ,test
(progn ,@forms)
(cond ,@(rest clauses))))))))
>>347

すげー。なんだかよくわからないですけど、勉強します。
ありがとうございました。
349デフォルトの名無しさん:03/09/19 10:42
macroexpand をつかって順番におっかけていけばそんなに複雑じゃないと思う.
(when (atom caluse) (error ...)) はエラー処理なのでとりあえず無視して,
↓の流れを追ってみればいいんじゃないかな.

(cond ((= x 0) 0) ((= x 1) 1) (t (f x)))
  ↓
(if (= x 0) (progn 0) (cond ((= x 1) 1) (t (f x))))
                  ↓
           (if (= x 1) (progn 1) (cond (t (f x))))
                          ↓
                      (if t (progn (f x)) (cond))
                                 ↓
                                 nil
>>280
弟子が尋ねた。
「先生、私は先生がカッコをまるで魔術師のように扱っているのを常々敬服しています。
 どうすれば先生のようになれるのでしょうか?」
師「えっ? カッコ? あ、そうか。そんなものもあったな。いやあ、すっかり忘れておったわ」
>>292
遅い反応だけど,loop マクロ内の while はいわゆる while とはちょっと違う.
(loop for x from 1 to 100 while (< x 10) do (princ x))
↑こんなかんじで,loop 内でのみ使えるやつなんだが,少なくとも emacs の
while とは全然違う.

…とおもったら,emacs の cl にも loop マクロってあるんだな.
(loop for x in '(1 2 3 4 5) while (< x 4) do (princ x))
正直びっくりした.こっちの事言ってたわけじゃないんだよね?
352287:03/09/19 12:37
>>351
emacs の loop マクロなんて知りませんでした.
emacs では,なるべく cl を使わずに書いているので.

グレアムの「ANSI Common Lisp」の言う通り,
loop を使うことはほとんどありませんよね?
paul grahama 自身はほとんど使わないみたいだけど,使う人は結構使うみたい.
手元のライブラリを検索してみたところ, (loop ...) を含む行数 / 全体の行数 は
screamer 7/12000 = 0.05%
cllib 130/17000 = 0.7%
cl-ppcre 70/7000 = 1%
みたいな感じだった.
destructive な acons を書きたいんですが。。

(define alis (list (cons 'a "a-val")))
(define (acons! key val alis)
(cond ((assoc key alis)
=> (lambda (a) (set-cdr! a val)))
(else
(set! alis (acons key val alis)))
))

;; これは上手くいくけど
gosh> (acons! 'a "aaa" alis)
#<undef>
gosh> alis
((a . "aaa"))

;; こっちがダメ。
gosh> (acons! 'b "b-val" alis)
((b . "b-val") (a . "a-val"))
gosh> alis
((a . "a-val"))

;; こうなって欲しい。
gosh> (acons! 'b "b-val" alis)
#<undef>
gosh> alis
((b . "b-val") (a . "a-val"))

どこがおかしいんでしょうか?
それはマクロにすべきだね。
(define-macro (acons! key val alis)
`(set! ,alis (cons (cons ,key ,val) ,alis)))
>>354
で、何がおかしいのかというと、これ
(set! alis (acons key val alis)))
このset!はacons!関数引数のalisに対して作用するから、
グローバルのalisには影響しない。
358354:03/09/20 00:39
グローバルの alis は手続き内からは書き換えられないということでしょうか。
うーむ。修行しなおしてきます。

とりあえずマクロなら書けるということで納得しました。
ありがとうございました。
引数に同じ alis って名前のがあるから、手続き内ではそっちを参照しちゃうの。
これは同じ名前の別の変数だから、書き換えは global のほうには影響しない。
この引数がなければ global のほうを見るし、書き換えもできるよ。
destructive な cons というのに何かひっかかるものを感じるのですが。
そういえばconsはconstructorの略だったかな
362 :03/09/22 05:40
ポールグレアムのANSI Common Lispの二分探索木のプログラムがおかしいと思ってネットで調べてたら本人のホームページでやっぱり訂正されてた。
日本語訳がでたのは原著が発売されてからかなりたってだから、間違いもわかってたんじゃないのか?
それに別に長いプログラムじゃないんだから訳すときに気づかないのかな。
まぁ,そう言うなや.Paul タンから原稿データ貰ったのを訳しただけなんだろ?
全掲載コードを検証汁!! ってのは翻訳者には要求しすぎじゃないのかな.
貴重な Lisp 関連本の翻訳者を擁護してみる漏れ (・∀・)ヤサシイ!!
漏れが翻訳書の監修をやったときは、全掲載コードの検証 + 日本語化まで
やったじょ。
(´Д`) < アワワ…スーパー監修者が降臨なされた….Norvig タン の PAIP とか日本語版出してくれませんかね?
>>364
是非ともCLX本の翻訳たのむ
Common Lisp で書かれた Window Manager なんてあるんだな。知らんかった。
>>367
eclipse?
stumpwm ってやつ.CMUCL で遊ぼうと思ってぐぐってたら紹介ページを発見した.
本家は↓
ttp://www.nongnu.org/stumpwm/
1+とか1-ってシンボルなんだね。
お前ら、CLの処理系何使ってる?
俺は、高速だということでCLisp→CMUCLに移行したんだが、
AKSL(今はGNU Common Lispらしいが)とかはどうなのよ。
CMUCL. Windows なら CLISP. GCL は ANSI CL への互換性向上を目指してがんがって
ると聞いているだけ(基本的には CLtL1 なんでしょ?).
gcl は maxima 用というだけかと思っていました.ごめんなさい m(_ _)m
性能なら Allegro CL で決まりだろ。
376デフォルトの名無しさん:03/09/24 17:56
scmail: Scheme によるメールフィルタ
http://www.namazu.org/~satoru/scmail/

このプログラムをのぞいてみようと思うんだけど、
誰か使っている人いる?
>>375
lisperが商用使ってんじゃねーよ禿げ
だすな。カーネルハカーが喜んでWindowsを使っている構図のようだ。
狭い!了見が狭すぎるぞ!貴様ら!商用がだめとか頭の弱いフリーソフト信者厨房
みたいなこといってんじゃねぇ!おまえら、Lisp マシンとかを忘れちまったのか?

そんな俺のチョイスは LispWorks。
380デフォルトの名無しさん:03/09/24 20:49
>>379
逝って良し
…なんで商用を嫌う香具師がいるの?わけがわからん。
みんな ACL のパフォーマンスのことしか言わないけど、デバッガとか(Emacs
の)開発環境の点で ACL を上まわってる処理系ってある? ACL のデバッガっ
てかなり色んなことできるよ。
>>376
その前身の mail-classify 使ってた。
>>382 漏れ ACL 使ったこと無いからおせーて。labels で定義したローカル関数の
トレースとか簡単にできる?
>>384
こんな感じ。
CL-USER(41): (defun fact (n)
(labels ((fac (i r)
(if (<= i 1) r
(fac (1- i) (* i r)))))
(fac n 1)))
CL-USER(42): (compile 'fact)
CL-USER(43): (trace ((labels fact fac)))
CL-USER(44): (fact 3)
0[1]: ((LABELS FACT FAC) 3 1)
1[1]: ((LABELS FACT FAC) 2 3)
2[1]: ((LABELS FACT FAC) 1 6)
2[1]: returned 6
1[1]: returned 6
0[1]: returned 6
6

くわしくは以下をみておくれ。
ttp://www.franz.com/support/documentation/6.2/doc/debugging.htm#tracing-methods-2
末尾再帰を実際に変数付きgotoにコンパイルしたいんですが、
そういう最適化についての論文や実装ってありませんか?
>>386
再帰関数の自動ループ化、末尾再帰化は常識だと思うが。
世間一般に使われているコンパイラすべて、だな。
上のテンプレの ttp://www.readscheme.org/ でも探したら? Guy Steeleの元論文とかRabbitコンパイラ
Lispは人工知能をプログラムするのに向いてるってよく聞くけど
具体的にLispで書かれた人工知能のソースってありますか?
>>389
それはLisp関連のスレで尋ねるより、カーネギーメロンにでも行った方がいいのでは。
あそこはもともと人工知能研究のためにCMUCLを作ってるわけだし。
ここのスレにいる香具師で人工知能にくわしい者はいない予感
>>389
M-x doctor
人工知能だけでは漠然としすぎている…。PAIP に古典的 AI がいくつか載ってるけど。
自分的に静的型も宣言できるSchemeがあれば最強かもしれない。
CommonLispはちょっと仕様的に嫌な部分があるので。
>>393
どこが嫌なの?
>>393
SMLやOCamlじゃだめっすか?
自分的に現代的型システムを備えた CommonLisp/CLOS があれば最強かもしれない.
マルチバイト文字,ネットワーク,FFI,グラフィックスあたりも標準化されてれば
さらに最強.Scheme は仕様が不十分(パッケージシステム,オブジェクトシステム
等々)なのと,関数と変数の名前空間が同じなのがちょっと嫌.
>>396
× Scheme は仕様が不十分
○ Scheme は標準化が不十分
で、393 の言う Common Lisp の嫌なところって結局何?
Common Lisp は泥臭さがあって美しくない
…だから、どの辺が?
よく分からないけど >>399 に同意w
関数型らしく書かれるのに向いてないよね.scheme より.
#'が嫌。
defvarが嫌。
setfが嫌。
loopが嫌。
>>396 Multiprocessing を忘れてないか?現状処理系毎にばらばらだぞ。

でもまぁ、泥臭くてもタフなほうがイイ。eval-when とか load-time-value とか
define-compiler-macro とか。こーゆうのが標準であるのが気が利いてる。
(゚∀゚ )アヒャヒャ評価のタイミング考えなきゃマズー → (゚д゚)標準ウマー
404デフォルトの名無しさん:03/09/30 07:00
はじめまして
これからSchemeを学ぼうと考えています。

今までプログラミングといえば、
FORTRANとVBAを少し触れた事がある程度なのですが、
どうやって学ぶのが一番ポイントをおさえた理解につながるのか、
既にSchemeをマスターされた皆さんからアドバイスを頂けないでしょうか?

SICPは難しいと評判だし、プログラミング言語Schemeでは、
素人はSICPを読めと書いてあるし…
SICPもプログラミング言語Schemeもダメとなると、あとはThe Little Scemerくらいか。
確かに. The Little MLer は分かりやすかった.
ついでに The Second Schemer もあげておこう.
408デフォルトの名無しさん:03/09/30 21:22
>>406
駄目とかそんなんじゃなくて、それぞれアプローチが異なりますよね?

そういう中で、SICPを先に読んでその後に『プログラミング言語Scheme』が
良いとか、いやその逆だとか、あるのかな?
と思ったんです。

選り好みする時間があったら、勉強した方が良いのかな。


>>407
ありがとうございます
SICP は計算機科学の教科書だから,Scheme という言語を勉強したいならアレは方向
性が違うような気がする.まぁ,やっといて損はないだろうけど.

Common Lisp もどうだい?学びやすさは Scheme > Common Lisp と言われるが,使い
やすさなら Common Lisp の方が上だと思う(標準に CLOS が入ってるから).

Common Lisp なら個人的オススメは Paradigms of Artificial Intelligence
Programming.タイトルの人工知能関連ネタ以外にも,Lisp の処理系作成,最適化,
といった話題が扱われている.処理系っても仮想マシンとそのコンパイラだけど.
>>404
R5RS
これ最強
>>404
The little schemer を おすすめ
SICP は scheme の勉強にはあまり向いていないと思う
gaucheの人のサイト繋がらない?
>>412
ほんとだ。sitefinder 初めて見た。
ns record が引けないね
415デフォルトの名無しさん:03/10/02 10:27
>>412-414

whois dreamhost.com
(ry
Record expires on 24-Sep-2005.
Record created on 14-Oct-2002.
Database last updated on 1-Oct-2003 21:25:54 EDT.

Domain servers in listed order:

NS1.DREAMHOST.COM 66.33.206.206
NS2.DREAMHOST.COM 209.17.93.93
NS3.DREAMHOST.COM 66.33.216.216

$ nslookup www.shiro.dreamhost.com
(ry

Non-authoritative answer:
Name:www.shiro.dreamhost.com
Address: 66.33.198.7
復活してる
(strip >>415)
=> >>416
418CLX タコ:03/10/03 05:23
WebサイトでCLXのサンプルプログラムを見ても立派すぎて理解できません。
どなたか、直線を一本描くような典型的なCLXのプログラムをご教示いただけませんか。
座標(0, 0)と(100, 100)を結ぶような直線の表示でよいのです。
お願いします。
「すみません誤爆でした」はまだか
>>418 処理系は何?CMUCL ? CLISP ? Allegro ? 使ってる CLX はどれ?
サンプルくらい付いてくると思うがなぁ.そもそも XLIB はわかってるのか?
(in-package :xlib)
(defun eventloop (display gcontext)
(event-case (display :discard-p t :force-output-p t)
(:exposure (window count)
(when (zerop count) ;; Ignore all but the last exposure event
(with-state (window)
(clear-area window)
(let ((x1 10) (y1 10) (x2 110) (y2 110))
(draw-line window gcontext x1 y1 x2 y2)
(draw-line window gcontext x1 y2 x2 y1)
(draw-rectangle window gcontext x1 y1 (- x2 x1) (- y2 y1)))))
;; Returning non-nil causes event-case to exit
nil)
(:button-release (code x y)
(eql code 3))))
(defun demo (&rest args &key (host "localhost") (font "fixed"))
(let* ((display (open-display host))
(screen (display-default-screen display))
(black (screen-black-pixel screen))
(white (screen-white-pixel screen))
(font (open-font display font))
(width 200) (height 200) (x 0) (y 0)
(window (create-window :parent (screen-root screen)
:x x :y y :width width :height height
:background black
:border white :border-width 1
:colormap (screen-default-colormap screen)
:bit-gravity :center
:event-mask (make-event-mask
:button-release :exposure)))
(gcontext (create-gcontext :drawable window :background black
:foreground white :font font)))
(set-wm-properties window
:name 'demo
:icon-name "demo"
:resource-name "demo"
:resource-class 'demo
:command (list* 'demo host args)
:x x :y y :width width :height height
:min-width width :min-height height
:input :off :initial-state :normal)
(map-window window)
(eventloop display gcontext)
(close-display display)))
>>408
まよっている暇があるなら『プログラミング言語Scheme』を読んでしまえ。
最後の例の章を除けば分量は多くない。

>>407 のうち、犬飼のものは絶版になったのもむべなるかな、という出来なので
おすすめしない。時間の無駄だ。ほかは知らないが、一見したところ二つ目のも
のはこれを通読してschemeを学ぼうという向きには不適に思える。三つ目のもの
はまあいいかも知れん。

425CLX タコ:03/10/04 05:51
> 420
Linux判 ACL です。
Franz社に問い合わせたところCLXはNon Supportだと言われました。
GraphicsはWindows判 ACLで扱っているそうです。
XLIBはHP-UXのC言語で使ったことがあります。

>421
Webサイト情報をありがとうございます。

>422
プログラムをありがとうございます。
試してみます。

>423
プログラムをありがとうございます。
試してみます。
426CLX タコ:03/10/04 05:57
> 420
すみません、判 ---> 版 でした。
プログラムをよろしくお願いします。
>>424
CLX って XLib かよ。gtk もあるみたいよ。
http://www.franz.com/support/documentation/6.2/gtk/readme.txt

> XLIBはHP-UXのC言語で使ったことがあります。
あ、おれと一緒だ。もしかして N 大学卒?
Gauche release 0.7.2
429デフォルトの名無しさん:03/10/05 23:52
gauche-glfがcygwinで動くようになったとあったので、
試しにコンパイルしようとしたけど、リンクエラーでうまくいかない。
glの関数が見つからないみたいなエラーなんだけど、
ちゃんと-lopengl32や-lglu32等やってあるんだけど・・・。

なんでですかね?
パスに無いんじゃね?
431デフォルトの名無しさん:03/10/06 00:16
パスが通ってないならcannot find -lopengl32とかでてくると思います。
configureに何かオプションが要るんじゃね?
>>429
その「エラー」とやらを書かないのは何故?
434デフォルトの名無しさん:03/10/06 01:32
普通にundefined reference
なんですが・・・。

cygwinでgauche-gl使えた人いますか?
>>434
勝手に一部のみを抜粋し、全文を書かないのは何故?
436デフォルトの名無しさん:03/10/06 02:04
上ので判るかと思ったんだけど・・・。
いろいろ事情があるんでしょうね。全文は不可能なのでまたも一部ですが。

$ make
cd src; make all
make[1]: Entering directory `/cygdrive/m/Gauche-gl-0.3/src'
gcc -Wl,--export-all-symbols -Wl,--enable-auto-import -shared -o libgauche-gl.dl
l gl_head.o gauche-gl.o gl-lib.o gl-syms.o glu-lib.o gl_tail.o -L. -lgauche-math
3d -lglu32 -lopengl32 -L/usr/local/lib/gauche/0.7.2/i686-pc-cygwin -lgauche -lm
-lgauche-uvector -L/usr/X11R6/lib -lSM -lICE -L/usr/X11R6/lib
gauche-gl.o(.text+0xc8c): In function `quadric_allocate':
/cygdrive/m/Gauche-gl-0.3/src/gauche-gl.c:227: undefined reference to `_gluNewQu
adric'
gauche-gl.o(.text+0xd1c): In function `nurbs_allocate':
/cygdrive/m/Gauche-gl-0.3/src/gauche-gl.c:250: undefined reference to `_gluNewNu
rbsRenderer'
gauche-gl.o(.text+0xdac): In function `tesselator_allocate':
/cygdrive/m/Gauche-gl-0.3/src/gauche-gl.c:274: undefined reference to `_gluNewTe
ss'
gauche-gl.o(.text+0xc51): In function `quadric_finalize':
/cygdrive/m/Gauche-gl-0.3/src/gauche-gl.c:219: undefined reference to `_gluDelet
eQuadric'
gauche-gl.o(.text+0xce1): In function `nurbs_finalize':


以下えんえんとgl関数のりんくえらーが続く。
リンクするライブラリが足らねーと見た。
>>436
-L/usr/X11R6/lib -lSM -lICE -L/usr/X11R6/lib
こんなのがついているところを見ると、Xも入れてる?
うちではX無しcygwinで普通にコンパイルできた。
え、glってXの機能使うんじゃないんか?
Xいらないらしい
あわわ、、どうするよ?429
442デフォルトの名無しさん:03/10/06 07:46
みなさんどうもです。
./configure --without-x
でいけました。ちゃんとgears.scmは実行できました。
ありがとうございます。
ただ、linux上での動作に比べてfpsが1/3のような気がする。
もう一回比較しないと勘違いかもしれないけど・・・。
444デフォルトの名無しさん:03/10/06 21:17
10/5にGaucheがバージョンアップしましたね。
446CLX タコ:03/10/08 01:02
> 420

420さんの疑問には答えました。
ベテランとお見受けしました420さんの
プログラムを待っています。
よろしくお願いします。

 
タリキホンガンキター
人工知能の暴走です。
M-x doctor で対抗
もっとくわしく教えてくれませんか?
CMUCL な漏れは 422+423 で四角と線が表示されたぞ.
CLXってどれくらい重いんですか?
さぁ、別に全然重くないけど…。普段は CMUCL + GLUT なので詳しくは知らない。
>>452
clxはxlibのLISP用インターフェースです
それくらい知ってから書き込めよ
Lisp くらい歴史ある言語だと、親が Lisp Hacker ですた、なんてのも居るんだなぁ。
456デフォルトの名無しさん:03/10/14 07:35
ansi commmon lispの本の、例題の解答例とか、どこかにないものですかね
>>453-454
CLXを別のLispに移植したものの上で動いている
お絵書きソフト(のようなもの)が重いんで、CLXに
戻せば軽くなるかなと思ったんですが…。
線の本数が10本以上になると、線を動かすたびに
お茶が飲めるほど待たされます。
>>456
一部の問題は前スレあたりになかったか?
そのほかのわからない問題あったら自分でやったとこまで晒してみろ。
ここ見てるとCMUCL多いね。俺もその一人なんだが。
高速&高機能&対応しているライブラリが多いのが乙
UNIX系でしか動かんのがなあ・・
まあいいけど
461デフォルトの名無しさん:03/10/14 19:20
CMUCLをFreeBSDで動かすとcoreを吐くので使えなかったんだけど、
://www.mail-archive.com/[email protected]/msg01073.html
を読んでカーネルを作りなおしたら動くようになった。
たしかに速い。
LISPで書いても速度的に不利にならないのが良いよね
ネーティブ万歳
463デフォルトの名無しさん:03/10/14 20:04
>>389
見てるか分からないけどここに膨大な量がある。
http://www-2.cs.cmu.edu/afs/cs/project/ai-repository/ai/areas/0.html

かの有名なELIZAのコードも(classics/)
464デフォルトの名無しさん:03/10/15 20:36
CMUCLのいいところは、UNIXとの親和性だな。
UNIXのシステムコール呼べるし、Cとの結び付きが強いし、Xも普通に使える。
漏れは CMUCL の実行バイナリ生成機能に期待!(19a には入るのかな?がんばれ Fred タン!!)
でも、そんなに UNIX と相性いいかなぁ?
駄目なところは
- 日本語非対応(リーダーをいじって無理やり日本語シンボルを通す方法はあるみたい)
- ビルド手順がちょっぴり複雑。
(build-tools はソースツリーに入りそうだけど、boot ファイルは人間が判断しなきゃならない)
- Windows で動かない。
- asdf とかが標準でついてこない。(sbcl は contrib に入れたんだよね?)
466461:03/10/16 16:59
>>465
>- 日本語非対応(リーダーをいじって無理やり日本語シンボルを通す方法はあるみたい)
://www.geocities.co.jp/SiliconValley-SanJose/7474/cmuclMemo.html#0012
に対応策があった。
(loop for i from 128 to 255 do (set-syntax-from-char (code-char i) #\a))
でEUC-JPやUTF-8なら通るようになる。SJISは`が2バイト目にかぶるからダメだけど。
げ,ほんとに日本語シンボルが通る….というか set-syntax-from-char とかってどっ
から出てきたんだろう.Common Lisper な皆さんにはこれくらい当たり前なんでしょうか?
こーゆうのは HyperSpec 読めばわかるようになるんでつか?
>>465
UNIXパッケージを見てみろ。
感動。
gclやclispはおろか、aclでもこれほどではないぞ
>日本語非対応(リーダーをいじって無理やり日本語シンボルを通す方法はあるみたい
そこは俺も素直に認める。
unicode対応予定らしいので、マジで期待
そうなれば、もうclisp使わなくて済むし。

>ビルド手順がちょっぴり複雑
バイナリリリースを使え

>Windows で動かない
俺の場合、Windowsをろくに使ったことが無いのでなんとも思ったことは無い。
真面目に(Windowsの)操作方法もほとんど分からんw(親父が熱狂的*BSDユーザで、小さい頃からUNIX育ちだし)。

>asdf とかが標準でついてこない。(sbcl は contrib に入れたんだよね?)
標準でもっといろいろなものを含めて欲しいってのは在るね。


対応アプリの数を見ると世界的には、CMUCLが優勢のようだけど、日本ではそうでないというのも日本語関連のせいなのかな?

>>469
unicode 化って作業してる人居るの?むかーしパッチがあったきりでは…。
>>470
http://www.cons.org/cmucl/projects.html
に一応載ってる。Brian Spilsbury氏らしい。
リンクが死んでるが
既に、ここにあったりする(謎
http://cvs2.cons.org/ftp-area/cmucl/experimental/

いったいどうなったんだろうね。

俺のLISPの技術が高ければ出ていきたいところだが、全然自身無いし....

でも、日本語のストリング(C++流の言い方だが)は既に使えるから、まあいいんでねーの?
と妥協してみたり。

* (setf a "逝って良し")
;
Warning: Declaring A special.

"逝って良し"

* a

"逝って良し"


ShiftJISの0x5c問題はどうなの?やっぱ駄目?
まあUNIXだからEUC使えればそれでいいけど。
>>471 一年以上前のバイナリだし…。*現在* だれか作業してるのかなぁ?
MLでもその手の話は全然見かけないんだが。
474ところで:03/10/16 22:41
皆さん、LISPやschemeでどんな作業してますか?
漏れはメールやネットニュースの記事の整理したり。
OpenGL でグラフィックスを描いたり。
ちょっとした図(PNG とか PDF)を描いたり。
プログラミングを勉強したり。
どうしても windows を,しかも ms-dos で動く
計算プログラムを使わなければなりません.
clisp などの win32 バイナリがあれば,
バッチファイルを一切書かずに済みますか?
msdos?
XLISPとかか?
>>476 win32 バイナリといっておきながら MS-DOS ?よくわからんな。
もちっと具体的に何をどうしたいのか説明しないとできるかもしれんし
できないかもしれんとしか言い様が無いぞ。
479デフォルトの名無しさん:03/10/17 14:56
いよいよMITSchemeがUNICODEにフル対応するらしい。
http://www.gnu.org/software/mit-scheme/
楽しみ!
最近プログラミングに関するこんなHP見つけた。
http://homepage3.nifty.com/Aransk/index.html
あまり見たことがない視点だなぁ。
三年後くらいに見たら書いた本人でも恥ずかしくなりそうな文章だな。
Niftyのフォーラムに書き込んだものの使い回しだね。
無駄な修辞を削っていくと、何も残らなそうな文章だ。
>>480
三年じゃ無理。
Haskellスレで変なレスがあったがまさかコイツでは・・・
考えを整理することに慣れてない人の文章だね。
読むだけ無駄だった。
電波認定するかどうか微妙な感じ。学生のレポートレベルですな。
ライプニッツ言い出す人、
大抵はモナドロジー読めてないよな。
487デフォルトの名無しさん:03/10/18 16:09
そうかなあ?本人がモナド論を読んでるかどうか知らんが結構面白い
視点だと思うがなぁ。
例えば:
http://www.ice.nuie.nagoya-u.ac.jp/~h003149b/index.html
このHPなんかでも関数言語を扱っているが、「雑談」や「疑問に思っていること」
なんて結構独自な視点で面白いじゃないの。
この前のこれも、
http://homepage3.nifty.com/Aransk/index.html
要はプログラミング言語を通して見えるものは何かってことじゃないの?
単なる言語仕様の紹介とか翻訳とか、サンプルプログラムだけじゃなくて
言語論や認識論的に捉えたHPがあれば教えてよ。
(オブジェクト指向の説明は除く!)
この2チャンネルでも挑戦した人がいたらしいが、見られたものじゃ
なかったって噂を聞いたが?(^^;)

ご本人ですか?
すべて消去されているのは気のせいですか?
別に独自でもないし面白くもないんだけど。

プログラミング言語を通して見えたとか言われても
その人が電波にしか見えない。

つーか、簡潔に書いてくれないのでくどくて読むに堪えない。
Lispの腕を磨けるようなことを期待したのに
脳内でこねくりまわした理屈を見せられたから
こんなに腹がたつんだな。
>>401 亀レスだが、一言逝っておきたい!
根拠も無く Common Lisp とかを汚れてるだの汚いだのデカイから駄目だのというのは聞き飽きた。
CL 派の漏れとしては不愉快だ。あまりこんなこと言いたくないが、lambda だけ
じゃダルくてマンドクセーから let とか逝ってる癖に、エラー処理は unwind-protect
じゃなくて継続があれば同じことができるから不要ですか?で、実装は大体 CLOS 相当
や unwind-protect やパッケージシステムを持ってるくせに規格に入れたら「デカイ、美しくない」。
うるさい。

あと Cmmon Lisp は関数型じゃないとか勝手にきめるんじゃねー。破壊的操作つかうには
それなりの理由があるんだよ。コンパイラに「これ、もーつかわないよ」と明示的に
指示してるんだよ!破壊的操作と同等の性能を GC + 関数スタイルで実現するのは
実用的にはきびしいな〜と心のどこかで思ってるから破壊的操作つかうんだよ!
関数型に向いてないんじゃなくて、現実世界とのすりあわせで破壊的操作使うんだろうが!

…とか語っといてなんだが、MIT Scheme の UNICODE 対応に激しく期待している漏れ。
cmuclの話題がいっきに止まってしまったな
変なもの紹介すんなよ
汚いっていうより覚える気になれない。
始める気力がでないんだよ。
誰も、気力が出ない香具師に文句なんて逝ってないYO.
「Common Lisp は XX だから」みたいな初心者にいい加減な事
を刷り込む香具師に文句言ってるんだ。

折角だから勧誘しておくが、Windows の Common Lisp 装備のエディタ
である xyzzy とかいいぞ。これの為に Windows を入れる価値がある(かも)。
CLOS とかは無いけど、正規表現や FFI もあるし、激しく快適なんだな〜。
正直、これで Common Lisp マンセーになった。これぞ、長年求めていた CL-Emacs…。
xyzzyって「Common Lisp*のようなもの*」だろ。
あんな微妙に違う物より、Emacs Lispの方が違いが明確でかえって楽。
497デフォルトの名無しさん:03/10/18 22:09
schemeの処理系はへたれなのが多すぎ。
CMUCLやGCLを見習おうぜ。

そんなスピードじゃあ亀にも追いつかれちまうぞ

お前らがschemeマンセーしてる間にcmuclはスタンドアローン実行イメージ作成可能になってるからな。
妄想に浸るのはやめろ。
SchemeなEmacsが欲しい。
>>496 どーかんがえても絶対 Emacs Lisp よりはマシだと思うが…。数値周りだけでも
elisp って不便じゃない? *ようなもの* って基準がわからんけど、準拠度を言うなら
CLtL2 の 5-6 割とか聞いたが、そんなこというなら CLtL1 相当の KCL とかはもう
*ようなもの* とか *だったもの* とでも言う気か?そもそも CLISP や CMUCL だって
完全に準拠してるわけじゃねーし。

>>497
cmucl で実行イメージ作成ってさぁ、おれのイメージファイルだけで 50M くらいあるんだけどさぁ…。
とりあえず意味もなく Scheme を煽るのは CL マンセーの漏れでも恥ずかしくなるから止めれ。
Chez とかへたれどころか素晴らしい出来じゃないか。フリーのコンパイラだって結構あるし。
Schemeはなんであんなにたくさんの処理系があるんですか?
言語仕様ってのはいたずらに小さくするのもダメなんだなって
おもったりもしなかったり。
Scheme(必要最低限)と Common Lisp(完全網羅)では
どっちが駄目とかそーゆう話ではないんじゃ…。まぁ、
どうしても処理系の数が少ないほうがいいなら、ISLISP とかどーよ。
Schemeって必要最小限でこれだけあれば何でもできますはいいんだけど、
その上で動く実用的な便利なもの(CLOSとかエラー処理とか正規表現とか)を
ちゃんと標準で決めてくれよう。
どこに持っていっても遅いかも知れないけど動くというような。
方言多すぎ。
readerの拡張とか、SRFIを取り入れてさっさとR6RSでも決めて欲しい。
>>502
> readerの拡張とか、SRFIを取り入れてさっさとR6RSでも決めて欲しい。

それは 「TCP や UDP を IP で決めて欲しい」 といっているのと同じようなものだよ
504デフォルトの名無しさん:03/10/19 07:38
突然で申し訳ないのですが、質問です。
MIT SchemeのWINDOWS版をアンインストールしようと思ってコントロールパネルの
「アプリケーションの追加と削除」を使ったんですが、アンインストールしようとすると

Setup is unable to find _SETUP.DLL, which is needed to complete the instllation.
Error 103

と表示されてアンインストールできません。どなたか解決法をご存知の方
いらっしゃいませんか?
_SETUP.DLLを手に入れる
Arcってどこでダウンロードできるんですか?
>>506
まだ。
とりあえず仕様でざくっと実装してアプリを書いてみて、
その知見をもとに現在ちゃんとした仕様を策定中だそうだ。
>>499
> >>496 どーかんがえても絶対 Emacs Lisp よりはマシだと思うが…。数値周りだけでも

「理系の学生さん向き」に惹かれましたv 素晴しい電卓として助けてもらっています.

scheme 用の仕様を決めて欲しいっていうのは,
もっといろいろな場面で scheme を使いたいけれど,
まさか自分で全て用意するのはちょっと...という気持ちがあります.
適材適所とはいうものの,好きなものをどこでも使いたいような気持ちです.

でも R5RS はあのままでいいです.
509デフォルトの名無しさん:03/10/19 12:55
Schemeで
(apply and ...)
みたいなのってどうやるでしょうか?
みたいなの、と言われても
>>509
答え:できない。
理由:applyが引数を先に評価しちゃうから。

(eval (cons 'and ...))
(every? identity (list ...))
>>512
引数足りない
>>509
関数に引数をリストでまとめて渡したい、てこと?
516デフォルトの名無しさん:03/10/19 15:42
つーかandは構文だからapplyに掛けられないだろ
次スレはschemeとCommonLISPで分離決定だな。
それより処理系ごとでいいんじゃね?
cmucl
gauche
はよく出てくるし
全体のレス数が多くないんで、細分化すると単なる過疎スレ作るだけが落ち
>>519
CLの話題がほとんどだし、schemeのレス数の少なさを次スレで実感すれば、scheme信者もあきらめるだろ。

CLとscheme以外は放棄の方向で(ほとんど誰も使ってないし)
いっそEmacs Lispスレも合同したほうがいいんじゃないか?
>>520
なぜ放棄するのでしょうか.
LISP 全体の話題がしたい人が困るかも知れません.

CL だけにして,自分好みのアーカイブを作りたい人がいるんですか?
このスレは全般スレとして残して、
処理系専用が欲しいなら好きに立てれば?
維持できる自信があれば。
なんでみんな頭のおかしな>>517のいうことをまにうけてんの?
schemeは処理系別に
clは一本化で
526flatline:03/10/19 19:28
ついこの前までSchemeの話題が主だったのに...

# 個人的には、CLとSchemeで違いを実感するのは関数の名前空間の分離問題ですね。
LISP6
http://pc2.2ch.net/test/read.cgi/tech/1031559474/
これ残ってるけどどうする?
アンチが立てたぽいけど
eqv?って文字列の比較はやってくれませんか?

まず、このスレに粘着してる香具師がどれだけいるかが問題だな。

人数を把握するために一人一回書き込んでくれ
CL中心かscheme中心かも明確にするように


とりあえず俺はCL中心....というかCLのみ
まずも何も書き込みの絶対数見りゃわかるだろ
>>529
そんな立てたいならさっさと専用スレ立てればいいじゃん。
むしろLISPスレはもっとガンガン立てるべきだよ
やれ>>529
別に一緒のスレでいいよ。今までそれでずーっとやってきたんだし。
CLのことはほとんど知らないけど、ここの情報見てるだけでも色々楽しいし
つか、前スレが未だに成仏出来ていない状態で
これ以上スレを増やすなよ。祟るぞ。w
つい最近成仏したぞ
Interview with GNU Guile Maintainer Marius Vollmer
http://www.gnu-friends.org/story/2003/10/17/55512/019
前スレはおれが1000取って成仏させたよ!!!
じゃ、こっちもよろしくたのむ
http://pc2.2ch.net/test/read.cgi/tech/1031559474/
"Tcl War" -- 懐かしいっす。
540デフォルトの名無しさん:03/10/21 01:01
それからRMS、つーかオッサン、
その道 行き止まりだよ、
とにかく Tclを使ってはならないだか
ソフトウェア特許だか知らんけど
どんな理由も知ったこっちゃないんで
俺は いつでも

  戦  争  反  対  !
ちなみに Tclはシカトが一番いいと
パトリックへンリウィンストン氏が言ってたス。
今は アホなGuileがくれた
新しい 世界を描く きっかけの時だ。

                
                  窪塚洋介
tclもguileも使ってます
RMSがどうこうだの、何々が何々を潰そうとしている(プだの、
あたくし何の興味もござーませんですことよ
お前のその行動でみんなの自由が失われていくんだよ!
Tcb ティクビー
544デフォルトの名無しさん:03/10/21 23:07
schemeの多値って便利だけど、
これで組んだらちょっと昔の処理系は全滅ですよね。
まあ、しょうがないか。
"ウインストン" "LISP" で検索したら、(既出かもですが、)ナイスまとめページを見つけた。
誠に、ありがとうございます。
www.1point.jp/%7Ebook_2ch/program/lisp_scheme.html
>>544
多値はそう言われることも多いんだけど、R5RSでは多値の実装に
関しては何も規定していないので (特に、継続が期待している
数と違う数の値が渡された時のふるまいが規定されていない)、
R4RS上にvaluesとcall-with-valuesを構築することは可能だよ。
call/ccも再定義しないとだめだけど。
そもそもそれを可能にするために、わざとふるまいが規定されていない。
rrrs-authorsのアーカイブあたりを探すとそのへんの議論があったはず。
これじゃ駄目だろうな・・
(define *values* ())
(define (values x . y)
(set! *values* (list->vector (cons x y)) x)
(define (call-with-values a b)
(a)(apply b (vector->list *values*)))

プリンタ上書きしないと結果わかんないし
call/ccはよく分からない
dyb の本 (The Scheme Program Language) に書いてあるよ。
>>545
Lisp in Small Pieces 高いけど買おうかな。処理系作りの勉強用に。
高すぎる・・
>>528
(define str1 "abc")
(define str2 str1)

(eqv? str1 str2)   ; #t
(eqv? str1 "abc")  ; #f
(equal? str1 "abc") ; #t
>>548
見たのは日本語訳の方だけど、
肝心のcall-with-valuesの中については載ってなかった
553デフォルトの名無しさん:03/10/22 19:25
valuesの実装。

distinctな型が必要なんで、ここではsrfi-9のレコード型を使う。

(define-record-type mv (make-mv vals) mv? (vals mv-vals))
(define (values . args) (if (= (length args) 1) (car args) (make-mv args)))
(define (call-with-values p c) (let ((r (p))) (if (mv? r) (apply c (mv-vals r)) (c r))))

また、R4RSのcall/ccが定義されているとすると、R5RSのcall/cc相当のものは、
(define call/cc-orig call/cc)
(define (call/cc p) (call/cc-orig (lambda (k) (p (lambda vals (k (apply values vals)))))))

この実装だと、複数の値がファーストクラスに見えているけど、
R5RSではそれは「禁止」されてはいないからOK。但し、そのことに
依存したコードはポータブルではない。例えば
(define a (values 1 2 3))
はこの実装では動くが、処理系によってはエラーになったり
予期しない動作をするかもしれない。
ありがとうございます
グローバルで持ち回る必要なかったのか
なるほど・・
整数m,nを与えたときに
m以上、n以下の整数を並べたリストってどう作るの?
(if (< m n) '()
(cons m (hoge (- m 1) n)))
(define (hoge m n) ;;; m以上、n以下の整数を並べたリストってどう作るの?
(if (> m n) '()
(cons m (hoge (+ m 1) n))))

(hoge 1 5)
(1 2 3 4 5)
(define (x m n)
((lambda (x)
(x n '() x (lambda (x) x)))
(lambda (x l p d)
(if (>= x m)
(p (- x 1) (cons x l) p d)
(d l)))))

> (x 1 5)
(1 2 3 4 5)
(define (foo m n)
(let foo-2 ((m m) (n n) (l '()))
(if (> m n) l
(foo-2 m (- n 1) (cons n l)))))

(foo 1 5)
=> (1 2 3 4 5)
560デフォルトの名無しさん:03/10/24 22:44
(from-to 'a 'z)
=> (a b c d ... z)

ってのきぼんぬ
すまんあげてもうた
>>560
上のやつの応用でできる。
(define (from-to a b)
(let loop ((r '()) (a (memq a '(a b c d e f g h i j k l m n o p q r s t u v w x y z))))
(cond ((null? a) r)
((eq? b (car a)) (reverse (cons b r)))
(else (loop (cons (car a) r) (cdr a))))))
みなさんありがとうございます。
こういったののソースが載ってるサイトとかって
Schemeの場合ないですよね?
調べたんですけどなくて・・・
簡単すぎてどこも載せないと思うけど・・・
ループの基本だろうに
>>1-10 のリンク先全部読めばすぐ理解できる
はいはいしてる赤ん坊に立って歩かせるような
厳しいこといわないであげて
はえばたて
たてばあゆめのおやごごろ
リストに対するバッククォート式
`(+ ,(+ 1 2) 3) => (+ 3 3)
がある様に、
コードに対しても先行評価ができると便利だと思いませんか。

#,<定数式> (評価が起こるのはread時)

'(+ #,(+ 1 2) 3) ≡ '(+ 3 3) => (+ 3 3)
(+ #,(+ 1 2) 3) ≡(+ 3 3) => 6

(define a "a")
(define b "b")
(define c "c")
(define (e f) (string-append #,(string-append a b c "d") f))
≡(define (e f) (string-append "abcd" f))
(e "f") => "abcdf"

(define WM_CREATE 1)
(define WM_DESTROY 2)
(case msg
((#,WM_CREATE) ...)
((#,WM_DESTROY) ...)
(else ...)
≡(case msg
((1) ...)
((2) ...)
(else ...)
>>570
Scheme (SRFI-10) の #, じゃだめなの?
自分でオペレータを登録する必要があったり、できることが
限られたりするけど。

Common Lispの #. みたいに何でも許しちゃうと、
便利だけど思わぬ使いかたをされてはまることがあるよ。
>>571 別にはまったことはないけどな…。それなりの理由があって使ってるケースは見るが。
制限したってわかり難い使い方を完全に防ぐ事は出来ないと思う漏れ。
>>560 シンボルに順序をつけるというのが気持ち悪い…。
574デフォルトの名無しさん:03/10/25 17:54
これからはじめたいですが、newbie用キットありませんか?
>>574
DrScheme
あれはむしろ初心者に厳しくなってないか?
>>574
WinでCommonLispならxyzzy。
私も入門中。
>>574
clispなんかどうよ?
579デフォルトの名無しさん:03/10/26 00:28
私もこれからLispの勉強・開発したいと思ってるものです。

自分が欲しいのは、
・GUIが使えるもの
・Windows(ノートPCの為)
・日本語が使える
・価格が高くない
というのが条件なんですが、

Corman Lisp 2.5というのが9月にでていて
http://www.cormanlisp.com/

リリースノート中に
- Kernel stringNode() now handles chars > 127 correctly, which
means CT:C-STRING-TO-LISP-STRING handles them correctly.
という文があるのですが、過去ログから推測するに日本語が使えるように
なるということでしょうか?

Lispも英語もよく判らないので詳しい方教えてください。
>>579
商用で使わないなら ACL trial を勧める。
>>577
guileはどうよ?
Cygwinにデフォルトで入ってるけど
入門には
(string-length "あいうえお")
=> 5
な処理系がいいと思う。マルチバイト文字にまつわるイヤな事はもちっと後で。
Emacs Lisp使っとけ
なんか見事にばらばらだね。参考にならないんじゃ?
要は手近にあるもん使っとけ、ってこと
じゃ、ACLトライアルにもう一票。
cygwinのclispで日本語が扱えないよー
どうしたらよいの?
>>587
ならば、ローマ字を使えばいいじゃん。
文字列でも使えない?
>>579
まず、LISPで「開発」するという時点でwindowsならACLしかありえない。
Linuxや*BSDだったらCMUCLなりSBCLなり優秀な開発環境があるけど。

cygwinを使ったものが1の欲しいものだとは思えないし、選択子はないだろ。

1のとるべき道

1.ACLのトライアルを使用
2.windowsは諦めてUNIX系(Linuxが良いかと)のOSに乗り換える


あと、CommonLISPに限定はしていないようだから
3.GUIはあきらめてEmacsLISP

あと、ノートにLinuxがインストールできないという状況は今ではかなり変わっているぞ。
実際、俺が今使っているLinuxはDELLノートだし。
windows でも unix でも,同じコードで GUI を使える日は来るのでしょうか.
common lisp で,GUI なところは処理系依存でも欲すぃ欲すぃ欲すぃ.

python とか perl とか ruby はできるんでしたっけ?
592587:03/10/26 20:07
>>589
文字列でもだめです。
ろーま字なんかじゃやだ。
cygwinフルインストールしたらclisp入ってたんだけど、
コンパイル時に何か指定しないとだめなの?
>>590 xyzzy は結構いいぞ。マルチバイトも含めたテキスト処理ならほぼ最強じゃないかな。
漏れはNECノートに FreeBSD + CMUCL と WindowsXP + xyzzy, clisp のデュアルブート環境。

>>591 GUI か… CLIM なら Win でも UNIX でも同じコードなんでないの?
あるいは、OpenGL バインディング(GLUT)でもコードはほぼ同じだろう。
>>590
私もxyzzyに魅力を感じるのですが、
xyzzyでのプログラミングって情報が乏しくないですか?
Common Lispの部分はいいとしてもエディタ部分等のxyzzy独自の部分の情報が。
その点ではまだEmacs Lispに軍配が上がるのかなぁと思ってるのですが、
Common Lispを使っているという魅力は捨てがたく・・・ぶつぶつ。

xyzzyでプログラムを書いている人は何で学んでいるのでしょうか?
595591:03/10/26 22:43
>>593
うわーん.clim って GPL じゃないYO.GPL な処理系にもがんばって欲すぃ.
FreeCLIMってなかったっけ。ぐぐってみる。
http://www.cons.org/free-clim/
開発止まってるのかな。ソースエリアにもアクセスできないし。
>>594 気のせい。リファレンスもあるし、apropos も ESC-Tab もあるし、
Emacs の経験があるならエディタ部分も簡単だろう。まぁ、Emacs にくらべると
ドキュメントが不足ぎみなのは認めるけど、歴史が違うからねー。

>>596 McCLIM で検索汁。
598594:03/10/27 00:10
>>597
リファレンスなんてあったっけと思いながら
探してみたらなんとか見つけることができました。
こりゃ便利そうです。
>>591
日本語が扱えないってテキスト処理のこと?
表示だけならCygwin版guileでできたけど
clispは入ってないからしらん

> $ guile
> guile> "日本語"
> "日本語"
> guile> '日本語
> 日本語
>>591>>587
601599:03/10/27 00:49
念のため

> $ cat .inputrc
> # Make Bash 8bit clean
> set meta-flag on
> set convert-meta off
> set output-meta on
xyzzy って密かに凄いとおもうなー。
漏れ的には 秀丸 <<<<<< xyzzy だ。
ちゃんと規格が決まっている言語を基にしたものと、ただのマクロを比較するのは酷かと。
xyzzyがすごいんじゃなく秀丸がへぼいだけ
>>591 それらのスクリプティング系言語は、Tk、GTK、
wxWindowsのようなマルチプラットフォームGUIツール
キットを利用できますので、X11、Win32、Macぐらいの
ポータビリティがたいていあります。

wxWindows + python の実例です:
  http://wxpython.org/screenshots.php
GUIってどの辺までのことを言ってる?
xyzzyはダイアログ出せる程度じゃないの?treeviewとか多少の
拡張はされてるけど.それでいいならxyzzyはお勧め.
ただ,Linuxにはないけどね.
607599:03/10/27 09:04
clispでは駄目だった

> [1]> '日本語
>
> *** - READ from #<INPUT CONCATENATED-STREAM #<INPUT STRING-INPUT-STREAM> #<IO TE
> RMINAL-STREAM>>: illegal character #\U0093
> 1. Break [2]>

なんでSchemeには出来てCommonLispでは駄目なんだ…
整数にはbignumがあるのだから、
文字も日本語でも何でも扱えるようにbignumと同じように大きさを無制限
にしたextended character型を定義しておいてほしい。
common lispが有理数を正確にあつかうことができるのはいいと思う。
0.33333.... = 1/3
浮動小数点の誤差を考えはじめると難しいから。
有理数があるのなら、無理数も正確に扱えるといいなと思うのが人情でしょう。
なんで無理数を正確に扱えないんですか? 実装が難しいのですか?
>>609
有理数は所詮分数であるから。

円周率を正確に求めることが出来ますか?
>>609
sqrt 2, pi, e .正確に表すにはこれらのシンボルで表すしかない.
当然 有理数上で定義された各種演算を無理数上でも定義しなければならない.
pi と1億桁まで等しい有理数を与えた時に, どちらが大きいか計算するのは容易ではない.
>>610
無理数の小数点以下を必要なときになって初めて(例えば表示するときとか)
必要なだけ求めるような仕掛けは無理ですか?
数学では円周率や√2などの有名な無理数以外の無理数を扱うときは
どうしていますか?
>>608
ついでに、CLOSオブジェクトで定義したcharacter型のsubtypeも
ユーザが自由に定義できるようにしておいてほすい。
そんで、夏目漱石が何月何日に出した手紙の何文字目などという文字を定義して
遊んでみる。
modifierとaccesorをメソッド定義するばいいだけだよね(あとreaderとかか)。
>>611
正確に表すのにプログラム内での実態として数式だけを持っておくという
のはなしですか?
たとえば円周率を好きなときに好きなだけ生成する数式はありませんか?
>>602 おねがいですからそーゆう比較をしないでください.Lisp はただでさえ信者が〜と言われやすいのに.
xyzzy は凄いとは思うけど.>>604 にとってはすごくないんですね.んじゃ,X-Window 環境に移植
してくれませんかね?自分はまだ力不足なもので.

>>607 clisp は Common Lisp の実装の一つですから,そーゆう飛躍した結論に逝かないでくれよぅ.手元の
cmucl だと
* '日本語
|日本語|
だし xyzzy でも
> '日本語
日本語
だぞ.つーか Common Lisp の所為じゃねー.
ぐだぐだ言わずに数式処理ソフト使え
数式処理ソフトってLispで書かれたMaximaや有名なMathematicaのことでだよね?
使ったことないんだけど、そういうソフトは無理数を正確に扱う仕組みがあるの?

もしかしてスレ違い?
On Lisp の日本語訳は、訳がこなれていてイイ! 文才感じるよ。
http://user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.pdf

この人のウェブサイトのトップページをブラウザ(IE6)で表示できないんだけど、
だれか見られる人いる?
>>618
正直、私もその訳はいいと思った。
訳本といえばひどい日本語が常なのに。
>>618
よくわかんないけど、
ttp://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd
の中の再帰的定義(?)を解釈できないらしい?
>>593

よろずやの方ですか?
>>618
/~g340299/ を get して gzip -d で解凍したら読めたよ。
リストの中から一番大きい数を抜き出すのは
どう記述したらよいのですか?
お願いします。
>>621 ???ぐぐってしまった。ILISP のポップアップが消せる事を知った。激しく快適だ。ありがとう 621 !!
>>623
アヒャヒャヒャヒャ。 環境を書いてないので emacs or Common LISP を想定しちゃうぞ.
さらに,宿題ですと書いてないので課題には使えないようなプログラムを書いちゃうぞ.

(let ((lst '(3 1 5 10 20 100 500 40 50)))
(loop with max = (car lst)
for x in (cdr lst)
when (> x max) do (setf max x)
finally (return max)))
>>625
emacs lisp って loop あるんですか?
あっても使わなさそうだけど。
apply max うんたら
maxって関数あるんじゃないかな。
(max 1 2 3)かリストを受け取るやつか解らないけど。
(define (max x)
(cond ((null? x) 'error)
((null? (cdr x)) (car x))
(else (let ((y (max (cdr x))))
(if (> y (car x)) y (car x))))))
>>626 loop あるみたいだな…。
(apply #'max '(1 2 3))
宿題スレ化はんた〜い!
>>630 反対ついでにネタを振れ。暇だから宿題にも答えちゃうんだ。
>>631
じゃあ、どうでもいいネタを振ってみる。Franz のセミナー行く人いる? おれは行く。
http://jp.franz.com/base/seminar_11_06_2003.html
WebActions か〜。Allegro 欲しいけど高いよな〜。漏れは趣味でやってるだけだし。
mod_lisp でもいじるか…。
windows上だとCL関連のライブラリも少ないし必然的にAllegroだろうね
漏れはLinuxなんでCMUCL+SBCLでライブラリが豊富-->CL万歳なんだが
ACLって一番安いのはなんぼ?
>>609
( ・∀・)つ〃∩ ヘェー

>>609
> 円周率を正確に求めることが出来ますか?
無理数っていっても n 乗根程度のものからあるのに
いきなり超越数を持ち出すのは酷というもの
>>617
無限のリソースがあれば「無理数を正確に扱う」ことは可能
無限のリソースってどこにあるんだ?
無限の時間も必要かと
>>618,619
イィ!
ところどころ送り仮名とか間違ってんのはtypoだろうな。2chでレビュー&フィードバックしますか。

>>635
ACLの最廉価版はタダ。あの値段はサポートフィーだろ。誰か7.0のβテスト参加する?
>>639
時間もリソースの一つ
642デフォルトの名無しさん:03/10/28 09:07
>>636
なるほど超越数か。 ありがとう。
ブクロサイコー age
>>617
数式処理ソフトがらみでは、116の辺を読んでみな。
>>618
Firebird で問題なく読めたよ
やはり XML の解釈は Mozilla 系が強いんだろうか
>>644
Mozillaの設計基本方針は「W3Cなどの規格に忠実であること」を
うたっているよね。たしか。
>>640 タダ!?体験版の話?ヒープ量が制限されてて,盛りあがってきたところで,
いきなり試合終了ってのを数に入れるのか?そりゃ,入門書のサンプルを打ちこむく
らいなら使えるだろうけどさぁ….あれを数えるのが普通なのかなぁ.それとも最近
価格改訂でもあったのかな.

漏れが Lisp に興味を持って買おうと思ったときは,一桁間違ってません?個人は及
びじゃないんですか?みたいな値段だったが.サポートフィーって言うならサポート
無しでいいからって言ったら 10 マソ以下で買えたりするとかないんですかね??
口だけ厨房は clisp でも使ってなさいってこった。
スマソ…まぁ、実際 clisp 使ってるわけだが。価格聞かれてるのに体験版ならタダ
って答えはどうかと思ったもんでね。
> Prices starting at $599 including Technical Support.
http://www.franz.com/products/packages/
て書いてあるぞ、7 万円弱。普通じゃん。ぱっと見高い気がするがマイナー度
を考慮すると安い。
アカデミックパック、Win/Linux/Mac のみなら、ね。
いいな。学生で該当プラットフォームの人は…。いやまてよ?
他のも値下げしてるのかな?なんか希望がでてきたなぁ。
>>650
FreeBSD or SunOSで社会人と見た
652579:03/10/28 22:41
参考になる話色々聞けてよかったです。ありがとうございました。

自分の今まで検討したもの(商用開発ではないです)
・ACL Trial(#リソース制限が気になる)
・Gauche(#Cygwin版はGTK使えない、でもOpenGL OKになったんんだからもう少ししたら対応してもらえる?)
・LispWorks(#Rel4.3になってからサポートが完全に付かなくなり、製品$999+サポート$250とちと高い)
・Corman Lisp(#GUIめんどくさそう。(length "テスト")とやったら死んじゃうので駄目そう)

でも649さんのいう$599が本当なら頑張って買っちゃうんですけど。
>>652
ACL をてっとり早く試してみたければ
% telnet prompt.franz.com
して
(defun hello (n)
(dotimes (i n)
(mp:process-run-function "hello"
#'(lambda (j)
(mp:process-sleep (random 10))
(format t "Hello World: ~a~%" j))
i)))
(hello 10)
などと打ってみれば。なんか franz の回し者みたいになってきたな。
$599 なら Visual Studio .NET Pro 並みの価格だな。
ほんとにその値段だけで買えるのならホスイ。。。
去年Windowsアカデミック版を購入したときには40万したけどな。
漏れもそんなに安かった記憶はないぞ…すごい値下げだな.日本の販売元がボッタクリなのか?
まぁ,ACL Trial も良いとは思うんだけど,ライセンスの更新がマンドクサなんだよな.

>>653 いきなり CL 標準以外の mp パッケージを使わせようとするとは….franz の
回し者に見せかけた Xanalys の手の者と見た.
CLを勉強する前から処理系依存の拡張機能を使うと
VisualC++しか使えないwindowsプログラマのようになってしまうぞ
>>655
ま、マジで買ったのか? アカデミック版と言う事は学生なのか。。。
漏れはサラリーマソだが買えない。 _| ̄|○ ガックシ
もちつけ、自腹じゃないだろう。きっと。…だめだ、激しくうらやましい!!
>>579
Gaucheって日本語使えるけど
cygwinでしか動作確認してないし

VC++とかでコンパイル通らんかなあ
661660:03/10/29 20:44
スマソ↑
その前にこれSchemeだったわ
662660:03/10/29 20:54
duplicateスマソ↑
しかもガイシュツ_| ̄|○
663655:03/10/30 09:17
>>658 >>659
さすがに自腹じゃないです。
アカデミック版は教員でも買えるし、研究目的なら予算も使えるからな
Schemer's way (日本語) 
http://www.shiro.dreamhost.com/scheme/docs/schemersway-j.html
を読んでいて、次のような箇所があり、

>必要十分にコンピュータを抽象化し、様々なアルゴリズムを簡潔に表現できて、
>かつ頑健なプログラムが書けるような言語機能のセットとは何だろう。
>Schemeが試みた解答は次のようなものだ (これが全部ではないが)。
>
>組み込みのガベージコレクション
>レキシカルスコーピング
>ファーストクラスのクロージャ
>ファーストクラスの継続
>末尾再帰の最適化
>構文的マクロ
なるほど美しいなと思いました。

これだけの機能を使って他の言語機能を書いていくってのは、それを「美しい」
の基準にするとちょっとパズル的な面白さがあるなと思いました。

そんで話を現実世界の汚さにもってくると、継承の実装って今のコンピュータで
早くできるのかなと思いました。schemeの実装にくらいのでたいしたこと言えな
いのですが、一般的な継承ってスタックをコピーしたりしないのかな?
> 一般的な継承ってスタックをコピーしたりしないのかな?

「継続」だよね。
そうとは限らない>コピー。Chickenみたいに全部CPSにしちゃうか
(スタックはポップしない、いっぱいになったらGCする)、
フレームをヒープアロケートすればコピー無しでできる。
前者はスタックエリアを事実上最新世代のヒープとして
扱ってるともみなせるけど。
フレームをヒープアロケートにするのは、確かAppelが、
コンパイラが賢ければ遅くならないとか言ってたというのを
どっかで読んだ気がするが、メモリアクセスのペナルティが
大きい最近のプロセッサでもそうなのかどうかは不明。
Chezは、論文によれば、継続の捕捉時にはコピーせずに、
起動時にコピーするみたい。
>>665
> 一般的な継承ってスタックをコピーしたりしないのかな?
668665:03/10/30 11:30
すみません。継承->継続です。
>>666
なるほど、それならコンパイラーの最適化をうまくやれば
「現実には遅いんじゃボケッ!」
という暴言には反論可能なんですね。

そして言語ユーザーはものすごいハカーが書いた最適化コンパイラを信用して
のびのびとプログラムを書けると。

でもあんまり、この「美しさ」に例えば学生時代などにはまってしまうと、
複数のプログラミング言語を使いこなすようなハッカーは別として、
普通の職業プログラマになるような人、生涯で身につけるプログラミング言語が
1つか2つという人(必ずしも能力的な問題ではなく、本人のやる気とか。
昔、大量のCobolプログラマーたちは、これからどうしたらいいのかとか
あったよね。)は、先輩プログラマーから「なんて書き方してんじゃ、コラッ!」
ということにならないかな。
そんで、Cプログラマに継続を説明するのが難儀なこととまったく
逆のことがscheme一本やりプログラマにも起きる危険はないかな?
(Cにしてみれば「普通」のループの書き方とか)

てなことをErik Naggumさんがcomp.lang.lispで毒吐いてるのを読んだこと
あります。


いま授業でScheme使ってる学校って多いの?
>>670
うちは国立大ですがSchemeをやっとります。
去年まではSchemeではなくPrologだったらしい。
>>669

> でもあんまり、この「美しさ」に例えば学生時代などにはまってしまうと、
> 複数のプログラミング言語を使いこなすようなハッカーは別として

複数のプログラミング言語を使いこなすような人でないと「美しい」とは
感じないに一票。

>>671
なるほど。
大学レベルじゃなくて、中学、高校のあたりじゃどうなのかな?

>>669
> あったよね。)は、先輩プログラマーから「なんて書き方してんじゃ、コラッ!」
> ということにならないかな。

そんでLispの評判が落ちるので、schemeをLispと呼ぶなと吼えてたよね、その人。
そりゃ、あんまりだって僕は思うけど。

Lispにおけるマクロの使い方について、ひとこと言わせてください。
On Lisp にのっているaifとかああいうのは、ほとんど使わないで
いただきたい。読むときに一瞬、何じゃこりゃと思考が途切れるから。
とくにマクロだと引数の評価さえ起こるのかどうか定義を見ないとわからないし。

私がうまいと感じたマクロの使い方は、
ひと目でこりゃ普通の構文じゃないとわかるような物、
たとえばアスキーアートで書いたグラフのようなミニ言語をマクロで処理するやつ。
忘れてしまって実例が出せないのがもどかしいですが、
SICPにそんな例があったような気もする。

もちろん何らかの形で標準化されているものは別でしょ?
>>669
理想の GC + 理想のコンパイラなら破壊的操作と同じ性能が出せるのか?漏れ的には
なんとなくそれは無理な予感がするんだが.どんな高速な GC も,GC しない,より
は遅いだろうし….あんま学が無いのでよーわからんが.

>>674 そうかね?全然違うものなんだから別に良いと思うけど.CL はかなーり性能面
を考えた仕様だし,実用的に使う事を目指してるでしょ?さすがに古いのでネットワー
ク関連とか足りない機能が目立つようになってきたけど.Scheme は結構学術路線で
しょ?ミニマリスト視点というか.機能 x は y を使えば実現できるから y だけあ
れば良い!! みたいな.目指すところからして全然違うんだから別もので良いんじゃない.

>>675 漏れは let でいちいちバンドされるよりは anaphoric なほうが読みやすいけどなぁ.
特に cond とか cond とか.
anaphoricって何?

condとかcondとかってcondのみだな。
Schemeで書いてた時はちっとも気にしないのに
Emacsで書き始めたら速度が気になりだした。
disassembleなんてあるから余計に。

再帰からループへ。
foldを使ってみたのがいちいちスタックに詰め込んでバインディングするなってなって
元のループに。
>>677
> 理想の GC + 理想のコンパイラなら破壊的操作と同じ性能が出せるのか?漏れ的には

富豪的なプログラミングの延長として、今のハードウェア
(メモリはどんどん安くなっている)、OSおよびアプリケーション
(サーバなど長期間生きているものは除く)の使用形態を考えると、
メモリをただただ喰らう言語実装でも意外と誰も気がつかなかったりして。
メモリリークするOSってあるよね? もちろんそれがばれれば叩かれるだろうけど。

>漏れは let でいちいちバンドされるよりは anaphoric なほうが読みやすいけどなぁ.
>特に cond とか cond とか.
漏れの意見では、condは見た目で何をしているのか、Lispを知らない人でも
(condがconditionの略だと教えれば)言い当てられることがありそうな気がする。

漏れが嫌いなのはdoやdo*です。これってちょっと油断する(Lispから半年くらい
離れるとか)と実行のながれがどうなるかすぐに忘れてしまいます。
>>678
↓みたいに,条件節の値を it で参照できる if, when, cond の事.再帰書くためのもの.
(let ((word "ABC DEF GHI"))
(acond
((ppcre:all-matches-as-strings "[a-z]+" word)
(format t "match: ~A~%" it))
((ppcre:all-matches-as-strings "[A-Z]+" word)
(format t "match: ~A~%" it))
(t
(print "No Match.")))))
anaphoric lambda は it じゃなくて self.
(alambda (x) (if (<= x 1) 1 (* x (self (1- x)))))
再帰関数もこんな感じ.
こんな感じか。
(defmacro alambda (bindings . body)
`(letrec ((self (lambda ,bindings ,@body))) self))

自分で名前を決めさせてもいいかも。
>>681
scheme の => とは違うの?
itに束縛しないという意味では違うよ
>>682
Schemeだと、srfi-31にrecってのがある。こんなかんじ。

(rec (self x) (if (<= x 1) 1 (* x (self (- x 1)))))

defineとほとんど同じだな。
anaphoric if, when, cond, lambda ってどれくらい標準的なの?
できればSchemeとCommon Lispの両方について教えて下さい。

標準的というのは、国際規格、ユーザ間での事実上の標準がある、
いくつか競合する仕様があってユーザ間での合意がまだとれていない、
On Lisp の作者がはじめて書いた、などのいろいろなレベルのことです。

On Lispを読みながら勉強中のLisp初級者です。
>>679 Emacs Lispスレもよろしく!
Schemeなら速度が気にならないのに、Emacs Lispだと気になるのはなぜ?
Lispでプログラミングする以上、最初は速度を気にせずどんどん書いてみて、
実際に使ってみて遅かったら、プロファイラ(コードのどの場所でどれだけ時間が
かかっているかを調べるもの)を使ってボトルネック(コードで一番遅いところ)
を探して、そこを集中的にいじって早くなるようにするのがいいと思います。

少なくとも Common Lisp では,国際規格の御墨付きはない.しかし,ANSI CL で書
かれているライブラリをそこまで心配する必要があるのかと.Paul Graham のライブ
ラリ自体は clocc (Common Lisp Open Code Collection) に収録されている.
defsystem(C で言う make ね) と同じくらいには標準的とも言えるかもしれない.
たまーに,依存がめんどうなのか,一部(awhen だけとか)をライブラリ内で定義し
てる人もいる.まぁ,さすがに競合する仕様は見たことないけどね.Scheme はよく
知らない.
>>688
そして,現実の計算機上での効率も考えだしたら CL もよろしく!!ミニマリストな人
は#t,#f が無い事やパッケージや CLOSや,リーダーマクロや,コンパイラマクロや,
関数と変数の名前空間や,コンパイラへの型宣言や,使わない標準関数に目をつぶれ
ば Scheme とそんなに違わないよ.ダイナミックスコープだって使わなければ存在し
ないのと同じだし.車にだって,走る目的以外の装備が付いてるだろう?そーゆうもんさ.

# まぁ,金があるなら Scheme でも Chez を買えばいいわけだが….
「プロファイルなんてしなくても、コードを読めば大体どこらへんか分かるよ。
ループとか関数呼び出しのところだろ」
という意見は正しいこともありえるのですが、プログラムが複雑になってきたり
言語の実装、ハードウェアを変えたりすると足元をすくわれることが多いようです。

英語がにがてなので忘れましたが「あまりにも早すぎる最適化はしないほうが
身のため」みたいな英語の格言があった気がする。
クヌース先生だっけか。
「半端な最適化は諸悪の根源である」
693デフォルトの名無しさん:03/10/31 12:29
Appel
"Garbage Collection Can Be Faster Than Stack Allocation" 1987
Miller and Rozas
"Garbage Collection is Fast, But a Stack is Faster" 1994

どっち?
694デフォルトの名無しさん:03/10/31 12:50
>>693
スタックの割り付けとガベージコレクションのどっちが速いか?

現在のパソコンにおいてスタックの割付は、ハードウェアレベルのことなのに、
ガベージコレクションはソフトウェアレベルのことなのでスタックのほうが有利。
695デフォルトの名無しさん:03/10/31 12:58
>>694 では、LispのためのハードウェアをそなえたLispマシンではどうよ?

スタックは関数呼び出し毎に確保、破棄を行わなくてはならないが、
GCは非同期に行える。
→深いパイプライン×スレッドレベルパラレリズムが進むとGCが有利(かも)
697デフォルトの名無しさん:03/10/31 13:01
LispにはJavaについているガベージコレクション機能がそなわっているの?
>>697 Lispのほうが元祖だよ。Lispを勉強した人がJavaを設計したんだよ。
>>693
Appel
"An Empirical and Analytic Study of Stack vs. Heap Cost for Languages with Closures" 1994

もお忘れなく。
700デフォルトの名無しさん:03/10/31 21:01
おめーらなんつーか必死だな。最強なファンクショナルでファッショナブルな
言語はMLって決まってるんだよ。おめでてーよなおめーらは。
つーか、あんたの方が必死だな。
>>700
MLにもいっぱいあるが、どれよ?
http://research.microsoft.com/projects/ilx/fsharp.aspx
これかも。
CLR の仕様書読んでると L# とか S# とか作りたくなる。
704デフォルトの名無しさん:03/10/31 22:04
SMLにきまってんだろ。MLより洗練された言語みたことねーよ。
SMLに比べてschemeのまさってるってところどこよ?
705デフォルトの名無しさん:03/10/31 22:06
以前なんかCに取って代わる言語がMLと言われたモノだ。
そうなることはありえんがな
>>700
まぁ,Lisp はマルチパラダイムもいーところなので,最強の Functional Language
は ML というのに全く異論はございません.どの ML か,なんの "最強" かは存じ上
げませんが,実におめでたいですな."最強" には全く興味がないので,今後は貴方
の脳内最強決戦にはノミネートしなくてもいいですよ.まぁ,ノミネートしていただ
けるだけでも光栄なのかもしれないですが.ではさようなら.
なんだかんだで「最強」の一語に大興奮の図
>>702
きっとXML
>>704
(゚Д゚)ハァ?
MLって言ったらOCamlとかHaskellとかCleanとかあるだろ
>>649
配布ライセンスが1ユーザ当り7マソ円だという罠があったりして。w
結局>>704は似非か…
>MLって言ったらOCamlとかHaskellとかCleanとかあるだろ
(゚Д゚)ハァ?
まあ、スレ違いなので関数型言語スレにでも移動しろ
だんだん話がずれてきたので、話題転換

もうすぐCMUCL19aがリリースしそう。

目玉は
スタンドアローン実行イメージ作成機能
MIPS,Alphaのサポート
simple-streamの実装

あたりか


スタンドアローン実行イメージにはかなり期待。
>MIPS,Alphaのサポート
最近はすたれてるイメージがあるな。
CMUCLがクロスプラットフォームになる事自体はいい傾向かと。
しかし、どうせならDarwin/PPC(MacOSXね)とかCygwin方面に拡大した方がいいじゃないのかという気はする。
MacOS X は Pierre Mai タンがコソーリ作業してるみたいだよ.19a に間にあうかは知らな
いけど.Cygwin は聞いたこともない.デベロッパーは誰も Cygwin やってないみた
いだから,誰かやりたい人がでないとなぁ….SBCL 方面でも Windows 環境は作業し
てるいないみたいだし….
719デフォルトの名無しさん:03/11/04 09:39
昔に書いたObject Pascal(Delphi)のプログラムを、久しぶりに読んでみたんだけど、
いや〜、型、型、型、データ型のことばかりいつも考えていたんだろうなって
思うようなコードでした。別の言い方でいえば効率のことばかり考えていたというか。

それに比べて現在はLispやPerlなど動的な型を持つ言語でプログラミングすること
が多いのですが、コーディング中の気持ちよさが段違いですね。
まっ、現在はプログラムの実行速度を追い求める気持ちが減少したということかな。
実用上問題になった段階で、ボトルネックを局所的に、最終的にはアセンブラを
使うことも視野に入れて最適化すればいいやという心境になりました。

Lispでのコーディングスタイルを画家がスケッチしながら絵を描くようなもの
とPaul Grahamさんが指摘していますがまったく同感です。
昔に竹内郁雄先生が共立出版のbitという雑誌に書いた、Common Lispへの
批判を、どなたか覚えていたら教えていただけませんか?
もしくはインターネット上で読めたら幸いです。
bitなら図書館で読める気がする
722デフォルトの名無しさん:03/11/05 03:40
MLは型 型 型 だらけの世界だが気持ちよく射精しながらコーディングできるぞ
>>722 いや、お説ごもっとも。ところで、Lispだと未定義の関数とかを
呼び出しているコードをとりあえず書いといて、その他の実際に定義を書いた
関数を呼び出している部分を臨時にその場で動作テストするといった
開発スタイルをとれるのですが、MLではどうですか?
724デフォルトの名無しさん:03/11/05 07:58
MLの型チェックって開発中のいつの段階でやるんだろう?

Lispの型チェックは、一般的な処理系では実行時にやるのが多いみたいな
気がします。しかしcmuclという処理系ではコンパイル時に、明示的な型宣言の
チェックはもちろんだけど、データ型の宣言が無くても、コードを解析して
推測してくれます。そしてコンパイラはその結果を報告してくれます。

そのコンパイラからの忠告を無視して無理やり実行することもできます。

そして実行時にエラーが発生したときは、コードの中でしておいた 
safe 宣言の度合いによって、実行時にクラッシュしたり、デバッガが
立ち上がったりします。
725デフォルトの名無しさん:03/11/05 09:03
プログラム言語のパラダイム(構造化プログラミング(C, Pascal, ...)、
オブジェクト指向(Simula, Smalltalk, ...)、関数(ML, Haskell, ...)、
一行野郎(Perl, ...)、最小機能で最大機能(Scheme, Forth?)、
マルチパラダイム(C++, Common Lisp, Perl, Ada?...),,,,,,

私は、上にあげたパラダイムのようなものは、何となく感じをつかんだつもりです。
さぁ、次はどんなパラダイムを体現した言語を勉強したら楽しいのでしょう?

現在はCommon Lispに熱中しています。プログラミングとは無縁の職業に就いている者です。
>>725
多分、言語を駆使してプログラミングする時代が終わる。GUI でオブジェクトを配置、接続して
ロジックを記述するようになる。文字を使うのはリソースやパラメータとしてのみ。
727デフォルトの名無しさん:03/11/05 09:35
>>726
来ない来ない来ない来ない
>>726
Smalltalk触ってください
729デフォルトの名無しさん:03/11/05 09:50
>>726
GUIといってもVisual BasicやDelphiなんかのプログラミングと違って、
ロジック自体が絵のようなもので表現されるということですね。

たしかに文字で書くより絵にしたほうが人間にとって理解しやすいことって
ありますよね。回路図や地図とか。

そういうパラダイムってたしかVisual Programingという分野として
確立されていませんでしたか? もし有名な言語
(とはもういえないか図だから)というか処理系、つまりいじってみる
ことができるものがあれば、教えてください。

comp.lang.lispで活躍されているErik Naggumさんは、これからは、
人間がプログラムを書くのではなく、機械がかってに書いてくれるように
なると言っていました。それ以上の説明がなかったので私には理解不能
でした。

あと、Emacsの前身となったエディタを書いたり、Javaの設計をやったSunの人
もある公演で、いまわれわれは、ターミネーターのような世界になるいっぽ
手前にあるのだみたいなことを言っていましたね。これも「はぁ?」という
感じでした。
730デフォルトの名無しさん:03/11/05 09:59
ちなみにLispだと図や絵をアスキーアートとして表現する言語
を普通のLispコード内で即席に設計、実装するのが楽です。
これはマクロというLisp独特の機能を使います。
>>730
あれ?これとそっくりな意見をどこかで見た気がする。deja vuかな? 気になる。
>> 731 このスレの前の方でもこの話題がでてきたよ。
人間が何かを表現するときに文字と絵(図像)は有力な道具となります。
だから、本には文字がいっぱいあるし、本でも文字で説明が難しいときは
図で説明するでしょう。

ここでは文字と図像を独立した概念としてとらえていますが、われわれ
東洋人、つまり漢字圏に生きるものにとって、図像としての文字という
考え方はなじみ深いものがあるでしょう。つまり文字と図の区別って
あいまいだなという考え方が出てきます。

Lispのプログラムは括弧が多すぎていやだという人がいますが、熟練した
Lispプログラマは括弧が気にならないといいます。ではなぜ気にならない
のかといえば、インデント(字下げ)を使って書いているからです。
Lispのプログラムをコンピュータの画面に映して遠くから眺めてみると、
処理の単位を木の葉とした木のように見えます。そしてもはや括弧は見え
なくなります。

つまりプログラミング言語でインデントしながらプログラムを書くという
行為は知らず知らずのうちに、図像が人間の脳に訴える力を利用している
ということです。こういう意味において字下げがロジックを表す手段として
利用されているPythonを設計した人は、字下げの重要性を感じていたのかも
しれません。

>> 733
> つまり文字と図の区別ってあいまいだなという考え方が出てきます。
私は速読の訓練をしたことがあるのですが、速読では本のページ全体を
絵や写真を見るように脳の中に記憶します。そして瞬間的にすべてを
理解します。

ここで言う理解とは、本を読んだ後で内容について質問されたときに、答える
ことができるという意味です。

Lispの達人たちがハックしているときって、やっぱりそんな瞬間理解能力を
知らず知らずのうちに発揮しているのではないでしょうか?

だからプログラミングの達人と初級者では生産効率が恐ろしいほど違うという
結果になるのではないでしょうか?
> GUI でオブジェクトを配置、接続してロジックを記述するようになる。
Lisp とは関係ないけど、こういうの。
http://images.google.com/images?q=labview&num=100&hl=ja&lr=&ie=UTF-8&oe=UTF-8&c2coff=1&sa=N&tab=wi
3 次元のものだと、こういうのもある。
ttp://ryujin.kuis.kyoto-u.ac.jp/ylab/yamakaku/Visulan/
>>736
このプログラム画像をlispに翻訳してくれ
ttp://ryujin.kuis.kyoto-u.ac.jp/ylab/yamakaku/Papers/Wiss95/wiss95p04r100.gif
なんじゃこりゃあ。っていうかパターンマッチしてひたすら書き換えてくだけなのね。
739デフォルトの名無しさん:03/11/05 17:58
以前この板でSchemeでEUC対応したインタープリターは無いとかの意見が
ありましたが、Scheme入門を読んでいたらSCMってEUC対応している
と書いてあります。SLIBもついているようだし、MITSchemeのEUC対応を
わざわざ待つ必要も無いのでは?
だれかSCM使っている人いませんか?Windowsでも使えるのかなぁ?
使えますよ。
Windows版はメンテ対象か知らないけど。
(ポーティングを別の人がやっていた)
次の世代のプログラム開発は、モデリング -> 具象化の形になるんじゃないかな。
UMLを使って必死に研究されてるはず。
>>725
論理型、宣言型、遺伝型
>>741
上流しかやらない人の妄想のような気も...
下流工程はネット時代の流通業と同じようになってしまうんかね
昔マシン語覚えた人が今使わなくなって
無駄になってしまったようなことがないように、
今一つ覚えるとしたらどれ?
マシン後を使わなくなった=無駄になったと思うような人はプログラマに向いてないと思うよ。
言語を使う/使わないとは関係無く知っていればそれだけ視野が広くなる。
良いものであれば、何がよいのか、何故よいのか、が分かるようになるし、
ダメなものはダメなりに、何がダメなのか、何故ダメなのか、がはっきり分かるようになるし。
748745:03/11/06 05:24
すみません。そういうつもりで書いたんじゃなかったのです。
>>746,747
おっしゃってることはすごくよくわかります。
自分でも常々そう思ってるので。
が、「今 COBOL を勉強中」「今 N88-BASIC を勉強中」とかいうと
ハア? といわれるような意味で、
どの言語がプログラミングで最も本質的なものを得られるか、と
質問したかったのです。
向き不向きがあるだけ。
>>748
> が、「今 COBOL を勉強中」「今 N88-BASIC を勉強中」とかいうと
> ハア? といわれるような意味で、
言われてもいいじゃないか。そして意識の上ではその言語を忘れてしまった
ように感じても、無意識レベルでは色々な影響を与えてくれるだろう。

たたき上げプログラマの俺から言わせれば、とりあえず触れるもの、つまり、
いま自分が使っているマシンのアセンブラでプログラムを書いてみるのを
すすめる。
>>745
敢えて答えるとLisp系

ぜったい長生きするよ、少なくともJavaよりは長生きする。いつまで
たっても、わかるやつだけわかるというマイナーな存在のままだが..
752751:03/11/06 09:13
LISPスレと気づかずに間抜けなこと書いちまったよ
でも、さすがに COBOL, N88-BASICで ハア? なのは、正しい感覚だと思う。
得られるものが無いとは言わないけど、他の言語を学んで得られるより遥かに少ない。
無意識レベルでの話で、アセンブラ、Lispはごもっとも。後は pure な関数型言語も。

俗世で使うなら、C,Java あたりか。 ん、ありきたりでスマソ。
CはJavaよりも長生きすると思う。
抽象化したアセンブラとしての使われ方が確立されてるから。
>>754
ん?新しいCPUのVMは何で書くの?
VMってなんの略のつもりですか?
ヴァカ蔓延
バーチャルマシン(Virtual Machine)といえば、マイクロソフトのC#関連の
やつにCommon Lispは無理だろうけど、Schemeの実装なんてあるのかな?

たしかhaskellかMLは研究者がマイクロソフトに集まって実装している、
もしくは実装したと言ってたけど。
使った事無いけど
* Hotdog Scheme http://rover.cs.nwu.edu/~scheme/
 MS が金出してたみたい
* Bigloo http://www-sop.inria.fr/mimosa/fp/Bigloo/
 CLR 用のコードを吐けるようになったらしい

そういえば、C# 2.0 では lambda と closure が使えるんだって
http://msdn.microsoft.com/vcsharp/team/language/default.aspx

continuation(継続)って
セットジャンプ<->ロングジャンプみたいなものでつか?
+環境かな
>>753
漏れは学ぶんだったら、アセンブラと Lisp を勧めるけどな。
コンピュータアーキティクチャに一番近い言語と遠い言語だけど
この二つの言語の概念的なものを理解していれば無敵じゃ。w
>>762
そうかなあ、VisualBasicとかのGUIをマウスで構築したりする奴(RADとか言うらしい)の方が
よっぽどハードウェアに遠いと思うけど。
無敵のあなたの実力を示してください。
lisp の応用性が高いのは(特にマクロとか)、関数型だからというより、
記述もデータ構造もかっこによるリストであるとしたことによる
偶然の産物のような気がするんですけど、違いますか?
必然性はあるんでしょうか?
>>763
表面的な事ではなく本質的な部分を理解されよ。w
記述もデータ構造もかっこによるリストであるとしたのは
万能関数evalを作るためだから必然性はあるよ。
>>767
なるほど、必然的な意図があって
記述もデータ構造も同じ構造を取ったということですか。
> 記述もデータ構造も同じ構造を取ったということですか。

ところで、同じ構造を取るには他にどんな選択肢がありえるんだろう?
って考えた。xmlとかキモそうだな。

<defun name="hoge">
<argument-list>
<arg name="x">
....
</argument-list>
<body>
....
</body>
</defun>

とかやるのかな?
>>769
インデントを括弧の代わりにするのは?
>>760
> continuation(継続)って
> セットジャンプ<->ロングジャンプみたいなものでつか?
C言語の setjmp<->longjmp のことだと仮定して答えると、setjmp<->longjmp
でできることは、continuation(継続)でもできる。

しかし、continuation(継続)はそこからもう一歩、一般化した考え方だ。
ここで、例をしめせばいいのだが、時間がない。
>>770
> インデントを括弧の代わりにするのは?
どういうインデントをしたら見やすいコードになるのか。
C, C++などの他言語とはちがってインデントスタイル論争というのはLisp界では
あまり聞かない。そんなことをしてもせん無いことだとLisperは承知している
からかもしれない。

おれの意見では、あまりにも厳格なルールを作ってしまうのではなく、
コードの場所ごとに自分が見やすいインデントをすればいいと思う。

といっても、エディタの設定しだいで、だいたい決まってしまうけどね。

インデントを構文規則に取り入れてしまったスクリプト言語Pythonに対する
批判として、一行プログラムを書きづらいというのがある。
>インデントを構文規則に取り入れてしまったスクリプト言語Pythonに対する
>批判として、一行プログラムを書きづらいというのがある。
一行プログラムなんてshで書けばいいんだよ。Perlみたいに
なんでもかんでも出来るようにするのが最善じゃないと思われ。
>>774
正しいPythoner(って何?)はみんなそうあるのDeath!
まぁ、Lisp だって一行プログラムには向いてないわけだが。一行プログラム
専用リーダーマクロでも作れば話は別だけど。
>>632
Franz のセミナー行ってきたよ。
背中に「t」と書いたTシャツきてた講師には正直ヒキました。
胸に書くべきだったな
nil とか #t じゃなかっただけマシだと思え。で、どうだった?
Web に公開されてるスライドみた限りじゃ Aserve と WebActions の
簡単な説明みたいだったが。ハカー向けというより素人さん向けって感じ?
休憩の時に coffep? (・∀・)ニヤニヤ とかされなかった?
最後はやっぱり allegrop? (・∀・)ニヤニヤ で終わったのだろうか。
>>780-781
「(・∀・)ニヤニヤ」は外せない要素なのでつかw?
帰り際に sexp? (・∀・)ニヤニヤ と誘われたのだろうか。
sex は predicate じゃないから sex-type にしないと変だよ、と小一時間
説教して嫌われないと。
あ、ごめん、空気読めてなかった。
 /巛 》ヽ,
ヾノ"~^ヽ,^
 (´∀` リ < t
 ( つ旦O
 と_)__) 旦
A*m Supreme t-th
背中に λ っての見たときはビビった。Lisperだとtなのか。
coffeep の発音は コーフィーピー? コーフィープ?
t よりλの方がかっこいいな。
nil の方がいいか?
790777:03/11/08 06:59
>>779
ん、素人さん向けかな、セミナー聞いただけだと、
Allegro Serve は「Web Application Server ヲ何トLispデモ!」、
Allegro WebActions は「Struts を何とLispでも!」
Lisp 「でも」できる、じゃちょっとプレゼンがイマイチかと。
いまいちこなれてないセミナーでターゲット絞りこめてなかったよ。これから毎月やるらしいからよくなるかもしれない。

客「その Emacs(Meadow) がないと ACL は動かないの?」とかいう素朴な質問が出たり。
講師「Aserve では動的に変更ができます!」
客「Allegro CL だけの特徴じゃネェだろゴラァ!」というヤリトリがあったり。
講師「全部 Lisp とHTML の知識だけでokです、面倒な設定ファイルはいりません!」には、
ココロのなかで「単に Lisp で設定書くだけだろゴラァ」とつっこんでおきました。

ACL のトライアルCDスペシャルエディションとか、Basic Lisp Techniques という
Franzの冊子をもらいました(・∀・)ニヤニヤ
>>778
胸には(get-lisp-p)、背中は t だったかな
>Basic Lisp Techniques
それはここにあるやつか?
http://www.franz.com/resources/educational_resources/
>>790
lisp 以前に日本語を学べ
> 講師「Aserve では動的に変更ができます!」
> 客「Allegro CL だけの特徴じゃネェだろゴラァ!」というヤリトリがあったり。

まあ、確かに Java とかでもできる。でも、処理系の枯れ具合とパフォーマン
スがまだまだ違うと思うんだけど、その辺どうなんだろう?
Javaは速いよ。
795777:03/11/08 10:36
>>791 Basic Lisp Techniques
それだ、製本してあるけど中身同じだ
>>792
スマン、文章がばらばらだな鬱
>>795 気にすんな.2ch なんだから,正確な日本語なんかほっとけ.意味が伝わりゃいいんだ.
素人さん向けか,まぁ,あんまりハカー向きで素人さんが置いていかれてたりしたらイメー
ジ悪いからな.Lisp の宣伝がんがれよ〜.>>Franz

ところでスペシャルエディションな CD な何がスペシャルなんだ?
797デフォルトの名無しさん:03/11/08 14:10
XAMLってどう思う?
>>797
閉じるタグを書くのがめんどくさそう
curlってどう思う?
wget よりまし
>800
いいボケでつね
あのさあ、ACL使ってみて思ったんだけど.....


Allegroserveのどこがいいの?
MITのcl-httpの方がよっぽどレベルが高いわけだが。
サポートが受けられるとか
Emacs で scheme を書いているのですが、
edebug-defun の scheme 版ってありますか?
式が一つづつ評価されていく様子が目で追えればいいです。

それと、scheme-interaction-mode で scheme の式を評価したとき
display で表示される出力を確認する方法はありますか?
schemeのどの処理系かが書かれてないので
その処理系のデバッガのマニュアル嫁としか答え様がない
>>805
guileです。 scheme-interaction-mode がつかえるのはguileだけだと
思ってました。スマソ
ならguileのMLで聞いた方が早いかもしれないよ
scheme-interaction-mode は使ってないから知らないけど、
run-scheme してから scheme-mode のバッファ内で C-x C-e すれば
run-scheme の方に結果が表示される。
Allegroは最高ですか? 最高です。
Allegroは最高に値段が高い。
>>809

Allegroserve -> cl-httpがあるだろ
Allegroの正規表現 -> フリーのperl互換regexがあるだろ
Allegroのcorba -> clorbがあるだろ
Allegroのclim -> Mcclimがあるだろ
Allegroのsocket -> ほとんどの処理系が標準で実装してるだろ
AllegroのSSL -> openssl用のアダプタがあるだろ
AllegroのRPC -> CMUCLは標準で実装してますが何か?
AllegroのXML-RPC -> フリーのXML-RPCがあるだろ
AllegroのODBC -> http://www.cliki.net/Databaseに山ほどあるわけだが
Allegroの外部ライブラリへの接続 -> そんなもん常識
Allegroのjlinker -> jacolでいいだろ

確かに、一つ一つのライブラリの質はまあまあだが結局大したことないじゃん
よって、Allegroの利点は
1.Windowsでしか使えないIDE
2.Windowsでしか使えないCommon Graphics

こんなもんに金をかける価値はなし。
で,実際に使う処理系は何を選ぶ?
Allegro 使ってフリーソフト作れる?
UNICODE 対応やスレッド周りの評価が無いのは意図的なものですか?まぁ,ネタだと
思うけど.スレッドだけ見ても
CMUCL -> Lisp レベルのスレッドなのでパフォーマンスが…
SBCL -> ネイティブスレッドがあるけど,Linux オンリー.
じゃん.McCLIM は CVS 版使ってるけどまだまだリリース前の段階だし,Allegro の
と比べるのは無理だろ.Allegro は買う価値があるがあると思うけどね.
漏れは買えないから今日も CMUCL の Lisp スレッド.鬱だ.
>>813
作れる
>>814
別に意図的じゃないけどね。


AllegroのIMAP+POP
AllegroのGTKインターフェース
AllegroのCLX
Allegroのjil
.....

などなど、一つ残らず挙げるなんて面倒臭いことはやらん。

>>812
CMUCL

>>811
それはある意味allegroの宣伝
>>815
ランタイムライセンスはどうなるの?
http://jp.franz.com/base/product_runtime.html
できる,の意味はソースで配れってことじゃない? Franz の OpenSource プロダクトみたいに
>>811
そんなに沢山インストールするのが面倒なので ACL 買う。
ていうか ACL の話はもういいよ。
>>819
バイナリを配ることは可能
で、ACLっていくらなのよ。
ところでさ、asdfの名前の由来ってなんなの?
ちょうどキーボードの左手の位置に"asdf"という文字列があって
非常に打ち込みやすいわけだがもしかしてそれを狙ってる?
左手しか使わないからむしろ打ちにくい。
dvorak 使ってるからむしろ打ちにくい。
>>822
http://www.franz.com/products/packages/
USD 599 (65,477円)から

ところで、ACLのランタイムライセンスって幾らよ?
>>826
いくらなんだろうね. 上から使ってもいいよと
Enterprise が落ちてくるだけなので氏らね
>>826
Professional Edition パッケージが599ドルってこと?
で、ランタイムライセンスが別途???

とにかくACLの最適化ありで自由配布可能な単体exe作れるなら
買ってもいいんだけど。
>>828
http://jp.franz.com/base/map_packages.html

一番安いのは、Professional だろうからランタイム・ライセンスは別売りだなー。
ま、本体より高くはないだろうが。。
Lisp in Small Pieces、ペーパーバックで出るみたい。
http://titles.cambridge.org/catalogue.asp?isbn=0521545668

買いやすくなった、かな。
831デフォルトの名無しさん:03/11/10 09:15
>>830
Lisp処理系の実装についての情報が豊富って昔に聞いたけど、初心者向けの
meta circular なやつかと思って(馬鹿です)あまり気に留めてなかったんだけど、
リンク先の紹介よんだら買いたくなってきた。

Lisp系の処理系はCでおふざけLispを書いてみたり、SchemeのC言語での実装を
見たり、cmuclのコンパイラのコードをちょっとつまみ食いしたくらいなんだけど
買って損は無いかな...  多分、読まなきゃ分からないことだな。

読んだことのある人の感想を希望!
832デフォルトの名無しさん:03/11/12 17:52
リストのパターンマッチの仕方のサンプルが色々載ってるサイトってありませんか?
タープリ
>>832
例えばこんなの。そんなに色々いらんだろ。
http://www.geocities.co.jp/SiliconValley-SanJose/7474/cmuclMemo.html#0019
generator expr 導入は嬉しいね。早く使いたい。
836835:03/11/13 06:44
>>835 は、「ぱいそん、ぱいそん…」スレとの誤爆でした。誠に申しわけありません。
Python 風味 generator をでっちあげてみる.

CL-USER> (setf gen (generator (* x x) for x range 3))
#<generator {4977E46D}>
CL-USER> (next gen)
0
CL-USER> (next gen)
1
CL-USER> (next gen)
4
CL-USER> (next gen)
nil
838デフォルトの名無しさん:03/11/13 15:05
flatline ◆r6EONKKhcc 氏の『On Lisp』の翻訳は素晴らしいage。
http://user.ecc.u-tokyo.ac.jp/~g340299/onlisp_j.pdf
(最終更新日 2003.10.14)

お元気ですか?続きを気長に待っております。
※ところで、やはり名前の由来はギブスンの『ニューロマンサー』ですか?
Emacs lispの新スレたちますた。仲間なので貼り付け。
Emacs Lisp 2
http://pc2.2ch.net/test/read.cgi/tech/1068467385/
840Alyssa:03/11/13 22:01
schemeで、condを使ってifを定義できないのは何故?
>>840
できるが?
>>840
(define-syntax myif
(syntax-rules ()
((myif test then otherwise)
(cond (test then)
(else otherwise)))))

> (myif #t (display "t") (display "f"))
t
> (myif #f (display "t") (display "f"))
f

できるじゃねーか。それとも何か落し穴でもあるのか?
(define-syntax myif
(syntax-rules ()
((_ test then otherwise)
(cond (test then)
(else otherwise)))
((_ test then)
(cond (test then)))
))
844頑張って考えよう!:03/11/14 07:46
>>840
SICPの問題1.6?あの本の問題で最初につまるのがそこだったりする。
その少し前の話題をよく読んで見なされ。
>>841-842で使われてるマクロ(特殊形式)と手続き作用の違いに注意
(define (if a b) ...)で定義できないってこと?
>>845
>>840 の文からすると逆じゃねーの?
もまえら… >>840 が釣り or 宿題だとしたら…
おじさんたち、宿題手伝ってくれてありがとう。また一緒に遊ぼうね。
釣り or 宿題でも、こっちが楽しめればいいじゃん。
>>837
scheme風はこんなかんじか?

(define-syntax generator
(syntax-rules ()
((_ body _ var _ range)
(let* ((b (lambda (var) body))
(v 0))
(lambda ()
(if (< v range)
(begin
(set! v (+ v 1))
(b (- v 1)))
#f))))))
(define (next g)
(g))

> (define gen (generator (* x x) for x range 3))
gen
> (next gen)
0
> (next gen)
1
> (next gen)
4
> (next gen)
#f

うわぁ、なんかきもちわるい
普通に宿題だろうと思ったからヒント出したのよん
852837:03/11/14 13:48
>>850
Python 方面では流行りらしいからさー.漏れのは↓ですた.

(defclass generator ()
((target :initarg :target :accessor target)
(next-step :initarg :next-step :accessor next-step)
(get-step :initarg :get-step :accessor get-step)
(end :initarg :end :accessor end)
(func :initarg :func :accessor func)))

(defmethod next ((self generator))
(with-slots (target next-step get-step end func) self
(when target
(let* ((value (funcall get-step target))
(end? (funcall end value)))
(prog1
(and (not end?) (funcall func value))
(setf target (if end? nil
(funcall next-step target))))))))

(defmethod make-generator (fun (target cons))
(make-instance 'generator :target target :next-step #'cdr :get-step #'car :end #'null :func fun))

(defmethod make-generator (fun (target integer))
(make-instance 'generator :target 0 :next-step #'1+ :get-step #'identity :end #'(lambda (x) (>= x target)) :func fun))

(defmacro generator (fun for var in target)
(declare (ignorable for in))
`(make-generator #'(lambda (,var) ,fun) ,target))
853sage:03/11/14 18:37
Lisp,Schemeとは直接関係ないですが、
[フォン・ノイマン生誕100年]という事で数学セミナーの今月号(12月号)に
和田英一「フォン・ノイマンの自己増殖機械」
竹内郁雄「ノイマンと非ノイマン」
という文章が載っています。


854デフォルトの名無しさん:03/11/14 21:14
mcclim正式リリース記念age
855sakura:03/11/14 21:29
>>840です。

>>844さんのお察しの通り、SICPの問題1.6で悩んでいます。

独学中なので、こちらしか頼れる所が無いので
低レベルですけれど、これからも宜しく御願いします。

でも、皆さん優秀ですね!
どうやってマスターされたのでしょう?
856844:03/11/14 21:45
>>855
私の場合,悲しいことに,ネットを徘徊していて
その解答を見つけてしまいました.
SICPは、ちゃんと「読んで理解」していれば分かるだろう
教科書なんだし
>>855
昔おれが質問した解答が
過去すれにあると思う。
ややスレ違いですみませんが、どなたか教えていただけないでしょうか?

ある人工知能分野の重鎮が以前(苦渋を込めて)発したとされる言葉なのですが、

「常識というものは、理論物理学の先端などよりも、はるかに高度な概念なのだ」

これ、誰の、いつの言葉でしょうか?
マッカーシーかミンスキーあたりだと思っていたのですが、検索しても見つかりません。
>>838
元気ではありますが,最近はそちらに割く時間が取れず,更新が滞ってます.
(期待していただいている方には申し訳ないとは思っておりますが)

# "Neuromancer" は衝撃的でした
>>860
今印刷して読んでます.なかなかむずかしい.
>>860
ありがたく読ませていただいてます。
On Lispのchooseにはビックリした。
こういうのschemerにとったら普通なの?
>>860
字句的スコープってレキシカルスコープでいいんでない?あえてそうしてる?

ありがたく読ませてもらってます。
読んでないけど、レジシカルスコープを字句的スコープなんて
かかれてたら面食らうな
レジシカルスコープなんてかかれても面食らう訳だが。
ピアソンの「プログラミング言語Scheme」では「字句構造によるスコープ制御」と訳してあった
>>865
すごく素朴なことを訊くけど、発音は「レジシカル」なの?
ずっと「レキシカル」と読んできたし、辞書にもそれっぽく書いてあるのだけど?

http://www.sanseido.net/sup/ItemPane.asp?P0=10&P1=MAIN,NODE,99389
869デフォルトの名無しさん:03/11/17 15:46
schemeで8パズルのプログラム教えてください。
ワラタ
>>869
サムロイドの15パズルの縮小版のことですか?
8パズルの何をするプログラムですか?
宿題ですか?

(display "8 puzzle")
(newline)
仕様をもうちょっと具体的に述べてくれれば懇切丁寧に教えますよ.
シュクダイ? (・∀・) ヒトノタメニナラナイコト、ダイスキダカラオシエチャウヨ
873デフォルトの名無しさん:03/11/17 19:26
depth-first-searchを使ったプログラムなんですけど明日、学校に行って詳しい事聞いてきます。よろしくお願いします
>>873
アルゴリズムの問題だな

全通り(無限だが)の動かし方を網羅した木を考える
その木を根から葉に向かって探索する
ある方法が同じ動かし方をぐるぐる繰り返していると分かったら
その方法は解でないと判断してその方法へ分岐した内部頂点へ戻り
解が見つかるまで探索を繰り返す

バックトラックがキーワードか?
876872:03/11/17 22:16
漏れよりもさらに凶悪なエスパーどもが活動を開始したか…。8 puzzle は
既にとけたも同然だがコピペできない程度の寸止めだな。寸止めする意味は
あまりなさそーだが…。
(・∀・) モンダイもわからずに質問とはおめでてーな。はやく聞いてこいゴルァ >>873
それまでの盤面を保存して、
次の手を考えるときにそれまでにあった局面は排除すればいいのかな。
あんまり速くなさそうだけど。
(define (eight-puzzle x)
 (let loop ((x (list x)))
  (if (end? (car x)) (answer x)
   (map loop (next x))
(next x)で((next1 . x) (next2 .x) (next3 . x))なリストを返すと。
878デフォルトの名無しさん:03/11/18 11:28
足りない部分を付け足して8パズル作ってください。
頭の良い方お願いします!!!
(define (node-expand l)
(let ((lst (car l)))
(if (and (= (car lst 1) (= (cadr lst) 1)
(list (make-puzzl '(1 1) '(1 2) l)
(make-puzzl '(1 1) '(2 1) l))
(if (and (= (car lst 1) (= (cadr lst) 2)
(if (and (= (car lst 1) (= (cadr lst) 3)
(if (and (= (car lst 2) (= (cadr lst) 1)
(if (and (= (car lst 2) (= (cadr lst) 2)
(if (and (= (car lst 2) (= (cadr lst) 3)
(if (and (= (car lst 3) (= (cadr lst) 1)
(if (and (= (car lst 3) (= (cadr lst) 2)
(if (and (= (car lst 3) (= (cadr lst) 3)
(define (make-puzzl m n l)
(cons n (subst m n (cdr l))))
(eval (( )( )( )( )( )( )( )( )( )) )
(sort(( ) ( ))
((3 3)(1 1)(1 2)(1 3)(2 1)(2 2)(2 3)(3 1)(3 2))
(define subst
(lambda (new old lat)
(cond
((null? lat)(quote()))
(else (cond
((eq?(car lat) old)
(cons new (cdr lat)))
(else (cons (car lat)
(subst new old
(cdr lat)))))))))
(cons n (subst '(1 1) n (cdr l)))
>>878
インデントしたらとんでもないことになった
とりあえずコードの理解した分。
((3 3)(1 1)(1 2)(1 3)(2 1)(2 2)(2 3)(3 1)(3 2))
これが盤面を表していてcarが空白の位置かな。
node-expandが力技で次の盤面をつくる。
(define (node-expand l)
(let ((lst (car l)))
(map (lambda (x) make-puzzl lst x l)
(cdr (assoc lst
'(((1 1) (1 2) (2 1))
((1 2) (1 1) (1 3) (2 2))
((1 3) (1 2) (2 3))
((2 1) (1 1) (2 2) (3 1))
((2 2) (1 2) (2 1) (3 2) (2 3))
((2 3) (1 3) (2 2) (3 3))
((3 1) (2 1) (3 2))
((3 2) (2 2) (3 1) (3 3))
((3 3) (2 3) (3 2))))))))

(define (make-puzzl new old l)
(let loop ((r (list old)) (l l))
(if (null? l) (reverse r)
(loop (cons (if (eq? (car l) old) new (car l)) r) (cdr l)))))

(define (end? x) (equal? x '((3 3)(1 1)(1 2)(1 3)(2 1)(2 2)(2 3)(3 1)(3 2))))

(define (next x)
(let loop ((lst (node-expand (car x))) (r '()))
(if (null? lst) r
(loop (cdr lst) (if (member (car lst) (cdr x)) r
(cons (cons (car lst) (cdr x)) r))))))

(define (answer x)
(for-each (lambda (x) (display x) (newline)) (reverse x))
(newline))

(define (eight-puzzle x)
(let loop ((x (list x)))
(for-each loop (next x))
(if (end? (car x)) (answer x))))
(map (lambda (x) make-puzzl lst x l)は
(map (lambda (x) (make-puzzl lst x l))
さて動くかな。
(loop (cons (if (eq? (car l) old) new (car l)) r) (cdr l)))))も
(loop (cons (if (equal? (car l) old) new (car l)) r) (cdr l)))))
なんか間違いだらけだな。
(define (make-puzzl new old l)
(let loop ((r (list old)) (l (cdr l)))
(if (null? l) (reverse r)
(loop (cons (if (equal? (car l) old) new (car l)) r) (cdr l)))))

(define (next x)
(let loop ((lst (node-expand (car x))) (r '()))
(if (null? lst) r
(loop (cdr lst) (if (member (car lst) (cdr x)) r
(cons (cons (car lst) x) r))))))
schemeがないのでelispで解いちゃったんだけど貼ってもいい?
869 :デフォルトの名無しさん :03/11/17 15:46
schemeで8パズルのプログラム教えてください。

elispじゃ分かんないんじゃない?
(´・ω・`)ショボーン
別にここでもいいけど、elispスレに貼ったら?
http://pc2.2ch.net/test/read.cgi/tech/1068467385/l50
>>886 貼っちゃえ貼っちゃえ。ぶっちゃけ 869 はどーでも良いや。間違って elisp 提出したらそれも一興。
このスレは、869のレベルに合わせた実装でなんとか動くものをみんなで作ろうという、
とても高度な思考遊戯ですか?
>>886
貼っちゃってください

893デフォルトの名無しさん:03/11/18 23:22
作って作って(^-^)ノ
schemeもlispもないのでrub(ry
>>894
おまえは私の眠りを妨げた.おろかものめ!
896名無しさん@Vim%Chalice:03/11/19 00:00
OnLisp 11章からレキシカルって書いてあるね。
lexical の発音を無理やり日本語にしろと言われたら、「レクスィクル」。
でも漏れが今まで読んだ計算機関連の文章の中で、カタカナ表記では
「レキシカル」以外は見たことがない。
ちなみにコンパイラ関連でyaccと一緒によく使うlexは「字句解析器」かな。

「レキシカルスコープ」に一票。
lexical のままでいいよ。めんどくさいから。
899スレ違い:03/11/19 17:29
Effective Perl(吉川訳)だと「字句解析的スコープ」なんて訳してたりする
900デフォルトの名無しさん:03/11/19 17:46
>>899
それはちょっとどうしようもない訳ですね。翻訳者が何もわかっていないのがまるわかり。
lexical scopeはstatic scopeと同義だから、静的スコープと訳してしまってもいいのでは?

ところでscopeって何て訳すのがいいのかな。「有効範囲」という訳は見たことあるけど。
>>899
微妙な日本語英語にされるよりはそっちがいいね。

意味的には「見たまんまの」って感じでしょ?>レキシカル
字句的が一番だろ。
レキシカルなんて、意味わかんねーよ。

でなかったら、textualだな。
ちょっと質問なのですが、
gclから他のコマンドやシェルスクリプトを呼び出して、
その標準出力を文字列としてgcl側で受けとるということは
可能なのでしょうか?

イキナリでごめんなさい。
マニュアルに載ってるんじゃない?
systemとかprocessって名前で。
とりあえず,外部コマンドを実行してストリームに出力する関数さえ
見つければ with-output-to-string 使って簡単にできるだろう.
gcl 手元にないけど CMUCL だと↓みたいな感じ.
(with-output-to-string (s) (run-program "ls" nil :output s))
907899:03/11/19 20:47
「字句解析的(コンパイル時に決定される)スコープ」て
ちゃんと書いてあった。(my変数の説明)
別に訳者を悪く言うつもりじゃなかったんだが…すまん
マニフェストとかよくわからんカタカナ並べられるよりは
manifesto と書いてもらった方がしっくりくる。
カタカナ英語の意味には日本人の感違いしたニュアンスが入ってる
ことがよくあるんで、よほど一般的な単語でない限り使うなと思うね。
909国研:03/11/20 00:01
感違い → 勘違い
日々の授業とレポートと学園祭でデスマ入っているOn Lisp訳者です.
# 3時4時までJavaです...

術語は悩みの種です.いっそ原語表記にしちゃおうかとも思います.
(売り物の本では「訳してないぞ」的批判を避けるために原語を取り除くのでしょうが,
私の場合はその心配はありません.ちなみに現段階でも並記してる部分もあります)

ただ片仮名9文字の「レキシカルスコープ」より漢字片仮名交じり7文字の
「字句的スコープ」の方が目に優しいと思います.その点は他でも考慮しました.
私の持っている培風館のCの本ではscopeは「有効範囲」でした.それだと漢字のみ7文字.

ただ,今は先へ先へと進めるのが優先なので (最近進んでない) その辺は後回しにさせて下さい.

そもそもなぜlexicalが一般化したのでしょう.私ならsyntacticかcontextualにしますね.
初めて「レキシカル」という言葉を知ったときは,しばらく理解できませんでした.
lexical(辞書の,語彙の)は意味以前の,文字同士の関係に関する言葉ではないでしょうか.
まあしょせん素人ですけど.lexical, syntactic, grammatical, semantic...

# lexicalで擦れが盛り上がっててビクーリ
911国研:03/11/20 00:14
lexically delimited scopeって感じ?
>>905
>>906

確かにgclの場合はsystemという関数があって実行できるのですが、
ストリームを指定することができず、標準出力にたれ流しになってしまいます。

system関数についてのマニュアルもあさったのですが、
何分"system"というそこかしこにある単語のためうまく検索できませんでした。
(そもそも載っていないような気も?)

もうちょっと調べてみます。ありがとうございました。
>>912
> ストリームを指定することができず、標準出力にたれ流しになってしまいます。

これでいけるんじゃねーの? declare は書かなくても大丈夫だけど。

(with-output-to-string (s)
(let ((*standard-output* s))
(declare (special *standard-output*))
(system ...)))
914デフォルトの名無しさん:03/11/20 11:27
ACL購入記念あげ
915914:03/11/20 11:36
あれ?規制されてたと思ったのに書けちゃった。くだらないこと書いてごめんなさい。

仕事柄プログラミング言語に関する各種の本を読んできましたが、「静的スコープ」
や「レキシカルスコープ」とはいいますが、「字句的スコープ」という言い方
はしないようです。この文脈での"lexical"という英語と「字句的」という日本語は
微妙に意味が違うと思いますね。じゃあ何かいい訳は無いのかと言われても困り
ますが。私が以前ある文書を翻訳したときは、”lexical scope"は全部「静的スコープ」
にしてしまいました。元の文を尊重するという点ではだめなのかもしれませんが、
この場合意味するところは同じなので、変な訳語を創出するよりよく使われている
訳語にあてはめてしまう方が誤解がないと考えたのです。
時代は性的スコープだろう
覚書。
scopeとは、ある名前があるモノを束縛(binding)しているとき、その束縛が見える範囲。
extentとは、ある束縛関係が生き延びる範囲(lifetime)。

dynamic binding = dynamic scope + unlimited extent 
lexical binding = そんな用語あったっけな。

Emacs Lisp は変数、関数とも dynamic binding だと elisp マニュアルに書いてあったと思う。
Common Lisp の変数は 何も言わなければ lexical scope。special variable として
宣言すれば dynamic scope。関数については忘れた。
Scheme は関数と変数の name space が同一。そしてlexical scope で unlimited extent だとR5RSに書いてあった。

shallow binding, deep binding は実装上のテクニック。
>>917
scope と extent の説明で使われている「範囲」という言葉の2つの意味。
1つめは、ソースファイル内でのここからここまでという意味。
2つめは、ある関数や構文(let, flet, labels, ...)が実行中である、
この場合の実行中とは、その関数が他の関数を呼んでいる(そして
それが、また別の関数を...)場合も含める。

>>918
ソースファイル上での範囲は「静的な」範囲で、
関数の実行時の呼び出し関係における範囲は「動的な」範囲。
うざい。
Common Lispの開発環境で、Emacs lisp用のedebugみたいなソースレベル
デバッガがついたものはありますか?

Emacsのilispパッケージにはなさそうだし、昔ためしたAllegro Common Lisp
のWindows上のIDEにもなさそうでした。
>>914
おっ金もっち〜。
前スレ、html化してもらいました。
まあ、このスレもそろそろ落ちそうですが。

LISP Scheme Part7
http://ruku.qp.tc/dat2ch/0311/20/1042167213.html
>>893 ある意味、神というか才能だろうな。かなり数の居た暇にあかせて宿題でも解くか〜
という連中をたったの1レスで殲滅するとは…。大物になれるよ。ほんと。
>>924
>>894 じゃないか?
>>913

コードまで書いてもらえるとは・・・。ありがたいです。

実際にやってみたのですが、やはり標準出力にたれ流しになってしまい、
式自体の値は""になってしまいました。

現在はとりあえずの処置として、コマンドの出力をリダイレクションして
そのファイルを読み込むようにしていますが、不格好なことこの上ない感じです。

もうちょい調べてみますね。
>>926
>>913 がだめだとするとその関数くさってるね。Lisp コードレベルではどう
しようもない可能性がある。それと "(system " とかで検索した?
ここで聞いたらひどいかもしれませんが、日本でLISPはなぜ人気がないのでしょうか?
人気がない=糞言語という意味ではありません。メジャーじゃないんではないかという疑問です。
>>928
括弧だらけで気持ち悪いからだろ
(●)(●)(●)(●)(●)
>>928
日本以外では人気があるとでも?
>>931
漏れもそれが知りたい。
アメリカの話しか聞いたことないよね。ヨーロッパとかアジアではどうなんだろ?
>>928
俺もずっとそう思ってました。

Lispについていろいろ解ってくると、
「なんでこんなに面白くてパワフルな言語なのにみんな使わないんだろ?」
と疑問を感じることが多いです。

身近な友人にデモを交えてLispを説明したことが何度かあるのですが、
みんなLispに対して「処理が遅い」「表記が特殊で難しい」
「実績がない」などの誤解をしていることが多いようです。

あと、自分の使うプログラミング言語に対して
わりと保守的な姿勢を取る人間が多いんですよね。
「自分の使ってる言語はメジャーだから良い言語なのだ」という
盲信がけっこうあるような気がします。
>>933
フランス: CMUCL のデベロッパーの Eric Marsden
イタリア: EncyCMUCLopedia の編集者 Paolo Amoroso とか arnesi, FiveFM の Marco Brainger
ドイツ: CL-PPCRE の作者の Edi Weitz

とかを始めとして、ヨーロッパ圏のデベロッパーも結構居るだろ。

http://www.cliki.net/xearth

まぁ、928 よ。C/C++ ほどメジャーではないのは常識だぞ?
>>927

以前に試したのですが、googleだと"("が無視されてしまうので"system"という単語が
検索されてしまってうまくいかなかったです。
gclのInfo内も検索してみたのですがひっかかりませんでした。

あとgclにはhelp機能があって「(help '関数名)」とかやると
その関数の説明を表示してくれるのですが、
それでもダメですね。

gclってLisp処理系としてはあまり良くないのでしょうか?
CLOSも実装されてないみたいだし、ドキュメントも書きかけの
項目が多いし・・・

こりゃもうcmuclかclispに乗り変えるしかないですかね。
>>934
括弧は伊達じゃない事に気づくのにどれくらいかかった?
漏れは lisper の開発風景を実際に見るまで、括弧ウザーと思ってたよ。
>>936 gclにこだわる理由が何かあるのなら、子孫である EcoLisp(ECL-Spain)
なんかどう?
939938:03/11/21 13:47
> ECL-Spain, a member of the KCL Family, is a Common Lisp implementation forked from ECL.
> Since 2001 the source code of ECL-Spain becomes the official branch of the family,
> acquiring the name ECL and superseding the out-of-date implementation ECoLisp.
ということみたいだね。
ちなみに、ちょっと前のことだけど、CLOSみたいなのも付いてたよ。
GNU Info形式の英語で書かれたマニュアル付きでした。
>>933
> アメリカの話しか聞いたことないよね。ヨーロッパとかアジアではどうなんだろ?
Lispを使う側じゃなくて、作る側の人だけど、GNU Clisp はドイツ人が開発しているでしょ。
clispのソースを読もうと思ったけど、コメントにドイツ語が結構あってめげました。
アメリカでも AI winter の影響で「Lisp」という単語がトラウマになっている
人がいると聞いたことがあるよ。

Franz社が「Lisp」という言葉を前面に出したがらないなんて噂も聞いたことあるし。
今はどうかしらないけど。
>>941
たぶん,その Franz の噂ってのは Paul Graham の Being Popular ネタだろうな.
http://www.franz.com/about/bios/fkunze.lhtml とかの話だろう.CLOS は出てくる
けど,Lisp という単語が出てこない.でも Franz 社のページにはしっかり今も昔も
CLOS, Common Lisp という単語が出てくるよ.
>>937
Lisperの開発風景を見て何を思ったの?
暇があるときにLispに関わりのある、または、あった人のページをgoogleって
遊んでいます。以下の人は割りと有名だと思いますが、その他の人で面白そうな
人がいれば教えて下さい。

古株:竹内郁雄、和田英一、萩谷昌己、湯浅太一
敬称略
>>943
それまで俺は、いちいち対応する括弧を入力してから中を書いていた。つーかそーゆうもんだと思ってた。
C とかで {} 対応させてから中書いてたから。で、ある日 Emacs スレで
http://pc.2ch.net/test/read.cgi/unix/1066719492/16
を見かけて lipser に操作画面を見せてもらったわけだ。S 式単位の編集を見て、な
るほど、括弧はただの無駄ではなかったんかと思い至ったわけ。

開発環境もおどろいたなぁ。コンパイラの警告やエラーの位置にソース上で下線が引
かれて、カーソルを合せると警告内容が表示されたりとか。漏れは C++ 派だったし、
警告なんて行数とファイル名くらいだと思ってたからビクーリした。
>>944
中西正和、黒川利明、川合史朗
あまり思いつかん・・・。

>>945
(define ... (let ... (cond ... (else ...
ってあったら括弧入れるごとに
else,cond,let,define
よし全部閉じた。
ってやるもんじゃないの?
>>945
>開発環境もおどろいたなぁ。コンパイラの警告やエラーの位置にソース上で下線が引
>かれて、カーソルを合せると警告内容が表示されたりとか。-snip-

これって、Emacs上での開発環境だよね?
聞いた話だけど、Symbolics なんかの Lisp machine 上での開発は、
もっとずっとすごかったらしいです。どうすごいのかは、comp.lang.lisp
でたまーに話題になったりします。

とは言うものの、C, C++, Java なんかの統合開発環境(IDE)も最近はいい線
いっているという話もありますな。
948943:03/11/21 16:24
>>945
なんだそんなことか…
>>948 初心者にとっては、そんなことがLispを始めるときの第一関門になると思う。
>>947
はい。Emacs でした。警告内容も「引数が VECTOR で SIMPLE-ARRAY じゃないから配
列アクセスの最適化ができねーYO!!」といった最適化のヒントと「未定義の変数 Y
ってなんだYO!!」といった警告とでは下線の色が違ってて見やすかった。
VisualStudio にもあーゆうのが欲しいなぁ。

Lisp マシンですか。やっぱ開発環境も凄かったのかなぁ。

>>948
妙な期待をさせてしまったようで申しわけないです。
schemeを理解しよーとして、脳内でCに変換中。
空リストはNULL、nilは(他のLISPとちがい)単なるシンボルとして扱ってよいのかしら?
nilなんてない。
Cに展開しようとする辺り、まだ思考回路がこっち側にスイッチしてなさげ。
そのうちScheme/Lisp自身で考えられるようになれるようがんがれ。
954951:03/11/21 20:30
説明読んでていきなりnilとか書いてあったんで、面食らってるところなんですー(;_;)
シンボルnilがソースリスト中に現れたら、
schemeでは特別な意味を持たないが、
他のLISPでは特別な意味を持つでよいのかしら。

>>953
へい、がんがりまし。
awkで書かれたわずか500行のLispインタプリタ
awklispを読めばLispが理解できる
ttp://www.accesscom.com/~darius/




かも?
957955:03/11/21 22:07
>>956
955は>>951の「schemeを理解しよーとして、脳内でCに変換中。」に対するレスです。
コードを脳内でCに置き換えるよりも、脳内にインタプリタを内蔵してしまうほうが早いので。
scheme で
つい (setq a nil)
(if a hoge)
とかやって失敗する。
>>954
>schemeでは特別な意味を持たないが、
>他のLISPでは特別な意味を持つでよいのかしら。

Common Lisp と Emacs Lisp では、空リスト ()とシンボル NILは
Lispのオブジェクトとしては同一。(eq '() 'nil) => t
そして真偽値における偽値として使用される。
(if '() '1 '2) => 2
(if 'nil '1 '2) => 2
nilも()も(って同一物だが)は評価(evaluate)すると自分自身になる。
nil => nil

Schemeでは偽値として#fを使う。
(if '() '1 '2) => 1
(if 'NIL '1 '2) => 1
960959:03/11/22 14:34
しまった... NIL と nil を混ぜて使ってしまった。
961スレ違い:03/11/22 16:59
1ch.tv のLisp/Schemeスレはさびれているな。
というか1ch.tvって商売としてなりたっているのか?
そもそも1ch.tvというのが何なのかさえわかりませんが(w

ところでそろそろ新スレじゃないですかね。
Lisp歴は多少あるのですが、2ちゃんねるは初心者の者です。
新スレへの移行にあたって何か協力できることは無いかなと思っているんですが、
そこらへんの勉強をするための情報はどこにありますか?

とりあえず、新スレが立ち上がったら参考文献なんかの情報を補充したいと
思っています。
>>963
次のスレ立ては藻前に任せる。ガンガレよ。
966デフォルトの名無しさん:03/11/23 22:22
Lispのことはよく知らないオレに「マスターしたときの素晴らしい悟り」
というのを簡単に教えていただけませんか?

それと
http://www.shiro.dreamhost.com/scheme/trans/beating-the-averages-j.html
「LispのプログラムコードはLispのデータオブジェクトから出来ている。
それは、ソースコードは文字列で出来ていて、文字列は言語でサポートされている、
というようなつまらない意味じゃない。」
というのは、他のインタプリタのevalとは違うんでしょうか。

現在はjavaとかrubyあたりやってりゃいいかなと思ってるんですが
素晴らしい悟りが本当にあるならLispにチャレンジしようと思ってます。
マスターしないと教えてもわかんないよ。ガンガレよ。
>>966
そういう姿勢でいる限りおまいは何も得ることはできない
963じゃないけど立てました

次スレ

LISP Scheme Part9
http://pc2.2ch.net/test/read.cgi/tech/1069594582/
LISPのevalは単なるリスト処理なわけよ。
evalから見たら、いきなりリスト化された構文木が手元にあると思っていい。
後は意味解析して評価するだけの状態。
他の言語のevalだとまず見えないし、触れない。
>>969
>12 笑た。
それって単に人間プロセッサで構文木を作ってるだけじゃないの?
だとしたら人間にとって自然じゃないことをやってるから非効率だと思うが?
>>973 マクロで構文は人間向けに調整されている。反復系の構文も
マクロ展開すると条件分岐と goto になるが、書く人間は意識しないしな。
for(int i=0; i<10; i++) { ... }
(dotimes (i 10) ...)
を見て、下のほうが人間にとって自然じゃなくて非効率だと思うなら仕方が無いが。
大袈裟に「人間プロセッサ」って言う程頭使う様に見えるのか。
C言語 f()
LISP (f)
これだけの違い。
>>973
それ言ったら、他の言語を習得することも人間プロセッサって言わないか?
guile で define-syntax が通らん…
>>977
いや普段前置記法で思考してないから

中置記法の数式を Lisp の数式に置き換えるのに手間取る
>>966
まずreadで読み込んでLispで簡単に扱えるデータにしてる。
で、いじくるなりなんなりしてevalで評価してもらう。

こうするとevalではreadがやってくれるから文字列の解釈も必要なく
データの操作に専念できる。

データ自体を単純にするとデータの操作も簡単なもので十分になる。
仮にデータの操作が基本五関数の組み合わせで全てできるものとする。
この組み合わせを表現するプログラミング言語ができて
データからデータに変換をしてくれる。

入力データ -> プログラム -> 出力データ

このプログラミング言語をデータに変換できたとすると
入力データとプログラムをデータにしたものを入力に受け取って
出力データを返してくれるプログラムがあればよい。

[入力データ+プログラム] -> プログラム -> 出力データ

このプログラムもデータからデータの変換にすぎないので、
プログラミング言語の中でつくることができる。
これが万能関数evalである。

悟れた?
例えば

x = ( -b + sqrt( b * b - 4 * a * c ) ) / ( 2 * a )

みたいな数式を S 式に置き換えるのにこのスレの人はどれくらい掛かるの?
982981:03/11/23 23:52
作業用の変数にバインディングするのは OK という条件で
(setf x (/ (+ (- b) (sqrt (- (* b b) (* 4 a c)))) (* 2 a)))
にってこと?頭っから一発で書き下せるが…。確かに昔はめんどくさかったかも。
まぁ、中置記法リーダーマクロで
#$[x = ( -b + sqrt( b * b - 4 * a * c ) ) / ( 2 * a )]
ならコピペでもオッケーだがな。
>>981
普通に式を書き下すだけの時間しかかからんが?
よくわからんがこうして欲しいのか?
(set! x (/ (+ (- b) (sqrt (- (* b b) (* 4 a c)))) (* 2 a)))
986981:03/11/24 00:13
実際に計ってみたら
がんばったのに30秒も掛かった…
987デフォルトの名無しさん:03/11/24 02:18
まあまあ
単に慣れの問題だよ。
>>978 define-syntax は (use-modules ((ice-9 syncase))) すると使えるよ。
>>938
さっきECL入れてみたんですけど、非常に良い感じです。

938はん・・・なんちゅう処理系を教えてくれたんや・・・
>>987
義務教育で前置記法を標準にすれば、いいのにな
SBCL 凄い事になってるね。コンパイラと思えぬサポートプラットフォーム数だ。
http://sbcl.sourceforge.net/
>>990
(・∀・)イイ!! もう順番に悩まなくていいんだ.
カッコの種類にうるさい奴らも一掃.
>>988
ありがとうございます
通りました
>>990
後置記法ならともかく前置記法では頭の中で演算子スタックが必要になるのでは?
>>992
複雑に括弧のついた Lisp プログラムをエディタの支援なしで読めるの?
適切なインデントくらいはしていてもいいけど
>>994
+ を2項演算子として
前置記法
+ + + + + + + + 1 2 3 4 5 6 7 8 9
後置記法
1 2 3 4 5 6 7 8 9 + + + + + + + +
1000
999
998
>>996
嘘をつけ
交換則が成り立つから同じに見えるだけだろ
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。