[表示 : 全て 最新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))

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に挑戦するのは
まだ早いようですね、もう少し他の事を知ってからやってみたいと思います。
スレ汚しでした、すいません。
皆さん本当にありがとうございした。

432 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 13:16:13 ]
SBCL 1.0.17.38を使っています
sbcl.infoの1.2 Extensionsに
*Recursive Event Loop*というノンブロッキングI/Oの機能があると書かれているので
使ってみたいと思うのですが、どうすれば使えるのか判りません。
src/code/serve-event.lispがあり、SB!IMPLというパッケージの中で
serve-eventという関数が定義されているようなのですが、
起動した状態では#'serve-eventはバインドされておらず、
(require 'SB-IMPL)としたり、(require 'serve-event)としたりしても
Don't know how to require ... といわれてしまいます。
どうしたらよいのでしょうか。

433 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 16:47:17 ]
簡単な関数ならkmrclあたりにはいってたりしない?


434 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 21:39:54 ]
>>429
lisp以前の話って言い方がアレだったんで補足すると、
プログラムに書き下す前のアルゴリズムを考える段階の話、って意味ね。
考えたアルゴリズムを書き下す為の言語として
Lispは悪くない選択肢だと思うので、どんどんLispでコードを
書くとよいと思うよ。

>>432
SB-IMPL::serve-eventかな。使い方は知らない。
common-lisp.net/project/cmucl/doc/cmu-user/serve-event.html
これが元ネタ?



435 名前:429 mailto:sage [2008/08/28(木) 22:54:23 ]
>>434
ありがとうございます。
いつも書くときに直感で書いてデバッグをするタイプなので
アルゴリズムを考える段階が少ないようですね。
ありがとうございます。気をつけて書いてみたいと思います。



436 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 12:22:11 ]
ポータブルに持ち運べるLispインタプリタ
はありませんか?仕事柄複数のパソコンを
行き来するので勝手にインストールのも
マナー違反ですしUSBメモリー等に入れて
使える物が欲しいです。MacとWindowsそれぞれについて
お教え下さい。
若しくはC言語等でインタプリタを書き、
その都度コンパイルするのがベストでしょうか?

437 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 12:40:47 ]
勝手にインストールがマナー違反な環境なら
USB メモリを挿してあれこれするのもマナー違反だな多分

438 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 13:29:33 ]
>>436
Mac OS Xは/Volume/ボリューム名/にマウントされるから、
./configure --prefix==/Volume/ボリューム名
でコンパイルすればOKでしょう。(ボリューム名はNO NAMEのままでもいい)

Microsoft Windowsは、差し込むごとにドライブ名が変るから、
その方法は使えないし、処理系を選ぶんじゃないだろうか。(良く知りません> Win)



439 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 17:33:01 ]
>>436
聞かないでいれようとしたりUSBメモリを使おうとするからマナー違反でしょ。
USBメモリもデータ漏洩・ウイルス混入につながるから何も聞かずにやるのは
まずいことだよ。こっそりやるんじゃなくて、単刀直入に利用するPCの管理者
に許可をもらっといたら?

440 名前:デフォルトの名無しさん mailto:sage [2008/08/29(金) 20:11:57 ]
わざわざ持ち運ぶんじゃなくて
webから使える様にすればいいんじゃない?

441 名前:429 mailto:sage [2008/08/29(金) 20:39:38 ]
ポータブルfirefoxと言う物を知ったので、そのような感じで
使える物が有ればと思っていました。ありがとうございました。

442 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 02:44:12 ]
CLISPのロゴをじぶんで作ってみたのですが公開してしまって良いのでしょうか?
著作権などについて詳しくないのでよろしくお願いします。


443 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 02:48:01 ]
おまえが作ったものなら、何をしようとおまえの勝手

444 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 02:57:23 ]
ありがとうございます。
助かりました

445 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 11:30:10 ]
>>442
"CLISP" 自体が登録商標ということはないので大丈夫。

一般に、登録商標になっているものの文字列が書かれているとかで
なければ大丈夫。



446 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 16:46:01 ]
登録商標になっているものの文字列が書かれていても、それを自分の作ったものの
商品名にでもしない限り全く何も問題ない。

447 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 17:29:21 ]
「実践Common Lisp」が出たわりには静かだなぁ。他の流行言語なら祭りになるのに・・・

448 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 17:31:00 ]
みんな英語で読んでるから

449 名前:デフォルトの名無しさん mailto:sage [2008/08/30(土) 23:55:17 ]
>>447
そもそも流行言語じゃないしなwでもああいう良い本が日本語になるのは良いことだ。
英語版で分かってたつもりだけど、相当読み飛ばしてたことに気付いたw

450 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 19:56:17 ]
>>449
おまえは俺か。日本語だと読むコストが低くていいよな。
脳味噌を英語に使わなくていい分、一週間で全部読めた。

451 名前:デフォルトの名無しさん mailto:sage [2008/08/31(日) 23:30:35 ]
面白いところは英語でも読むのに困らないが、退屈になってくるときいてくる

452 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 00:13:36 ]
HyperSpecって勝手に翻訳していいのでしょうか?
それともどこかに許可を取るべきでしょうか?

453 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 00:19:21 ]
過去ログをよく探してみた所翻訳は許可を取るべきな様ですね。
e-mailを送り質問してみたいので聞くべき事のリストなど有りましたら
よろしくお願いします。

454 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 13:02:02 ]
OpenMCLはじめて使ってみたんだがEmacsの括弧対応になれてると
あのシンプルなIDEは使いづらいな
30行ぐらいの複雑な関数書いてるとなんだか分けわからなくなる
やっぱEmacsが一番なのだろうか?

455 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 15:04:17 ]
シミュレート板のmaximaスレがなくなってしまったのですが
こちらに合流してもいいものなのでしょうか?



456 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 15:08:01 ]
だめです

457 名前:デフォルトの名無しさん mailto:sage [2008/09/02(火) 15:21:33 ]
>>455
相応しい板にスレを建てるほうが良いだろう。
あくまで私見だけど、シミュレート板はあまり相応しいとは思わなかった。






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

前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