[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 12/31 05:45 / Filesize : 237 KB / Number-of Response : 826
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

(make-thread :name common-lisp :part 5)



1 名前:デフォルトの名無しさん [2008/07/12(土) 12:43:33 ]



lispを触ってみたい入門者のQ&A
初心者のQ&A
本スレでは恥ずかしくて聞けない人のQ&A
本スレは高度すぎて割り込めない人のQ&A
linuxでなくてwindowsでやりたいんですが・・・Q&A
lispを使用してC#やJAVAの代替にするための方法(おまけ)

ま、ゆっくりたりましょう。

「いいものの本質は、いかなる時代においても変わらない」byパワーズ

(list
(url pc8.2ch.net/test/read.cgi/tech/1101386936/l50 :part 1)
(url pc11.2ch.net/test/read.so/tech/1140012484/l50 :part 2)
(url pc11.2ch.net/test/read.so/tech/1181479267/l50 :part 3)
(url pc11.2ch.net/test/read.cgi/tech/1201402366/l50 :part 4))

331 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 18:58:25 ]
>>330
ハードとかOSのインストールマニュアルは手元にあったが、off-line の man pages は
新幹線で 3時間ほどかかる本社にしか存在していなかった。
言いたいことは分かるんだが、何でもググれじゃ話が進まない場合もあるってことで…


332 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:43:07 ]
>>329
それって、本当に害人だ。<common lispは知らないが説教だけする。
答えが得られる保証はないが、分からないことがあれば気軽に聞いてください。<初心者

333 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 21:56:52 ]
clnuplotのインストール方法を一から教えてください。

334 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:24:30 ]
>>333
恐らく元質問の人とは別の人だと思うんだけど、
>>311にも書いたとおり、asdf-installさえ動作していれば、
replに
(asdf-install:install :clnuplot)
とタイプするだけでおk

そして、環境によってちょっと設定する必要あり。



335 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 22:37:56 ]
>>331
だからなに?
そんな時代じゃねーだろ?

336 名前:デフォルトの名無しさん mailto:sage [2008/08/09(土) 23:56:07 ]
>>331
こういう年だけ食ってる初心者が一番手に負えないというか害悪だな。

337 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:05:05 ]
「そう言ってるおまえらは初心者のために何かしてるのか」って、
聞かれてるんだと思うんだが?


338 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:18:45 ]
ここって初心者のために何かするためのスレだっけか?

339 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:36:05 ]
>>1にはそれっぽい雰囲気はあるな



340 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 01:45:28 ]
>>334
それはもう読んだよ。環境によって何をすればいいの?

341 名前:デフォルトの名無しさん [2008/08/10(日) 02:03:27 ]
>>337
あのさー
どの世界でも「初心者に厳しく」は常識なんだよ
やさしくするのは入門させるための建前


342 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 02:14:54 ]
初心者に優しくしても「入門した気になった(でも一人じゃ何もできない)」
って人が増えるだけかも。厳しくしたほうが良い子に育つこともある。

343 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 02:50:44 ]
>>326みたいなアホからゆとり教育が生まれるんだな。

344 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 07:34:32 ]
こういうところでゆとり教育のせいにする人って必ずでてくるけど

あれも仕様はそれなりに評価できるし、タコな環境にグダグダの実装でこうなっちゃったんだよなぁ



345 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 07:40:48 ]
>>344
初期の環境の状況は影響でるね。ubuntuでのcommon llisp環境導入のように
クリック一発ならば大丈夫だが、windowsでのlisp環境はかなり悪いからね。
windowsメインで利用するようなlispハッカーはいないから整備は進まない罠。
macosxへのインストールも難しくはないが、windowsだけはね。だめだね。

346 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:05:38 ]
>>342
私としては方針は決まってるが、無条件に厳しくあたるというのは教える側の思考停止状態
を表している半面、無条件に優しくするのは依存性を高める危険がある。これは極当たり前
の事。そこにはトレードオフがあるし、状況判断ができなければ育つものを枯れさせてしまう
だけだ。

匿名だから分かりにくいが、情けは人の為のあらず。

2ちゃんでこのことわざが意味するところは、違った新しいことを始めたときにアドバイスをもら
う場面に役立つことだと思う。すべての面で自分で調べて、自分で考えて、悩んだ末で教えて
もらうと言う判断を出来てるような自分への厳しい心を持ってる人間はわずかだと思う。それを
踏まえた上で、利用していればいいのではないか。ubuntuではないが助け合いの精神は持っ
ておいた方がいいと思うね。

>>340
僕はそのパッケージを利用したことがないから分からないけど、環境によって何をすればい
い?と聞くならば、あなたの利用している環境をちゃんと書いてみないとより具体的なコメント
は期待出来ない。つまり、どこまで本気に導入を試みてわからないのか聞いてるの
だ。環境が分からないままでいろんな事を想定して、そのすべてを答えるような人がでて
くることは期待できないぞ。

聞き方や聞くタイミングで少々気になったが、導入を本気で試みているより、住民を試してい
るような印象をもったことかな。evilじゃなくて純粋に聞いてるなら気にならないが。

Don't be evil.

347 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 08:57:03 ]
お前2chは初めてか?力抜けよ

348 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 12:33:46 ]
「情けは人の為ならず」だね。
>>346はふつーにいい人すぐるが、煽られまくって変な反動が起きませんように。

349 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 15:40:56 ]
>>346
なげーよw



350 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 15:51:18 ]
CLtLかよ

351 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 22:10:16 ]
ecl 0.9l入れてみた。
明らかにメモリ利用効率良くなってておーって思ったんだけど
REPL起動したときのバージョン表示が良く見たら0.9iのままで
なんというかポルナレフ状態


352 名前:デフォルトの名無しさん mailto:sage [2008/08/10(日) 23:24:02 ]
うちは、ちゃんと0.9lって表示になってるなあ

353 名前:デフォルトの名無しさん [2008/08/11(月) 00:58:17 ]
lispでGUI使ったりした普通のそソフトとととこにつくたことあることきょしぃこと

354 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 23:55:35 ]
>>351
Windows用(MSVC用)のmakefile中のバージョンが0.9iになってた。

>>353
英語でOK

355 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 20:08:48 ]
Lispで、秀丸みたいなGUIのエディタとか作れるものでしょうか?
できるとしたらお勧めの処理系とかありますでしょうか?

356 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 20:41:57 ]
エディタを新しく作るより前に既存のものに貢献してほしいな。
Emacsとか、Windowsならxyzzyとか。

処理系が自分で選べないならまだ自作ははやいと思う。
CLISPでWin32 APIをFFIで呼ぶか、ECLとCで作るか、どっちにしても
秀丸みたいなエディタを作ろうとすると、Cでエディタが作れるくらいの知識が居る。

LispWorksのエディタクラスなら10行くらいでEmacsライクだけど
日本語のサポートはまだ弱いし。

357 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 20:50:37 ]
>>356
それに関して思い出したので、私も質問させて下さい。
>CLISPでWin32 APIをFFIで呼ぶか、
の所なのですが、私はMacOSX環境なのでWin32を使う事ができないのですが
MacOSX環境でCLISPから呼び出せるものを教えて頂けないでしょうか

358 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 20:58:47 ]
は?


359 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 21:06:47 ]
俺は使ったことがないので詳しくは知らないけど、OSXならMcCLIMが使えるんじゃなかったっけ?
Climacsという、CLIM上で実装されたEmacsライクなエディタがあるから、参考になるかもしれない。

ttp://common-lisp.net/project/climacs/



360 名前:359 mailto:sage [2008/08/12(火) 21:09:47 ]
なんか俺のレスも迷走してるな。すみません、無視してください。('A`)

361 名前:357 mailto:sage [2008/08/12(火) 21:36:21 ]
GUIの説明が出る際に毎回win32 APIとwinodows環境を基本と
したレスばかりなのですが家にはUNIXとMacOSXとLinuxしか無いのでwinodowsは
触った事も有りません。
そのためどのような環境がUNIX系では使えるのかを教えて頂きたかったのです。

362 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 21:46:49 ]
OpenMCLからCocoaを呼ぶのが良いんじゃないかな

363 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 21:50:13 ]
煽りっぽいが一応マジレスしておこう。↓を調べてみたらどうだろう。
LTK(Tcl/Tk)、CLX(X)、CL-OPENGL(OpenGL)、CL-SDL(SDL)
あとはGTKとソケットで通信するやつとかはタフだったな。

364 名前:357 mailto:sage [2008/08/12(火) 22:06:02 ]
>>362-363
ありがとうございます。
煽りでは有りません、マジレスありがとうございます。
調べてみます。その中ではどれがあなたのおすすめですかね?
ブラウザとか作りたいのですが

365 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 23:26:28 ]
>>364
362-363じゃないけど
WEBブラウザ作るのならCL-OPENGLとCL-SDLは外した方がいい、あとLTKは向かなそう
X11ならCLXを選択するのが良いのかもしれないが化粧をさせたいならGTK経由が好いと思うが自分はさわったことないのでワカリマセン。
Webじゃなくグラフィックスのブラウズとかって意味だったらGLやSDLの方が扱いは簡単かも。

というか>>363が書いてくれたGUI関係のライブラリの元が(文中の括弧内のもの)どんなものなのか調べれば自分で選択できると思う。



366 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 00:21:47 ]
>>357
とりあえず、使ってるOSのフレームワークのことも知らない位なら、
既存のブラウザコンポーネント使って、独自UIを被せる位にしといた方がいいぞ。
GeckoとかKHTMLとか。MacならWebKitとかなのかな。

あまり知識のない状態で、下手に人気のある物作っちゃうと、
特にブラウザとかはセキュリティホールとかが恐すぎる。
単に知的好奇心を満たすため、とかなら大いに応援するんだけど。

367 名前:357 mailto:sage [2008/08/13(水) 00:42:13 ]
>>366
一応Cocoa-Rubyなどでばりばり動くブラウザやテキストエディタ、グラフ作成ソフト
などを作った事は有ります。
ですが、Lispでやってみたかったのです。Lispは一番好きな言語ですから。
何しろ調べてやってみる事にします。ありがとうございます。

368 名前:デフォルトの名無しさん mailto:sage [2008/08/13(水) 01:08:59 ]
>>367
そういう経験があるなら、使ってる処理系のFFIの仕様とか、
それぞれのツールキットの特徴とか、事前に知らずにはいても、
ある程度、調べて把握することくらいはできそうだけどなー。
とはいえ、そちらの詳しい事情は興味無いからこれ以上詮索はしない。

ttp://clisp.cons.org/impnotes/faq.html#faq-gui
ttp://www.cliki.net/Graphics%20Toolkit
ttp://www.cliki.net/admin/search?words=cocoa

369 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 15:32:33 ]
>>367
どこかわすれたけど、OpenMCL(Clozure CL)でワープロを作って公開しているところ
があるよ。MacでGUIならOpenMCLをお勧めするよ。
GUI関連のサンプルもついているし。



370 名前:250 mailto:sage [2008/08/17(日) 16:38:13 ]
Allegro Common LispのGUIのプログラミングがまったくわかりません
みなさんはどうやって覚えましたか?

371 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 16:50:43 ]
覚えてません

372 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 16:59:02 ]
>>370
なんと言うか'覚えられません'だとLispと言うより
プログラミングについての話に成るような気がする。
やっぱり他の言語と同じようにサンプルコードとかを読みながら
やるのが良いんじゃないかな?

373 名前:370 mailto:sage [2008/08/17(日) 17:31:57 ]
言葉足らずですいません

Allegro Common LispでのGUIのサンプルコード自体が見つからなくて困っています

374 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 17:43:52 ]
Graphicsアプリケーションかなあ
www.franz.com/ftp/pub/acl80/pdf/cgide.pdf
www.franz.com/ftp/pub/acl80/pdf/acl-common-graphics.pdf
こんなのが見つかったけど・・・多分違うと思う

確かに情報が少ないね。Lisp系は情報が少ないからな・・

375 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 18:08:45 ]
GUIの開発経験はどれくらいですか?MFCとかGTKあたり使ったことあります?
↓チュートリアルとリファレンスで経験者はなんとかするみたいですが。
jp.franz.com/doodler/index-j.htm
GUI開発未経験でイベント駆動型開発未経験とするとちょっと難しく感じるかもしれません。

376 名前:250 mailto:sage [2008/08/17(日) 19:29:39 ]
レスしてくださった方ありがとうございます。
イベント駆動型はまだ未経験ですがチュートリアルやpdfを参考にしてがんばりたいと思います

377 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 19:33:25 ]
>>376
Lispあんまり詳しくないけどAllegroのアプリはそんなに面倒じゃなかったよ、例の学習者向けエディションでもちゃんとFormでポイポイつくれちゃうので拍子抜けした。(もちろんロジックは慣れないLispでちょっと苦労したけど)
自分の道具作るのに非常に慣れてきて個人で購入したいんだけど全部franz経由でしか買えないのかなぁ?

ショップ売り無いのだよね?

378 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 02:29:15 ]
折角DSLが楽に作れる言語仕様なんだから
GUI構築用のDSL作ればいいのに

379 名前:デフォルトの名無しさん [2008/08/18(月) 20:58:22 ]
>>377
Freeエディションのヒープ制限がきつすぎてお試しにすらならんので、
安いなら買ってみようかと思ったんだけど、値段の情報を見つけられんかった。
個人には売る気無いのかな
franz経由っていくらでした?




380 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 21:25:38 ]
>>379
4年前の価格だけど、一応参考までに。

> 717 名前:デフォルトの名無しさん:04/06/29 08:23
> 先日のFranzセミナーでもらった価格表によると…
>
> Windows/Linux/FreeBSD/MacOS X版
> Professional 750,000 (395,000)
> Enterprise 1,400,000 (795,000)
> Platinum 2,000,000 (895,000)
>
> UNIX (Sun, IBM, HP, Compaq)版
> Professional 1,300,000 (520,000)
> Enterprise 2,000,000 (1,040,000)
> Platinum 2,750,000 (1,200,000)
>
> …高い… orz

> 718 名前:717:04/06/29 08:24
> あ、括弧の中はアカデミック価格ね。

381 名前:デフォルトの名無しさん [2008/08/18(月) 22:39:25 ]
>>380
ありがとう。
ド、ドル?円だよね。あはh高い...唖然


382 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 02:06:45 ]
>>380
それなら、放送大学に入って、student editionのほうがいいんじゃないか?
ドル建てで5万円ほどだったから

383 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 06:45:18 ]
LISPですら自作できない無能にはちょうどいい値段

384 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 07:26:00 ]
委員会で設計した言語が「まともな言語」で
独自に設計した言語はダメだと思ってるらしい。
だから、自作といっても与えられた仕様を満たすことしか考えられないわけだ。

385 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 09:29:57 ]
↑マジで何を言いたいのか全然解らん、頭の悪い漏れの為に誰か解説してくれ

386 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 12:02:33 ]
最も致命的なバグは数学で説明できないのだー

387 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 14:03:36 ]
では算数で説明してくれ

388 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:28:02 ]
損切りか塩漬けか

389 名前:デフォルトの名無しさん mailto:sage [2008/08/19(火) 18:43:39 ]
sbclでいいやん



390 名前:デフォルトの名無しさん [2008/08/19(火) 22:20:08 ]
sbclはmacだとthread使えないじゃん
clozure clに落ち着いたけど
比較するとallegroやっぱ爆速だな。貧乏人なのであきらめるしか


391 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 07:36:41 ]
おれは社会人だから大学院に入りなおして学割でallegro買うぜ

392 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 16:05:24 ]
貧乏人の味方Linux!!

393 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 02:14:31 ]
そうかな。Linuxは機械を選ぶからなあ。
値段的コストから見れば貧乏人向けではあるが、
きちんと選ばないと逆に高く付いてしまう。
時給換算的に。

394 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 09:53:37 ]
俺時給換算で最低時給未満の生産性しか無い人間ですから大丈夫ですよ

395 名前:250 mailto:sage [2008/08/24(日) 08:58:37 ]
(defparameter *fn* (let ((count 0)) #'(lambda () (setf count (1+ count)))))
これはクロージャの効果で*fn*を呼び出すたびに無名関数内のcountの値が1ずつ増えていくのはわかるのですが
CL-USER> (funcall *fn*)
1
CL-USER> (funcall *fn*)
2

この無名関数の部分を普通の関数に置き換えて、処理自体は外に記述した場合もその関数はクロージャとして働いてくれるのですか?
実践Common Lisp66ページでのことです。Lisp始めたばかりで自分で試してみたくてもうまくいきません

396 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 09:29:20 ]
クロージャはクロージャ、
クロージャ以外のものはクロージャではない。


397 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 09:38:40 ]
>>395
こういう意味ならできる、が答かな。

CL-USER> (let ((count 0))
(defun count-up ()
(setf count (1+ count)))
(defun show-count ()
count))

CL-USER> (count-up)
1
CL-USER> (count-up)
2


398 名前:250 mailto:sage [2008/08/24(日) 12:32:30 ]
CL-USER> (defun cplus () (setf count (1+ count)))
CPLUS
CL-USER> (defparameter *fn1* (let ((count 0)) #'cplus))
*FN1*
CL-USER> (funcall *fn1*)
; Evaluation aborted

すいませんどこがエラーになってしまったのでしょうか…

399 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 13:39:46 ]
立派な仕様書があるから本なんて買わなくていいし質問に答えなくていい罠



400 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 14:21:12 ]
(defmacro name (vars form &body body) ...)
てな, form を作りたいんですけど
form の評価結果が, vars で指定された書く変数に代入される
ような, 定型マクロってどっかに転がってませんか?

気持ちとして, やりたいことは
vars が '(a b c) で form が (1 2 3) を返す場合
`(let ,(mapcar #'fun ,vars ,,form) ;form の前の 「,,」 の気持を分かって
==> (let ((a 1) (b 2) (c 3)) ...
と, 展開したい


401 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 14:30:48 ]
destructuring-bind?

402 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 14:31:37 ]
>>400
destructuring-bindかな

こんな
(destructuring-bind (a b c) (list 1 2 3)
(+ a b c))
=>6


403 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 19:03:42 ]
>>398 クロージャ理解の壁だね。やりたい事はわかるが、おしい。もう一歩。
ここで変数のスコープとかの理解が加われば先に勧めるよ。
クロージャは変数をキャプチャするが、それは「クロージャが作成された」環境の変数なんだ。
cplus が作成されたときに参照している count はグローバル環境の count で、let で作った束縛じゃない。
したがって、後から関数の外側で let で束縛を作っても意図した動作にはならない。

この場合は count がスペシャル変数としてグローバル環境に定義されていた場合はまた話が違うんだけどね…。

404 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 19:32:09 ]
>>402 おぉ! そう言えばそんなもんがあった!ありがと


405 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 21:27:15 ]
>>398
OK、>>403も指摘しているが、>>250が何かを分かっていないことは分かった。
多分、レキシカルスコープが文字通り、「字面どおりに動作する」、ように作られている、
ってのが分かっていないんだと思う。レキシカルスコープを理解するのが先で、
それを実現するためにクロージャーがある、と思えばいいと思う。

>>399
黒田さん乙。そんなことができる立派なエンジニアが、残念ながら少ない、
ということは無視しないでくれよ。

406 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 21:40:00 ]
定義された時点でのスコープの定義を取り込むなんて
Cでいえば関数というより構造体みたいなイメージになってしまう
Body内を走査してbody内で見付からなければ環境から参照を取り込むみたいな
ますますよくわからなくなってくるわ


407 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 22:51:55 ]
>>406
構造体というか、クラスとクロージャがよく似ている。
オブジェクト指向の変な例え話よりも、クロージャを理解するといいよ。

408 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 23:05:50 ]
クロージャってどうやって勉強したらいいの?
掲示板やBlog以外で見たことないんだけど
情報学科だと常識?

409 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 23:06:19 ]
はてブのSchemeタグからサルベージ
ttp://www.itmedia.co.jp/enterprise/articles/0703/29/news069.html

shiroさんの書いたクロージャの説明記事。わかりやすいと思う。




410 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 23:19:30 ]
>>408
簡単でいいんで、LispでLispを実装してみるとすぐ分かるかもね。
「環境」というとわからないけど、所詮はコンピューター上のものだから。
そもそも、ものすごく特殊な処理をしてる訳じゃないし。

411 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 23:30:05 ]
LispをLispで実装とな!!
そんなのloopマクロをemacs lispで実装できる程度しかlispの経験ない俺には無理だ
hogehoge schemerシリーズ、HtDP、Practical Common lisp、sicp、OnLispを読み通してから頑張ります

412 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 00:49:36 ]
>>409,410
ありがとうございます。
lispの勉強もしてみます

413 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 17:47:13 ]
schemeのmatch-lambdaってCommonLispにないのかな?

414 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 23:20:42 ]
CLiKiのlibrary-listを翻訳しているのですが
asdf-worldのregistries ("worlds")の部分がわかりません。worldsと言うのは
何かの用語でしょうか?
UNIXのmake worldの様に特殊な用法ですか?
よろしくお願いします。

415 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 06:01:06 ]
"version controllable registries"の名前。

416 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 10:39:31 ]
>>415
ありがとうございます。

417 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 17:51:14 ]
使う場面が多かったので作ってみました。
roundの拡張で第二引数に四捨五入する桁を入力すると
その桁で四捨五入してくれます。
修正すべき所・つけるべき機能をご指摘願います。
(defun my-round (x y)
(cond ((<= y 0) (format t "*** - MY-ROUND: The second-paramerter must be more than 0 not ~A~%" y))
((= 1 y) (float (/ (round (* x 10)) 10)))
(t (float (/ (round (* x (expt 10 (1- y)))) (expt 10 (1- y)))))))
エラーメッセージの表示方法がわからなかったので手動で打ち込んだため
横に長いレスに成ってしまい申し訳有りません。
よろしくお願いします。

418 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 21:20:52 ]
別にyは負数でもよくね?ってことで
(defun my-round2 (x y)
(float (* (round x #1=(expt 10 y)) #1#)))

(my-round2 95.6453 -3)
95.645

(my-round2 95.6453 -2)
95.65

あとCLに限らずroundは四捨五入とは違う(丁度真ん中は近い方の偶数になる)から
注意してね。

(round 2.5)
2

(round 2.6)
3

(round 3.5)
4


419 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 21:27:23 ]
あと俺が題意を読み間違えてなければ>>417は*と/の位置とか
1-とか色々間違ってね? ということに今更試してみて気付いた。




420 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 22:05:01 ]
あとroundは多値を返すからそれにあわせて多値を返すようにしてもいいかもね


421 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 23:02:03 ]
>>419
clispでは正常に動作しているのですが・・
0.876を小数第二位で四捨五入する場合
(*0.876 10)=8.76
(round 8.76) => 9
(float (/ 9 10)) => 0.9
と言う順番という事なのですが


422 名前:417 mailto:sage [2008/08/27(水) 23:25:56 ]
>>421了解
yは少数第y位だったんだな。

こっちのは正負が逆だ。たとえば100の位にまるめる場合
(my-round2 6543 2)
6500

小数第一位にまるめる場合
(my-round2 7.65 -1)
7.6


423 名前:418 mailto:sage [2008/08/27(水) 23:27:14 ]
418だったorz

424 名前:デフォルトの名無しさん mailto:sage [2008/08/27(水) 23:37:06 ]
>>422-423
roundの問題を解決するため正確な四捨五入をする関数を作っています。
初心者が自力でがんばるチャンスだと思うので、諸先輩がたしばしお待ち頂けませんか?
自力でがんばる精神を鍛えたいので・・・よろしくお願いします。

425 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 00:26:27 ]
;;小さい方の10の倍数に巻く
(defun role (x)
(let((p 1))
(loop (if (and (<= (expt 10 (1- p)) x) (< x (expt 10 p)))
(return (expt 10 (1- p))) (incf p 1)))))
;;正確な四捨五入の作成
(defun justice-round (x)
(let ((i (mod (* 10 (float (/ (truncate (* x 10)) 10))) (role (* 10 x))))
(l (float (/ (truncate (* x 10)) 10)))
(j (float (truncate (* x 10)))))
(cond ((< x 1) (if (<= 5 j)
(+ 1 (- l (/ j 10)))
(- l (/ j 10))))
((>= x 1) (if (<= 5 i)
(+ 1 (- l (/ i 10)))
(- l (/ i 10)))))))

こんな長い時間でこんな物しかできずすいません。
デバッグに予想外に時間がかかってしまったので。
一応
>(justice-round 0.99)
1.0
>(justice-round 0.33)
0.0
>(justice-round 1.99)
2.0
>(justice-round 1.34)
1.0

と一応正確に小数第一位で四捨五入できています。


426 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 00:29:29 ]
気になる事があって確認してみたら
またデバッグが必要な事がわかりました。
がんばってきます。僕の事は気にせずお休みください(待ってないとは思いますが...)
夜型なので基本寝ませんので明日の朝には仕上げます。
ありがとうございました。

427 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 01:26:59 ]
;;小さい方の10の倍数に巻く
(defun role (x)
(let((p 1))
(loop (if (and (<= (expt 10 (1- p)) x) (< x (expt 10 p)))
(return (expt 10 (1- p))) (incf p 1)))))
;;一桁目を取り出す
(defun get-one-figure (x)
(let ((i (truncate x)))
(if (> 0 i)
()
(loop (if (> 10 i) (return i) (setf i (rem i (role i))))))))
;;正確な四捨五入の作成
(defun justice-round (x)
(let ((i (get-one-figure (* 10 x)))
(l (float (/ (truncate (* x 10)) 10)))
(j (truncate (* x 10))))
(cond ((< x 1) (if (<= 5 j)
(+ 1 (- l (/ j 10)))
(- l (/ j 10))))
((>= x 1) (if (<= 5 i)
(+ 1 (- l (/ i 10)))
(- l (/ i 10)))))))
一応正確な四捨五入ができているようです。
数字の一桁目を正確に取り出す事ができていなかったのが問題のようでした。
それでは早速先ほどの望みの桁の四捨五入の関数の実装に使ってみます。
get-one-figureには見るからにwhenを使うべき場面が有るのでそれも修正してみます。

428 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 02:19:19 ]
;;小さい方の10の倍数に巻く
(defun role (x)
(let((p 1))
(loop (if (and (<= (expt 10 (1- p)) x) (< x (expt 10 p)))
(return (expt 10 (1- p))) (incf p 1)))))
;;一桁目を取り出す
(defun get-one-figure (x)
(when (> x 0)
(if (< x 1)
(float 0)
(let ((i (truncate x)))
(loop (if (> 10 i) (return i) (setf i (rem i (role i)))))))))
;;正確な四捨五入の作成
(defun justice-round (x)
(let ((i (get-one-figure (* 10 x)))
(l (float (/ (truncate (* x 10)) 10)))
(j (truncate (* x 10))))
(cond ((< x 1) (if (<= 5 j)
(+ 1 (- l (/ j 10)))
(- l (/ j 10))))
((>= x 1) (if (<= 5 i)
(+ 1 (- l (/ i 10)))
(- l (/ i 10)))))))

;;望みの桁での四捨五入
(defun my-round (x y)
(cond ((<= y 0) (format t "*** - MY-ROUND: The second-paramerter must be more than 0 not ~A~%" y))
((= y 1) (values (justice-round x) (- x (justice-round x))))
(t (values (/ (justice-round (* x (expt 10 (1- y)))) (expt 10 (1- y))) (- x (/ (justice-round (* x (expt 10 (1- y)))) (expt 10 (1- y))))))))


429 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 02:21:33 ]
これでおそらく完成です。問題点・改善点有りましたら、ご指摘願います。
作成する過程でvaluesの使い方やroundの問題点などをしれて非常に勉強に成りました。
では失礼します。




430 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 12:20:43 ]
lisp以前の話だが四捨五入の基本的なアルゴリズム(0.5足してから切り捨て)は
知っておいてくれ。
(defun cut4 (v &optional (d 0))
(let* ((c (expt 10 d))
(a (float (* (floor (+ (/ v c) 0.5)) c))))
(values a (- v a))))

第2引数の意味は>>418と同じ。
(mapcar #'(lambda (d) (cut4 283.745 d)) '(-2 -1 0 1 2))
=> (283.75 283.7 284.0 280.0 300.0)

ついでに統計とか財務計算で四捨五入じゃなくてroundが使われるっていう理由も
知っておくと良いと思う。

431 名前:429 mailto:sage [2008/08/28(木) 12:29:26 ]
なるほど、簡単にできたんですね・・・
わかりました。Lisp以前の問題なようなのでLispに挑戦するのは
まだ早いようですね、もう少し他の事を知ってからやってみたいと思います。
スレ汚しでした、すいません。
皆さん本当にありがとうございした。






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<237KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef