【入門】Common Lisp ..
[2ch|▼Menu]
657:656
07/10/10 18:03:34
お金払ったのに、いつまでたってもソフトウェアダウンロードの案内がこない
(ストアのアカウント作成の案内も)と思っていたら、
URLリンク(help.yahoo.co.jp)
マジカよ。アリエネェだろ。
フリーメールで登録するんじゃなかった。
日本のFranzに問い合わせても大丈夫かな。


658:デフォルトの名無しさん
07/10/10 19:52:34
(defun sigma (x &optional (y 0))
(if (null x) y
(sigma (cdr x) (+ (car x) y))))

再起にしたらこんな幹事?

659:デフォルトの名無しさん
07/10/10 21:01:45
末尾再帰って指示ないなら出題者はこっちを意図してるかも

(defun Σ (list) (if list (+ (car list) (Σ (cdr list))) 0))

660:デフォルトの名無しさん
07/10/10 21:04:16
>>654でまずい理由でもあるの?
>>658-659はΣでもなんでもなく、+の再定義でしかない

661:デフォルトの名無しさん
07/10/10 21:33:34
>>660
拡張しにくい。範囲の制限や関数 f を適用した結果を集めたいときに、関数ならパラメータを追加することで対応できる。
というかそっちの方向に進むと思われるので、(apply #'+ ...) じゃなくて普通は自前で実装するところからはじめるんだろう。

662:デフォルトの名無しさん
07/10/10 22:19:46
sbclのコンパイルについて教えてください・・・。
動作環境はWin XP, sbcl Ver.1.0.9です。

URLリンク(fridge-shell.blogspot.com)
このHPと同じように操作すると、outファイルができるので、
これをout.exeにリネームしてコマンドプロンプトで実行すると
応答がかえってこずに固まってしまいます。

このスレで、sbclでコンパイルした実行ファイルはサイズが大きい(10MB?)
というレスをみましたが、outファイルは2kBしかありません。

ネイティブコンパイルする手順がWin版とLinux版では異なるのでしょうか・・・


663:デフォルトの名無しさん
07/10/10 22:34:35
>>662
SBCL Windows 版はまだ誰もが使えるような状況ではありません。
試験的なリリースですので問題を自力で解決できる人向けのものです。
Windows 版自体がまだ実験的なものですので、EXE の生成機能は非サポートです。

「ネイティブコンパイルする」 == 「.exe を生成する」というのは Lisp の世界においては成立しません。
.exe を生成するのは「スタンドアロンなバイナリ/実行形式を生成する」と呼ばれる機能です。
ネイティブコードの生成自体はもっと簡単です。プロンプトで (compile nil (lambda (x y) (+ x y))) と打つだけで
コンパイラはネイティブコードを生成できます。

664:662
07/10/10 22:46:09
>>663
ご回答ありがとうございます。

Win版はexeの生成は非サポートだったのですね・・・。
こういう時だけlinuxが羨ましくなります。 orz

いろいろと勉強になりました。
ありがとうございました。


665:デフォルトの名無しさん
07/10/10 23:00:41
ついでに言っておくと、Lisp の世界ではスタンドアロンバイナリ生成を使う機会はほとんどない。
なぜなら、Lisp の世界ではアプケーションはユーザーが触って変更できる「システム」である事が多いから。
Emacs や Maxima や Aximo などはユーザーがプログラムを投入するたびに .exe を生成したりしない。
ベースの機能にユーザーによる拡張をインクリメンタルに追加しながら増えていくんだ。
この辺が感覚的に合わないなら Scheme のほうがいいかもしれない。

# LispWorks や AllegroCL、CormanCL のような商用の話や、GCL, ECL, といった GCC をバックエンドに使う連中とかはまた別

666:デフォルトの名無しさん
07/10/11 01:40:48
>>665
「Schemeのほうがいい」理由がよくわからん。
単にスタンドアロンバイナリをスマート作れない処理系が多いというだけでは?

667:デフォルトの名無しさん
07/10/11 02:19:03
サイズはでかいけどwinのsbclでsave-lisp-and-dieは
結構まともに動いているように思う。

一般的でないのはlispで配布するという機会が見ている分にすくないだけで
exe作るのって他所の言語と比べて難しいとは全く思わないのだけれど。

lispで作られて配布されている有名なソフトってあります?



668:デフォルトの名無しさん
07/10/11 08:05:42
>>662
sb-executable って、もうほとんどサポートされてないよ。
save-lisp-and-die の :executable に置換済み。

>>667 が言ってるように、save-lisp-and-die は Win32 でもちゃんと動く。

C:\>sbcl
This is SBCL 1.0.9, an implementation of ANSI Common Lisp.
<snip>
This is experimental prerelease support for the Windows platform: use
at your own risk. "Your Kitten of Death awaits!"
* (defun main () (print "Hello, SBCL!") (quit))

MAIN
* (save-lisp-and-die "hello.exe" :toplevel #'main :executable t)
[undoing binding stack and other enclosing state... done]
[saving current Lisp image into C:\\hello.exe:
writing 1960 bytes from the read-only space at 0x02000000
writing 1640 bytes from the static space at 0x02100000
writing 22888448 bytes from the dynamic space at 0x09000000
done]

C:\>hello

This is experimental prerelease support for the Windows platform: use
at your own risk. "Your Kitten of Death awaits!"

"Hello, SBCL!"


669:デフォルトの名無しさん
07/10/11 08:12:26
便乗質問させてもらうけど

1. ネイティブコンパイラがある(コンパイルした結果が速い)
2. 実行可能形式(EXEやDLL)が作れる
3. マルチスレッドアプリが書ける。
4. (基本的な)CLOS(オブジェクト指向)機能のサポート
5. ソケットインターフェースのサポート
6. 作成したアブリを配布する際のライセンス料が安い、もしくは無料

これらの条件を全て満たすフリー
もしくは比較的安価な商用Lisp処理系と言ったら
やっぱりCorman Lispが一番かな?
ブラットフォームはWindowsが前提です。

670:デフォルトの名無しさん
07/10/11 09:41:35
Windows ってだけでフリーの実装はほぼ全滅だからね
Lisp で遊ぶなら UNIX

671:デフォルトの名無しさん
07/10/11 12:25:35
>>669
比較的安価ってだけでLispWorksがそれに該当するんじゃない?
(対象がACLだから安く感じるだけかもしれんが)


672:デフォルトの名無しさん
07/10/11 13:23:22
商用だとTorrentはまずいかな。

673:デフォルトの名無しさん
07/10/11 13:46:22
Windowsにポーティング中のSBCLはGCのバグまだ残ってるみたいね。
やる気ないにしても、POSIX以外だとそんなに移植が困難な実装なのかな?
それともWindowsで動かせちゃダメみたいな変な勢力が邪魔してるとか。

674:デフォルトの名無しさん
07/10/11 18:28:42
>>666
「スマート」の意味がわからん。スタンドアロンバイナリにスマートとそうじゃないものがあるの?
CLISP, SBCL, GCL, ECL, ACL, LispWorks, CormanLisp... スタンドアロンバイナリを生成できないのって ABCL くらいじゃないか。
>>668
SBCL for Win32 系で「ちゃんと動く」とかは言わないほうがいいと思うんだよなー。
use at your own risk なんで初心者に進めると混乱の元じゃないか。
>>669
ECL も忘れないでやってください。
>>673
単に開発者がいないだけ。

675:デフォルトの名無しさん
07/10/12 01:45:55
俺は OpenMCL をいつか弄りたいと思ってる。スレッド廻りきちんとしてそうだし、フットプリント小さいし。

676:デフォルトの名無しさん
07/10/12 08:42:10
OS7でMCL使ってたけどあの環境良かったなあ。

677:デフォルトの名無しさん
07/10/12 20:55:25
2ch発のLisp処理系作ろうぜ

678:デフォルトの名無しさん
07/10/12 21:17:50
>>677
よし、yacc と PHPで作ろう。


679:デフォルトの名無しさん
07/10/12 21:34:48
どうせならPHPのみで

↓まかせた

680:デフォルトの名無しさん
07/10/12 21:56:21
>>676 どんな感じだったの?紹介してくれよ。

681:デフォルトの名無しさん
07/10/12 21:59:26
LISP作るのにyaccはどう考えても出番が無いだろ

682:デフォルトの名無しさん
07/10/12 22:07:40
>>681
リーダーマクロとかあるからあった方がよくね?>>yacc
勿論Common Lispをフル実装するんだよ。


683:デフォルトの名無しさん
07/10/12 22:11:18
yaccで作ったんじゃ動的なリーダマクロにならないじゃん

684:デフォルトの名無しさん
07/10/12 22:19:27
本スレでやってくれ。

685:デフォルトの名無しさん
07/10/12 23:31:06
どうせ作るならCommonLISP上位互換にしてください。
このスレではCommonLISPの仕様を満たしてないと
LISPとは認めませんので。

686:デフォルトの名無しさん
07/10/12 23:33:15
荒しうぜぇ……

687:デフォルトの名無しさん
07/10/12 23:55:52
自分の気に入らないもの=荒し

やれやれ・・

688:デフォルトの名無しさん
07/10/13 00:29:21
確かに、やれやれとしか言い様のない妄想等式だね。

689:デフォルトの名無しさん
07/10/13 00:42:28
言語の実装が入門スレにふさわしいわけかね。まぁ本スレへの誘導も無視してるし、荒しだと思っとくよ。

690:デフォルトの名無しさん
07/10/13 01:36:29
>>677がここで話振ったんだから奴に任せようぜ

691:デフォルトの名無しさん
07/10/13 03:21:45
処理系作るってのも立派な入門内容だと思うけどなあ。特にLispの場合は。
動作原理知るために1度は通るでしょ。
>>677の枕詞にCommonLispでもあれば納得したわけ?
つーかこの程度で荒らし認定かよ。
どうせ特定の一人だろうけど、きもすぎるわ。

692:デフォルトの名無しさん
07/10/13 07:39:45
まぁやるのはいいと思うよ。俺は興味ないけどさ。
具体的な作業をはじめるか、本スレに移動すりゃ文句いわれないんじゃない?

693:デフォルトの名無しさん
07/10/13 12:40:25
荒らしというほど荒らされてるようにも見えないしなあ。
ぐだぐだ言ってんのは約一名だろうね。

694:デフォルトの名無しさん
07/10/13 13:56:05
>685が煽りっぽい言葉を書いてるのは確かだろ。
「Common Lisp上位互換」なんて洒落にもならん事を。

>686が「荒らし」と言ってるのはその事だけだろ。

695:デフォルトの名無しさん
07/10/13 14:18:24
>>686が誰を指して言ったかなんて本人にしかわかんと思うぞ
本人乙

696:694
07/10/13 17:26:36
>695
俺は >686本人じゃないけど勝手に自分達が非難されてると解釈して
感情的に反応するより遥かにマシだろ?

697:デフォルトの名無しさん
07/10/13 17:41:36
>>695
> わかんと思う
どういう意味ですか?

698:デフォルトの名無しさん
07/10/13 19:37:16
和姦と思う

699:デフォルトの名無しさん
07/10/14 20:50:25
どうも、誰か一人が自分を攻撃しているというふうに捉えているようだね・・・
どうせならなにか生産的な話題を振って荒しじゃない事を行動で示せばいいのに。
結局 >>686 が正しかったのかね。

700:デフォルトの名無しさん
07/10/14 22:06:45
2ch発のCommonLisp処理系作ろうぜ

701:デフォルトの名無しさん
07/10/14 22:59:06
成功したプロジェクトが実は 2ch 発だったってことはよくあるけど、
最初から 2ch 発でって言ってて成功したためしはほとんどないんだよね。

702:デフォルトの名無しさん
07/10/14 23:22:31
そもそも2ch発なんて名ばかりで実質匿名の個人作業公開オナニーだろ

703:デフォルトの名無しさん
07/10/14 23:43:58
「2ch発」という言葉にどんな定義を見出しているのかがわからんレスだな。

急に中二病による発作に見舞われて、いつもよりちょっと大きめの打鍵音を立てて
ケツに「公開オナニー」って書き加えた辺りの心の動きだけは、容易に理解できるけど。

704:デフォルトの名無しさん
07/10/15 05:26:32
出たよ定義厨

705:デフォルトの名無しさん
07/10/15 11:45:40
とりあえず厨をつけてみたのはわかった。
もうちょっとうまく展開できてたら、苦し紛れがバレなくて済んだかも。

706:デフォルトの名無しさん
07/10/15 19:48:07
オナニー禁止なんてお前らプロテスタントかっつーのwwww

707:デフォルトの名無しさん
07/10/15 20:25:09
誰かが俺を攻撃してる!→ファッビョーン→荒れまくり
というのは、以前に本スレでも似たような流れがあったよねぇ……。

ちょっと前に宿題聞いてた人たちは、結局自力で解けたの?

708:デフォルトの名無しさん
07/10/15 23:06:48
(a (b) c (d (e)) f)

こういうリストがあったとしてeを削除したいんですがどうやったら取り出すことができますか?
関数定義したいんですが。
first secondなどで取り出してるんですがうまくいきません。
アドバイスありましたらよろしくお願いします

709:デフォルトの名無しさん
07/10/15 23:07:50
>>707
まだ解けないです!

710:デフォルトの名無しさん
07/10/15 23:29:01
>>708
ほしい結果はこれ?
(a (b) c (d ()) f)

711:デフォルトの名無しさん
07/10/15 23:48:27
>>708
listっていってもconsセルの集まりなんだから絵を描いて整理してみれば。

712:デフォルトの名無しさん
07/10/16 09:33:47
まずは簡略化した問題の解を得て、それを元に改良していけばいい。
708ならまずはネストしていないリスト(a b c d e f)からeを除く関数を実装する
あたりから始める。
(目的は近似解を得ることなので、deleteとか使わず自分でやる)

713:デフォルトの名無しさん
07/10/16 13:20:35
>>710
>>711
>>712
レスd
再帰で何とかできました。


714:デフォルトの名無しさん
07/10/16 14:27:07
どうやって出来たか教えてー

715:デフォルトの名無しさん
07/10/16 23:13:07
すいません。質問させてください。
中置演算子で書いた簡単な計算式を解析して実行するプログラムを書こうと思うのですが、
'( 1 + 1 ) ってリストを作って、演算子を取り出しても計算できません。
リストから関数は取り出せないのでしょうか。

(begin
 (define calculate
  (lambda (l)
   ( ((car (cdr l)) (car l) (car (cdr (cdr l)))))))
 (calculate '(1 + 1)))


716:デフォルトの名無しさん
07/10/16 23:19:42
マクロにするか演算子の値で分岐しないといけないような。
シンボルを識別子とみなして値を取り出すって Scheme でできたっけ?

717:デフォルトの名無しさん
07/10/16 23:25:04
evalが使えるはず

718:デフォルトの名無しさん
07/10/16 23:29:54
eval使うまでもなく
(define op-alist `((+ ,+)(- ,-) ...))
みたいなの作っとけば
((cadr (assq (cadr infix) op-alist)) (car infix) (caddr infix))
で呼べるでしょ

719:デフォルトの名無しさん
07/10/16 23:35:00
CLの人: (funcall イイ。(( は構文と見た目が区別できんからイクナイ。

CL-USER> (defun calculate (lst)
(funcall (second lst) (first lst) (third lst)))
CALCULATE
CL-USER> (calculate '(1 + 1))
2

Schemeの人: (funcall ウザイ。 (( ってかいて括弧の数を数えたい。

720:デフォルトの名無しさん
07/10/16 23:36:45
やはりschemerの方が知能が上みたいですね。
CommonLispは小手先だけ器用になりそなイメージです。

721:デフォルトの名無しさん
07/10/16 23:48:11
i < おまえより知能の高い酸のブロッブを知っているぞ

722:デフォルトの名無しさん
07/10/16 23:51:27
>>719
毎回比較したがるクセは直したほうがいいね

723:デフォルトの名無しさん
07/10/17 00:10:10
関数定義が
(define hogehgoe
(lambda (x) ...)
ってのがムカツク。引数の数がちょっと見ではわかりづらい。
しかし、(define (hogehoge x) ...)ってのはなんとなく呼び出した結果を定義してるみたいで嫌だ。

(defun hogehoge (x) ...
は良い。hogehoge っていう(関数)シンボルを定義してるんだなーって感じがしてわかりやすい。


724:715
07/10/17 00:27:32
回答していただいてありがとうございます。
リストは基本的なデータ型しか入れられないんですね。
だから関数を入れると型が不明のシンボルとして扱われてしまうと。
勉強になりました。ありがとうございます。

725:デフォルトの名無しさん
07/10/17 00:49:47
>>724
なんかちょっと誤解してるみたいだけど、まあそれはおいといて、
schemeでわかんなくなったら本スレの方においで。
このスレの住人はschemeコンプレックス発動で
それどころじゃないみたいだし。


726:デフォルトの名無しさん
07/10/17 00:50:29
common lispで
gauche の util.math みたいなのありませんか?
無くても自分で作るんですが。
arnesiのmatcherが惜しい。


727:デフォルトの名無しさん
07/10/17 00:57:43
質問の仕方がなってないな
gaucheのutil.mathとやらが何を提供してるのかまず書け


728:デフォルトの名無しさん
07/10/17 01:52:07
どっちが上とか、コンプレックスなんて持ってるのは初学者だけだよ。
ある程度やってる人は、Common Lisp も Scheme わかってる。
どの言語が上とか下とかじゃなくて、用途によって使い分けてるだけ。

729:デフォルトの名無しさん
07/10/17 01:59:05
>>723
コード中で(func args)っていう呼び出しを思いついたら、
そのまま(func args)をコピってきて(define (func args) 〜)とできるから
むしろ便利だと思うけどな。そもそも構文唐なわけだし。
defunは括弧の位置を修正しなきゃいけない。

730:デフォルトの名無しさん
07/10/17 02:19:14
>>727
申し訳ない。
ML likeなパターンマッチライブラリで・・・と
clikiに似たのがあったので終了します。
ググっても無くググ子っても見付からないのでつい聞いてしまった。(code search)

731:デフォルトの名無しさん
07/10/17 10:27:00
>>716
715では無いが>>715をマクロでやろうとするとどうなるんだ?

732:デフォルトの名無しさん
07/10/17 13:08:09
(defun keisan1 (l)
(list (second l)
(first l)
(third l)))

(defmacro keisan (l)
(keisan1 (second l)))

(keisan '(1 + 1))

733:デフォルトの名無しさん
07/10/17 21:27:18
(defmacro m (lst)
`(,(second lst) ,(first lst) ,(third lst)))

(m (1 + 2))
=> 3


734:デフォルトの名無しさん
07/10/18 00:29:10
WINのGCLで一文字入力を待つのはどうやるのでしょうか
CLISPだとread-charでなんとなくできてしまうのですが
GCLだと待ってくれません。



735:デフォルトの名無しさん
07/10/18 06:38:01
(dotimes (x 10) (progn (princ "hello") (sleep 1) ))
などとやって1秒ごとに表示させたい場合GCLではどうやれば
いいのでしょう。CLISPだとできるのですが
GCLだと10秒後にまとめて表示されてしまうのでうまくいきません。



736:デフォルトの名無しさん
07/10/18 07:08:21
バッファをフラッシュしなさい。
force-output。

737:デフォルトの名無しさん
07/10/18 10:45:26
ありがとうございます。
1秒ごとにちゃんと止まりました。

(dotimes (x 10) (progn (princ "hello") (read-char) ))
みたいなことはできないのでしょうか。一個表示するたびに
ユーザがなにかキーを押すまで待たせたいのですが、
LISP的には普通どうやるのでしょうか。
prognはLISP的にはよろしくないのでandをつかえ、と
本に書いてありましたが、
ということはLISPは逐次処理はタブーなのでしょうか・・・?



738:デフォルトの名無しさん
07/10/18 14:11:17
>>737
> prognはLISP的にはよろしくない
なんでよくないの?

739:デフォルトの名無しさん
07/10/18 15:43:18
>>737
Common Lisp で文字単位の入力を行う互換性のある方法は無いので、
今のところは read-line を使って Enter 入力待ちで妥協しておくのがいいよ。

ところで今更なぜ GCL?

740:デフォルトの名無しさん
07/10/18 15:56:13
andにするべきだそうです。

741:デフォルトの名無しさん
07/10/18 15:58:14
WINだとマルチバイトのファイル名と(SYSTEM)がつかえるのが便利ですね


742:デフォルトの名無しさん
07/10/19 23:23:50
GCLって今更な処理系なんですか?


743:デフォルトの名無しさん
07/10/20 00:43:51
うんそうだね

744:デフォルトの名無しさん
07/10/20 10:46:00
今年の7月まではcommitが続けられてたし、今更って言う程終了したプロジェクトでもないぞ。
確かにこのまま停滞が続く可能性は否定できないが。

745:デフォルトの名無しさん
07/10/20 12:05:13
LISP作ってる人ってなんだか
Windowsではあきらかにやる気ないですよね。


746:デフォルトの名無しさん
07/10/20 13:01:21
Lisp に限った事じゃ無いと思うけど。

747:デフォルトの名無しさん
07/10/20 13:57:03
切ないですね。


748:デフォルトの名無しさん
07/10/20 14:37:22
Windowsみたいな処理系でやる気を出せというのが難しい。
まずはUNIX処理系で形にしておいて、それをWin用にポーティングするのが常に賢い。

Microsoftは答えじゃない。Microsoftは質問だ。そして、答えはNOだ。 -- Erik Naggum

749:デフォルトの名無しさん
07/10/20 17:31:59
OSを処理系と呼ぶ人も珍しいね。

750:デフォルトの名無しさん
07/10/20 17:46:03
>>745
逆。Windows の人たちが Lisp に興味ないんだよ。

ほとんどの Lisp 処理系の開発者は仕事でやってるわけじゃないので
他のプラットフォームへの移植までは難しい。
Windows プログラマから貢献がないとどうにもならないわけ。

自分の例で恐縮だが、俺程度でも SBCL の開発に手を出したら
FreeBSD での問題はずいぶん減ったし、thread や amd64 も
動くようになった。

どこの処理系も人材難だから、Windows プログラマが一人参加
するだけでも状況はずいぶん変わるはずだよ。使いたい処理系が
Windows でうまく動かないって思ってる人は、その処理系のソースを
眺めてみたら?

751:デフォルトの名無しさん
07/10/20 19:50:18
Unix系でちゃんと動いてる処理系が多いのは、それが簡単だから。
Win32でちゃんと動かすってのは結構大変なんだよ。設計がぐちゃぐちゃだから。
いっそのこと .NET CLR 用に作るとか考えるほうが建設的な気がするな。

752:デフォルトの名無しさん
07/10/20 20:09:46
>>750=旧よろずやの中の人

753:デフォルトの名無しさん
07/10/20 20:14:50
>>750
FreeBSD ユーザーな Lisper の一人としてあんたには感謝しているぜ!
SBCL のスレッドに釣られて Linux に走る Lisp 仲間は多かったからな。


754:デフォルトの名無しさん
07/10/20 20:18:36
>>752
>>750 は SBCL だろ? よろずやの人は CLISP じゃなかったっけ。


755:デフォルトの名無しさん
07/10/20 20:55:29
>>754
よろずやの人はcmucl -> sbclメイン他いろいろ
です....って何かストーカーみたいだなw

756:デフォルトの名無しさん
07/10/20 22:15:31
>>744
つうか数人のデベロッパしかないLisp系プロジェクトでは数ヶ月〜数年commitがないなんて良くあること。
基本的にLispのみで喰えてる人はいないんで、みんな余暇にしか作業しないからな。
先にRubyとかを見ていると止っているように見えるのかもね。

>>755
754はデベロッパーとしての話なんじゃないか。

757:デフォルトの名無しさん
07/10/21 00:11:05
まあGCLはいろいろあったからね

758:デフォルトの名無しさん
07/10/21 01:00:01
って何?

759:デフォルトの名無しさん
07/10/21 01:22:30
確かメインの開発者が事故で亡くなられた。

760:デフォルトの名無しさん
07/10/21 01:28:23
GCLってGNU Common Lisp?

761:デフォルトの名無しさん
07/10/21 01:45:23
(質問は)そっちかよ…

762:デフォルトの名無しさん
07/10/21 02:07:02
>>759
>亡くなられた
偉いなw
俺だったら"逝っちゃった"とか平気で書きそうな気がorz

763:デフォルトの名無しさん
07/10/21 15:33:05
KCL な神たちはかかわってないの? GCL になってからは

764:デフォルトの名無しさん
07/10/21 16:08:11
かかわってない

765:デフォルトの名無しさん
07/10/21 16:11:49
LISPってリアルタイムの制御とかには使えるんですか。


766:デフォルトの名無しさん
07/10/21 16:47:41
ゲームとかロボットで使ってる例はあるけど
GC とメモリフットプリントの問題を何とか
しなくてはいけない

767:デフォルトの名無しさん
07/10/21 18:28:20
ロケットか衛星の制御に使ってて宇宙空間にあるのを地上からデバッグした
という話がどっかにあった。

768:デフォルトの名無しさん
07/10/22 00:36:44
なんでもLispなんだよ
あっちに見えてる掃除用ロボットだってそうだよ
再帰できたらやりてえんだよ
おれ人工知能が書けるほどハッカーになれねえかな
計算機科学の巨人だよ
でもそうなったら自分で作った知能とやっちゃうかもしれねえな
機械だって色っぽいよお


769:デフォルトの名無しさん
07/10/22 18:30:51
リストをシャッフルする以下のような関数を書いてみたんですけど、コンスがあったりしてあんまり上手くないと……
他に上手い書き方ってないでしょうか?

(defun shuffle (lst)
(labels ((shffl (lst acc)
(if (null lst)
acc
(let ((*random-state* (make-random-state t))
(len (length lst)))
(let ((rand (random len)))
(let ((nthrand (nth rand lst)))
(shffl (remove nthrand lst :count 1) (cons nthrand acc))))))))
(shffl lst nil)))

770:デフォルトの名無しさん
07/10/22 22:49:39
>>769
破壊的にやってみた

(defun shuffle (list)
  (let ((st (make-random-state t))
        (len (length list)))
    (dotimes (i len list)
      (rotatef (car (nthcdr (random len st) list))
               (car (nthcdr (random len st) list))))))

771:デフォルトの名無しさん
07/10/23 20:25:05
ありがとうございます。参考にします。

772:デフォルトの名無しさん
07/10/25 22:56:58
8パズルを盲目的探索、深さ優先探索、幅優先探索を用いて解け

盲目的探索
初期状態#(8 3 1 0 4 7 6 5 2)
深さ優先探索
初期状態#(0 8 1 4 3 7 6 5 2)
幅優先探索
初期状態#(4 8 1 0 3 7 6 5 2)
この3つの目標状態は#(1 2 3 4 5 6 7 8 0)とする
実行フォームは(time...)で囲むこと

この問題が全くわかりません。。。どなたかお願いします

773:デフォルトの名無しさん
07/10/25 23:35:20
SBCLに組み込まれている関数のリファレンスとかありませんか?

あと、現在定義されている変数の一覧とか確認できると便利なんですが・・・
→トップレベルで (setf xxx 111)で定義したxxxの一覧とか


774:デフォルトの名無しさん
07/10/25 23:57:23
HyperSpec

775:773
07/10/25 23:58:15
自己レスだが、リファレンス見つけた
全部英語だが・・・ orz

URLリンク(www.cs.cmu.edu)

>あと、現在定義されている変数の一覧とか確認できると便利なんですが・・・
>→トップレベルで (setf xxx 111)で定義したxxxの一覧とか

↑これはご存知のかた教えてください m(_ _)m

776:デフォルトの名無しさん
07/10/26 01:32:57
(loop for s being the symbols in *package* if (boundp s) collect s)
とか?

777:デフォルトの名無しさん
07/10/26 16:55:01
777ゲット!

778:デフォルトの名無しさん
07/10/28 16:24:23
与えられた引数が文字列であるか数値であるかを判断する…ってのはどないしたらいいんでしょうか。。

779:デフォルトの名無しさん
07/10/28 16:29:18
numberpとかstringpじゃだめなの?

780:デフォルトの名無しさん
07/10/28 16:33:16
>>779
ありがとうございました。

781:デフォルトの名無しさん
07/11/02 00:36:22
Lispからテーブル形式のデータを出力して、エクセルなどで開いたり、逆に表形式のデータを読み込んで変数に値を貼り付けたりしたいのですが、そういうことは可能なのでしょうか。
Lispは、Allegro Common Lispを使っています。

782:デフォルトの名無しさん
07/11/02 00:53:10
>>781
CSV

783:デフォルトの名無しさん
07/11/02 01:35:10
CSVファイルを読み書きするプログラムを書けばいいんですね。
頑張ってみます。ありがとうございます。

784:デフォルトの名無しさん
07/11/03 00:19:42
2つ以上続くアルファベットを、文字列に変換するにはどうしたらいいですか。
例えば以下のように。
abc -> "abc"

coerseだと一文字の場合しか変換できなくて困ってます。

785:デフォルトの名無しさん
07/11/03 00:28:39
(string 'abc)
"abc"
とか
(format nil "~A" 'abc)
"abc"
とか?

xyzzyだとできるけど、他のはわからん
できないならスレ違いすまんw

786:デフォルトの名無しさん
07/11/03 00:32:07
>>784
エスパーレスすると、君の知りたいのは symbol-name

787:デフォルトの名無しさん
07/11/03 15:32:34
>>785
string使えました。ありがとうございます。

>>786
symbol-nameで、やりたかったことができました。
勉強不足ですみません。

788:デフォルトの名無しさん
07/11/04 21:48:52
Lispって何ができますか?

789:デフォルトの名無しさん
07/11/04 22:33:52
プログラムの記述ができます

790:デフォルトの名無しさん
07/11/05 01:29:11
初心者に適した本はない?
もしくはサイトでもOK。

興味が沸いてきた。

791:デフォルトの名無しさん
07/11/05 01:34:58
URLリンク(usir.kobe-c.ac.jp)

792:デフォルトの名無しさん
07/11/05 01:44:58
いまANSI Common Lisp読んでる

793:デフォルトの名無しさん
07/11/05 01:54:11
>>791
GIFアニメが鬱陶しくて集中できないw


794:デフォルトの名無しさん
07/11/10 17:44:40
URLリンク(www.ibm.com)
きたぁぁぁぁぁぁっぁぁぁぁぁぁぁぁlっぁああああああぁぁぁぁl!!!!!!!!!!!!!!!!!!!!!!

795:デフォルトの名無しさん
07/11/11 07:56:47
>>794
I love emacs だけど Cusp は気になるなー。


796:デフォルトの名無しさん
07/11/11 10:52:05
気になるが、本スレ向けの話題じゃね?w

797:デフォルトの名無しさん
07/11/11 17:00:05
本スレは最近調子がわるいのだ

798:デフォルトの名無しさん
07/11/11 18:10:04
Eclipse自体が重いうえに、ちょっとした拡張にも手間がすげーかかるんで正直あんまり魅力を感じない…。
でもEmacs使わない層には評判いいね。見た目とか、IDEをマウスで操作したい層にはいいのかも。

799:デフォルトの名無しさん
07/11/12 16:20:48
Emacs + slimeで十分だろ,常識的に考えて...

800:デフォルトの名無しさん
07/11/12 19:02:27
JavaとかC++とかそのへんの、人間が面倒な手間を強要される言語だと
かなり便利なんだよ、IDE。

801:デフォルトの名無しさん
07/11/13 00:45:43
>>799
emacsの代わりにeclipseなだけで基本slimeだから

エディタとのインターフェースにelisp使うかjava使うかってだけな話だよねぇ?


802:デフォルトの名無しさん
07/11/16 21:15:11
newlisp使ってる香具師いる?

803:デフォルトの名無しさん
07/11/17 00:50:35
CMUCLやSBCLでPOSIX Pipeなどを使って外部プロセスと
データのやり取りをするにはどうすればいいのでしょうか?

804:デフォルトの名無しさん
07/11/19 11:09:27
doxygen みたいな自動ドキュメント化ツールってありますか?
日本語が使えると嬉しいのですが.

805:デフォルトの名無しさん
07/11/19 22:11:15
>>804
作ればいいだろ。
それがLispクオリティ

806:デフォルトの名無しさん
07/11/19 22:25:20
確かに Lisp でなら3日で作れそうな気がするな
気がするだけだがw

807:デフォルトの名無しさん
07/11/19 22:43:22
>>806
(loop for x being each symbols in :mypkg
when (and (fboundp x) (eql (symbol-package x) (find-package :mypkg)))
collect (list x (documentation x 'function)))
とりあえずドキュメント文字列取りだしたから、後は任せた

808:デフォルトの名無しさん
07/11/19 23:30:25
>>804
doxygenを使えばいいのかと
日本語も使えるわけなんだし。

809:804
07/11/20 00:25:15
質問した私がアホでした。皆様ありがとうございます。
凝った事をしないで自分専用のツールにするんだったら、
html ぐらいまでは簡単に出来ますね。

>>807
パッケージの中の定義済みシンボルもそうやってすれば取り出せるんですね。

810:デフォルトの名無しさん
07/11/20 14:58:45
PracticalCommonLisp の第22章だけ訳してみたんだけど、
投下してみるべき? それともチラシの裏に留めるべき?

811:デフォルトの名無しさん
07/11/20 17:09:52
とりあえず投下してみるよろし。

812:810
07/11/20 18:43:39
URLリンク(www.uploda.org)
機械翻訳並みでもよければ…

813:デフォルトの名無しさん
07/11/22 06:41:28
パッケージ a と b を両方共存させる方法はないですか?
(in-package a)
(in-package b)
とすると、a のパッケージで定義されたシンボルが
未定義になってしまいます。

814:デフォルトの名無しさん
07/11/22 06:47:23
もうひとつ。異なったディレクトリにあるパッケージを、
C の include, libxxx.a の仕組みの様に使う一般的方法はありますか?
今の所以下の様にしていますが、allegro でしか使えません。
(setq system:*load-search-list*
'(:first
(:newest-do-compile
#.(make-pathname :type "fasl")
#.(make-pathname :type "cl"))
(:newest-do-compile
#.(make-pathname :directory "~/src/lib-lisp"
:type "fasl")
...


815:デフォルトの名無しさん
07/11/22 11:50:47
>>812
もっかいうpたのむ

816:デフォルトの名無しさん
07/11/22 13:12:38
俺からもうpたのむ

通報するから

817:810
07/11/22 18:44:50
>>815
物持ちのいいうpろだ探し中

>>816
原著がネットで公開されててもまずいかなやっぱり

818:デフォルトの名無しさん
07/11/22 19:04:18
基本的には、原著作者が、翻訳して公開することを明示的に許可してないと ×

819:デフォルトの名無しさん
07/11/22 21:16:36
>>816
どうでもいいだろ,地下文章なんだから
堂々とWebに公開したらそりゃまずいだろうけど
pass付きzipで短期間だけ公開なら問題ないだろ

820:デフォルトの名無しさん
07/11/22 21:54:34
lions' 本も現在なら
ファーストコピーのスキャン画像が流通するのかしらん

821:803
07/11/22 21:58:25
(´・ω・`)

822:デフォルトの名無しさん
07/11/22 22:01:16
>>821
socketじゃだめなのか?

823:デフォルトの名無しさん
07/11/22 22:10:19
これが革命の狼煙になるとは思いもしない819であった。



824:デフォルトの名無しさん
07/11/22 23:35:19
>822
socketに対応していない外部プログラムと繋げられたらばと考えまして
もっともsocketの使い方も勉強できたらうれしいです

825:デフォルトの名無しさん
07/11/23 00:53:58
>>813
つか、常にパッケージ名に::を付ければ参照できる。冗長だけど。
多分本当にしたいのは以下のような事だろ?
省略したけど use-package とすればまるごとimportできる。

cl-user(2): (defpackage :a)
#<The a package>
cl-user(3): (defpackage :b)
#<The b package>
cl-user(4): (in-package :a)
#<The a package>
a(5): (defvar *foo* 813)
*foo*
a(6): (find-symbol "*foo*")
*foo*
:internal
a(7): :pa :b
b(8): (find-symbol "*foo*")
nil
nil
b(9): (import 'a::*foo*)
t
b(10): (find-symbol "*foo*")
*foo*
:internal
b(11): *foo*
813


826:813
07/11/23 09:39:00
>>825
import と use-package ですね。これで相当便利になりました。

827:デフォルトの名無しさん
07/11/26 00:38:07
on lispの翻訳も最初はこんなのりだったなw

828:デフォルトの名無しさん
07/11/26 14:02:25
texのドキュメントを自動生成するscriptのsampleなどどこかに
ないでしょうか?

829:デフォルトの名無しさん
07/11/26 22:37:26
slimeビデオの通りに

; SLIME 2007-11-19
CL-USER> (make-hash-table)
#<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>
CL-USER> #<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>

と、すると以下の通りに怒られます。

SB-INT:SIMPLE-READER-ERROR at 2 (line 1, column 2) on #<SB-IMPL::STRING-INPUT-STREAM {AD3B641}>:
illegal sharp macro character: #\< [Condition of type SB-INT:SIMPLE-READER-ERROR]

環境は、

debian etch
emacs22
sbcl-1.0.11-x86-linux
slimeはcvsで取ってきたものです。

.slime.lispには

#+sbcl (setq sb-impl::*default-external-format* :utf-8)
(asdf:operate 'asdf:load-op 'swank)
(setq swank::*coding-system* "utf-8-unix")
(setf swank:*use-dedicated-output-stream* nil)
(swank:create-server :port 4005 :dont-close t)

と、設定しています。
他に何か設定が必要でしょうか。

830:デフォルトの名無しさん
07/11/26 22:54:23
>>829
slimeのビデオって何か知らないけど、、
「#<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>」は手で入力したの?

「#<」ってのは read して元に戻らないものを表示するための記号。
(もとに戻るのは配列とかリストとかね)
よって、手で入力したんだとしたら何か勘違いしてるんだと思う。

831:デフォルトの名無しさん
07/11/26 23:48:25
>>830
> >>829
> slimeのビデオって何か知らないけど、、

slimeのビデオです(サイズ150MBほどあります)。
URLリンク(common-lisp.net)

これによると

CL-USER> #<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>

の後に

CL-USER> (eq #<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}> #<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>)
T

こんなことしてるんですが
私の環境ではコケてしまいます。


832:デフォルトの名無しさん
07/11/27 14:01:23
829の勘違いというかビデオを理解していないで終了。

833:デフォルトの名無しさん
07/11/27 15:10:34
830を1兆回読むべきだろうな

834:810
07/11/27 19:27:26
原著者の Peter さんに勢いで
「日本のフォーラムに翻訳を投下したいんだけど許可くれ」
ってメールしてみたんだけど、数日経った今日返信キタ

日本語化の動きは既にあるんで
グループを手伝うかどうかは君に任せるよ、とのこと

835:デフォルトの名無しさん
07/11/27 21:29:18
829です。
>>830
手で入力しなおして気付きました。

>>832
> 829の勘違いというかビデオを理解していないで終了。

はい、理解してませんね
もうちょっと勉強します。

>>833
> 830を1兆回読むべきだろうな

さすがに1兆回はw
でも3回ほど読み直しました。

Emacs側の設定 face? mouse? 見直してみます。
みなさんコメントありあがとうございました。
お騒がせしました。


836:デフォルトの名無しさん
07/11/27 22:15:54
>>834
その翻訳グループの詳細plz

837:デフォルトの名無しさん
07/11/28 01:21:11
なんか、ひどい言われようだな。

slimeの#<で始まるのは、手入力やC-yで張ったものではないと思われます。
面倒くさいので、videoは見ていませんが。

私の環境では、
> CL-USER> (make-hash-table)
> #<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>

の、返り値表示の上にカーソル置いてEnter、若しくはマウスで中クリックを
することによって、#<で始まる文字列が新規のプロンプト上にコピーされます。

この文字列は、lispのobjectとして評価可能です。
eqで比較も出来ます。

ちなみに、マウスの右クリックでメニューを出すと、色々選べて面白いです。


838:デフォルトの名無しさん
07/11/28 01:57:25
>>837
どこがひどい言われようなんだ?
質問者の方に問題ありすぎで、829のような質問じゃ仕方ない流れだろう。

839:デフォルトの名無しさん
07/11/28 18:59:01
流れをぶった切ってしまって申し訳ないのですが、ちょっと質問させてください。

たとえばPythonにはrange関数があって、0〜10のリストとか簡単に作れますが、
Common Lispにはrangeのような関数はないのでしょうか?
そのようなリストが欲しければmake-sequenceでリスト作ってdolistで回して初期化とかそんな感じなんですかね??


840:デフォルトの名無しさん
07/11/28 19:25:37
loop はどうかね?
(loop for i from 0 below 10 collect i)


841:839
07/11/28 21:27:44
>>840
おおお、ありがとうございます!
loopマクロでできないかチラッと見てみたことはあったんですが、
浅く踏み込んだだけだったのでbelowを知りませんでした。

前々から気になっていたイディオム(?)なのでスッキリしました。
どうもありがとうございます。

842:デフォルトの名無しさん
07/11/28 22:39:55
>>841
URLリンク(www.unixuser.org)

843:839
07/11/29 01:58:10
>>842
どうもありがとうございます。
勉強してきます。

loopマクロって結構面白いですね。

844:デフォルトの名無しさん
07/11/30 03:06:35
マクロの活用による典型的なミニ言語だよね。
みんなが好き勝手にこんなもの作りだしたら煩雑になってたまらん、って
思いとどまったのがschemerでいいじゃん別に便利なんだから、って
開き直ったのがlisperなんじゃないかと個人的には理解している。

LOOPマクロマンセー

845:デフォルトの名無しさん
07/12/01 17:15:09
829です。
>>837
> の、返り値表示の上にカーソル置いてEnter、若しくはマウスで中クリックを
> することによって、#<で始まる文字列が新規のプロンプト上にコピーされます。

私の環境ではこれがうまく機能していませんでした。
そこで、slimw-2.0を入れてみたところ出来るようになりました。

>
> この文字列は、lispのobjectとして評価可能です。
> eqで比較も出来ます。

そういう事なのですね。

>
> ちなみに、マウスの右クリックでメニューを出すと、色々選べて面白いです。

これから試してみます。
コメントありがとうございました。

846:デフォルトの名無しさん
07/12/02 14:24:01
日本語文字コードの変換とかPOP3とかMD5とかGUIとか
そういう実用的なライブラリはあるんでしょうか・・・
有象無象に見える多数の処理系に様々な機能が分散して
るように見えて何がなんだかわかりません・・・。
今までPerlとTclを使ってやってたことを、Lispでやりたいんですが・・・

847:デフォルトの名無しさん
07/12/02 14:47:51
>>846
URLリンク(www.cliki.net)
あたりで探してみたら?
ASDFが使える処理系なら、
asdf-installをガンガンインストールすればいいので手間もかからんし。

ただし、もともとテキスト処理のために作られた言語でないので、
そこら辺はperlのような充実っぷりを期待しても無駄です。
GUI環境の整備も主たる言語の中では相当遅れていると言って良いです。
McCLIMも最近ようやくあまり落ちなくなったという程度だしw

848:デフォルトの名無しさん
07/12/02 19:08:42
>>846
847の書いてる通り。
商用のAllegroCLなら、さすがに大分まし、だよ。


849:デフォルトの名無しさん
07/12/03 00:10:26
オープンソースでフリーな商用CLに期待しましょう

850:デフォルトの名無しさん
07/12/03 02:30:21
どうやって商売成り立たせんの、それ。

851:デフォルトの名無しさん
07/12/03 13:50:46
MySQL方式かな

852:デフォルトの名無しさん
07/12/03 20:46:35
いちおう、最後の砦として、ffi というのもあるけど、
なんでもかんでもリンクし始めたら、lisp を使ってる意味が無くなるかな。

853:デフォルトの名無しさん
07/12/03 23:31:43
質問です。CLの正しいプログラムexprは
(or (atom expr) (symbolp (car expr)) (eq 'lambda (caar expr))
を必ず満たしますか?

854:デフォルトの名無しさん
07/12/03 23:44:30
>>853
正しいプログラムってどういう意味?
正しい式の意味?

855:デフォルトの名無しさん
07/12/03 23:55:41
>>854
(1 2 3)のようなものを式と呼ぶのか分かりませんが、
要するにevalを適用してエラーが出ないもののことです。

あと括弧閉じ忘れてますねすいません

856:デフォルトの名無しさん
07/12/05 05:53:16
>>853
貴方の意図を汲み取るのが非常に難しい。
とりあえず答えてみると、
exprの部分を例えば(list 2 3 4)で置き換えた場合、
その式を満たしていないことになるけど、
それは自明だからたぶん意図を外しているのだろう。

一々、S式で書かないで、言葉で説明してみたら?


857:デフォルトの名無しさん
07/12/05 07:51:02
>>856
予想すると、>>853はlisp処理系をlispで書こうとしているのでは。
知りたいのはフォームの定義と見た。
で、CLHS: Section 3.1.2.1 を見ると、>>853の定義でだいたい
当っているような気がする。


858:デフォルトの名無しさん
07/12/05 09:25:01
(,,゚Д゚)∩先生、S式って何ですか?

        (´ー` ) >>853

 (  ゚д゚) ……

 ( ゚д゚ )


859:デフォルトの名無しさん
07/12/05 09:59:34
処理系を書くとか、そういうのって適当にやると結局後で困るんだよね。
最初から定義を見て形式保ってやっていく方がいい。

860:デフォルトの名無しさん
07/12/05 19:19:23
そうだLispを作ろう
 ↓
第一級でないオブジェクトってなんなの?
 ↓
リストの先頭に現れるらしい
 ↓
むしろリストの先頭に第一級オブジェクトが現れるのがおかしい
 ↓
リストは全部スペシャルフォームってことにすれば……
 ↓
……リストの先頭は必ずシンボルになる
 ↓
それなんてCL ←今このへん

861:デフォルトの名無しさん
07/12/05 19:22:00
オブジェクトはすべて平等ですよ。
第一級オブジェクトという考え方自体がオブジェクト差別主義に毒されてます。

862:デフォルトの名無しさん
07/12/05 19:24:24
ウィンストンのlispの3版に
lispでlisp処理系を作るとか
そういうのが載っていそうな気がする

863:デフォルトの名無しさん
07/12/05 21:55:00
残念でした〜。CLではシンボル以外にlambda式もフォーム先頭にこれるんだな。

864:デフォルトの名無しさん
07/12/05 21:57:49
ああそれはわかっているのか、ごめん。

865:デフォルトの名無しさん
07/12/05 21:58:02
>>863
>>853にはちゃんとそう書いてありますね。

lispでlispを作るって一見無駄に見えますけど、
xyzzy lispでxyzzy schemeを作ったら便利そうですね。
とっくの昔に誰かが書いてそうですが。

866:デフォルトの名無しさん
07/12/06 01:47:04
なぜ便利そうだと思ったのかkwsk


最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4315日前に更新/249 KB
担当:undef