1 名前:デフォルトの名無しさん [2007/04/20(金) 19:41:39 ] Lisp全般のスレです 過去スレ Part16: pc11.2ch.net/test/read.cgi/tech/1172404795/ Part15: pc10.2ch.net/test/read.cgi/tech/1151025773/ Part14: pc8.2ch.net/test/read.cgi/tech/1132275726/ Part13: pc8.2ch.net/test/read.cgi/tech/1115901841/ Part12: pc8.2ch.net/test/read.cgi/tech/1100229366/ Part11: pc5.2ch.net/test/read.cgi/tech/1091456033/ Part10: pc5.2ch.net/test/read.cgi/tech/1075630259/ Part9: pc2.2ch.net/test/read.cgi/tech/1069594582/ http://が多すぎるらしいので分割
802 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 01:00:07 ] schemeってcommon lispのsymbol-valueに相当するもの無いけどevalを使うしかないんですか? やりたいことはalistに文字と関数のペア入れておいてその関数を呼び出したいんだけど。 '(#\a . func_a) だとfunc_aは関数にならないから `(#\a . ,func_a) と書いてるんだけどいちいち','を書くのがめんどい。 こういうところはマクロを使うのがセオリーなの?
803 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 07:13:30 ] Schemeでは「symbolに値が入ってる」わけじゃないからね 処理系によっては実行時にはシンボルと値の結び付きは完全に忘れちゃってる 可能性もあるし。 処理系依存で良ければ、symbol-valueとかglobal-variable-refとかが使える 場合もある。ポータブルにやるならevalしかないだろうね。 「文字と関数のalist」とかは普通にバッククオート使っちゃうけどなあ。
804 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 08:50:18 ] 個人的には evalも邪道だと思う。 そもそも R4RS には evalも必須じゃなかったし。 万独裁なら cons でも使え。
805 名前:802 mailto:sage [2007/07/23(月) 11:14:54 ] >>803 なるほどね。R5RSをよく読んだらそう書いてあったよ。 Common Lisp陣営がSchemeを批判するときの論点がそこなのね。 >>804 確かにevalは使いたくない。 今まで通りquasi quote使って関数をunquoteすることにしました。
806 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 20:16:11 ] >>805 > >>803 > なるほどね。R5RSをよく読んだらそう書いてあったよ。 > Common Lisp陣営がSchemeを批判するときの論点がそこなのね。 全然違うと思うが。 Schemeにも1st class objectとしてのシンボルがあればなあという CLerもいるっちゃいるだろうけどさ。
807 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:38:53 ] ブラックボード黒田
808 名前:デフォルトの名無しさん mailto:sage [2007/07/23(月) 23:49:38 ] kuroタソ(*´д`*)/ヽァ/ヽァ
809 名前:デフォルトの名無しさん [2007/07/25(水) 09:38:10 ] www.tekkon.net/ これってlisperの話?w
810 名前:デフォルトの名無しさん [2007/07/27(金) 01:42:56 ] 質問があります。 lispで、他の言語も実装した(というか、DSLを作ってみたというか) 処理系があったと思うのですが、ご存じないでしょうか? lispでよく用途に合わせた言語を再実装したとう話を聞くのですが、 なかなか実例に合わず、う〜ん?と思っていたのですが、 これを見て、lispすげーと、唸った覚えがあります。 けっこう、最近の言語だったと思うのですが、ご存じないでしょうか? 確か、DSLとしては、ひとつとして、JavaScriptのサブセットを実装していました。 他の言語のサブセットもあったと思うのですが、覚えていません。 もしかしたら、Lispじゃなくて、もしかしたら、schemeの実装だったかもかわかりません。
811 名前:デフォルトの名無しさん [2007/07/27(金) 01:58:31 ] もしかしたら、lispじゃなかったかもしれません orz うろ覚えなのですが、中間形式として、S式を使っていたような? 言語内に、いくつかのプログラムがあってそれを組み合わせて、使っていたような気がします。
812 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 02:05:25 ] >>811 『On Lisp』の24章に、Common Lisp による埋め込み言語としての Prolog 実装の話はあるけど。 ただ Prolog は最近の言語ってわけでもないし……。
813 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 03:48:27 ] >>811 まさか、TAOじゃないよな。
814 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 04:30:18 ] Coke & Pepsi?
815 名前:デフォルトの名無しさん [2007/07/27(金) 14:31:02 ] >>814 それそれ!!それです。 ありがとさんです。 CokeとPepsiとJoltです。 ただ、今見たら、素人の手に負えそうなものではないことがわかったw
816 名前:デフォルトの名無しさん mailto:sage [2007/07/27(金) 17:25:35 ] オナニーしすぎてモーホー炎になりますたw
817 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 00:07:51 ] >>810 HaskellでPerlを実装した話じゃなくて?
818 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 00:31:50 ] haskellはschemeで作られました
819 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 02:31:09 ] schemeはschemeで作られました
820 名前:名無しさん@そうだ選挙に行こう [2007/07/29(日) 13:11:31 ] ・[1492] L2Lisp in Ruby((鈴)) 静的スコープ、末尾呼出し(末尾再帰を含む)の最適化、およびマクロを備えた 近代的なLispの小さなインタープリタをRuby(およびJRuby)で作ります。Rubyの データ型と親和性が高く、簡単に組込み関数を増設できる手頃なLisp処理系として 利用できます。 codezine.jp/r.x/czn077a/aid/1492
821 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 13:38:23 ] rubyなら継続も比較的簡単に実装できると思うんだけど なんでまた半端な物作るかな CL厨がまた文句言いにくるよ
822 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 14:01:32 ] 「簡単に組込み関数を増設できる手頃なLisp処理系」に継続も装備させようという発想が凄いな。
823 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 15:56:16 ] 手頃な処理系というのならForthの方が良いと思うけどな。 元にしたL2Lispのページを見ると、継続(というかcall/cc)は不完全らしいね。
824 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 16:07:56 ] Forth でも良いだろうし Lisp でも良いだろう 大して変わらんよ
825 名前:名無しさん@そうだ選挙に行こう mailto:sage [2007/07/29(日) 20:15:49 ] >>821 漏れ CLer だけど……どの辺に文句つける要素があるんだ?
826 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:28:16 ] 気にする事は無いよ
827 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:34:11 ] むしろ継続継続とSchemerが喰いついている件。まぁ、あんまり使われないだろうけど。Rubyistがわざわざこれを使うとは思えない。
828 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 20:58:35 ] いわんや Lisper おや
829 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 21:20:01 ] つーかLisperも使わんでしょこんなの
830 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:05:29 0] そういう問題ではない
831 名前:デフォルトの名無しさん mailto:sage [2007/07/29(日) 23:12:06 0] なんだ、L2LispってPascalの処理系を移植しただけか。 ruby厨うぜえ。
832 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:09:14 ] >>825 ブラックボード黒田さんなら、黒板振り回しながら襲いかかるであろう仕様。
833 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:27:42 ] >>832 一般の Lispnik とは全く関係無いな
834 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 00:59:26 ] >>820 とてもコンパクトに出来ていて Ruby と Lisp の勉強になりました、 とレスしてほしいんだろw
835 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 04:54:46 ] 継続ってのは後続のことですか?
836 名前:デフォルトの名無しさん [2007/07/30(月) 15:43:41 ] >>834 そうそう。わかればいいのです(^^)
837 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 17:24:55 ] 荒らすなよRuby厨
838 名前:デフォルトの名無しさん [2007/07/30(月) 17:45:09 ] Schemeの質問をお願いします。 下記@とAを実行した場合、 それぞれの結果になるプログラムを教えて下さい。 @(my_makelist 5) を実行した結果 (1 2 3 4 5) A(my_max ’(34 20 30 19)) を実行した結果 34
839 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 19:22:03 ] (define (my_max list) 34) (define (my_makelist n) '(1 2 3 4 5)) こんなかんじ
840 名前:838 mailto:sage [2007/07/30(月) 19:40:06 ] >>839 さん 実行しましたが、以下の結果が返ってきません。 @(my_makelist 5) -> (1 2 3 4 5) A(my_max ’(34 20 30 19)) -> 34 もう一度お願いします。
841 名前:839 mailto:sage [2007/07/30(月) 19:46:15 ] うちでは動いています。 あなたの処理系のバグではないですか?
842 名前:838 mailto:sage [2007/07/30(月) 20:00:01 ] 839>>さん 昨年、以下のサイトで、 www5a.biglobe.ne.jp/~sasagawa/MLEdit/Scheme/index.html これを『ChezEdit-NT Ver1.11 setup.exe』インストールしましたが、 何か問題があるのでしょうか? 他のプログラムは問題なく結果が返ってきます。 度々すいません。
843 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:10:51 ] あなたの頭に問題があんじゃないでしょうか?
844 名前:838 mailto:sage [2007/07/30(月) 20:13:43 ] >>839 さん @は以下の通りで何とかできました。 (define make_list(lambda (n) (do ( (res (list n) (cons n res)) ) ((= n 1) res) (set! n (- n 1))))) Aの方は、以下のmax部分がうまく作れません。 (max 34 20 30 19) -> 34 お願いします。
845 名前:839 mailto:sageクズ学生は邪魔だ さっさと退学して社会の底辺で働けよ [2007/07/30(月) 20:19:04 ] それと同じ方法で書けば良いと思います
846 名前:838 mailto:sage [2007/07/30(月) 20:23:56 ] >>839 さん そこを何とか教えてもらえませんか?
847 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:25:38 ] Prologだと以下のようになります。Prologでまったりには 意地悪な人いないから、遊びにいらっしゃい。 my_max([A|R],Max) :- my_max(A,R,Max). my_max(Max,[],Max). my_max(A,[B|R],Max) :- B>A,my_max(B,R,Max),!. my_max(A,[_|R],Max) :- my_max(A,R,Max).
848 名前:838 mailto:sage [2007/07/30(月) 20:29:15 ] >>847 さん 遊びに行きたいのはやまやまですが・・・。 Prologではダメなんです・・・。 初心者で申し訳ありませんが、 誰か優しい人お願いします。
849 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:36:21 ] 無能にキレる人というのは、無能によく出会うレベルの学校や職場にいる人が多い。 滅多に無能に出会わないようなハイレベルな環境で生きてる人は、もっと「余裕綽々にイジる」。 でも、無能によく出会うレベルの環境に居るってことは、自分のレベルも知れた物なんだよね、実は。 そのくせ上から目線というのはどういうことかというと、つまり自分では優秀なつもりなのに 現実がそれをまったく反映してくれない、そのギャップへの苛立ちを、こういう場所での小爆発で 少しでも解消しようという行為なわけ。 黒板におでこくっつけて頭冷やしたほうがいいよw
850 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:39:58 ] >>838 俺だったらschemeの上のprolog乗っけて>>847 のコード動かすけどな。 On Lisp prologでぐぐって
851 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 20:43:10 ] >>849 黒板に縛りつけられてチョークを出し入れまで読んだ
852 名前:838 mailto:sage [2007/07/30(月) 20:57:30 ] あの、私女子大生なんですが・・・。 優しい方にはなんでもお礼しますから回答お願いします。
853 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 21:02:57 ] VIPでマンマンうpしたら考える
854 名前:838 mailto:sage [2007/07/30(月) 21:04:40 ] (i) こうですか?わかりません(><)
855 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 21:29:23 ] >>849 えらく無能そうな人が出てきたなぁ
856 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 21:33:09 ] >>838 通りすがりのものですが、行きがかり上こちらも書いておく。 my_makelist(N,L) :- findall(M,for(1,M,N),L). 実用上はこれで良いのだが、ただライブラリを利用したようなものだから、 my_makelist(N,L) :- my_makelist(1,N,L). my_makelist(N,N,[N]) :- !. my_makelist(N,E,[N|R]) :- plus(N,1,M),my_makelist(M,E,R). とすれば、自分で書いた気がする。 なんでこのスレがこんなに伸びるのか(Part 17)、視察に来た だけです。PrologでまったりはまだPart 2なので。失礼しました。
857 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 21:47:43 ] >>849 そんなことどうでもいいから答えてあげたら?
858 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:37:17 ] >>840 (define my_makelist (cut iota <> 1)) (define (my_max l) (apply max l))
859 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:39:39 ] ほい > (define (my_makelist n) (if (= n 0) () (append (my_makelist (- n 1)) (list n)))) my_makelist > (my_makelist 5) (1 2 3 4 5) > (define (my_max lst) (if (null? (cdr lst)) (car lst) (my_max (cons (if (> (car lst) (cadr lst)) (car lst) (cadr lst)) (cddr lst))))) my_max > (my_max '(34 20 30 19)) 34
860 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:42:00 ] (define my-max max) のほうがいいんじゃ... apply 使う意味がわからん
861 名前:858 mailto:sage [2007/07/30(月) 22:45:58 ] >>860 おいおい。それじゃ>>838 で示してる仕様通りにならんだろ。
862 名前:デフォルトの名無しさん mailto:sage [2007/07/30(月) 22:53:01 ] (define (make_list n) (define (ml n l) (if (= n 0) l (ml (- n 1) (cons n l)))) (ml n '())) (define (my_max l) (define (max2 x y) (if (> x y) x y)) (define (mm x l) (if (null? l) x (mm (max2 x (car l)) (cdr l)))) (mm (car l) (cdr l)))
863 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 01:08:21 ] >>839 の動かないScheme処理系ってあるの ?
864 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 03:13:29 ] >>850 scheme なら schelog がいいんじゃない?
865 名前:838 mailto:sage [2007/07/31(火) 18:45:58 ] >>859 さん >>862 さん 来るのが遅くなりましたが、 問題なく実行できました、 有難う御座いました。
866 名前:838 mailto:sage [2007/07/31(火) 18:47:26 ] もう一度、質問をお願いします。 以下のような結果が得られる、 前置記法から中置記法へ変換する手続きを教えて下さい。 (prefix->infix '(+ (* a b) c))) を実行した結果 (a * b + c) (prefix->infix '(* 4 (** x 3))) を実行した結果 (x ** 3 * 4) お願いします。
867 名前:838 mailto:sage [2007/07/31(火) 19:10:41 ] exp、opr、opd のスタテックポインターを使って実行したいのです。 すいませんが、教えて頂けませんか?
868 名前:838 mailto:sage [2007/07/31(火) 19:12:11 ] × スタテックポインター ○ スタックポインター 間違えました。
869 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 19:17:02 ] 「質問をお願いします」ってのは日本語としておかしい
870 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 19:18:30 ] >>867 そういう宿題がでるときはスタックつかって前置記法の式を中置記法に 手で変換する方法の説明があると思うけどな。それをプログラムであらわせば いいだけだ。
871 名前:838 mailto:sage [2007/07/31(火) 19:19:55 ] 確かにそうでした。 >>866 に対する回答をお願いします。
872 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 19:30:03 ] >866 詳細不明だしあとは自分でやれよ (define (prefix->infix p) (if (pair? p) (let ((l (prefix->infix (cadr p))) (r (prefix->infix (caddr p)))) (append (if (pair? l) l (list l)) (list (car p)) (if (pair? r) r (list r)))) p))
873 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 19:30:38 ] Schemeによる記号処理入門の演習問題5.8だね。
874 名前:デフォルトの名無しさん mailto:sage [2007/07/31(火) 23:15:17 ] とりあえず、状況がわからんので答えてね。 >>838 1. 宿題の正確な問題文 2. 宿題の期限はいつまでか? 3. 教科書は手元にある?どこまで読んだ? 4. 教育的なヒントがほしいの?それともズバリ答えのほうがいい?
875 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:04:11 ] >>865 あれ?>>858 は?
876 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:22:52 ] ずばり答えてあげると本人のためにならなくて良いな
877 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:27:08 ] 一つ問題に答えてあげる代わりに 一つ問題を解いてもらえばいいんじゃないか 何が良いかな
878 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 00:31:51 ] 嫁姑問題とかどうだ
879 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 01:27:04 ] つーか>838も自力解決できない奴に何か期待しても無駄。
880 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 01:57:45 ] 彼はFizzBuzzをちゃんと書けるんだろうか
881 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 02:57:59 ] 演算子の結合優先順位とか気にしなくていいのかなあ。とおもった。
882 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 03:19:11 ] 気にしようぜ
883 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 08:42:45 ] 演算子? そんなものあったっけ?
884 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 13:48:00 ] >>883 スレを読め
885 名前:872 mailto:sage [2007/08/01(水) 19:17:16 ] 一応>>872 に演算子の優先度追加したのも用意してたけど、 本人から何も反応ないしやめておく
886 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:14:38 ] そうなんだよな。ズバリ答えていいのか、872 みたいに段階的にいくべきなのかわかんないんだよなー
887 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:32:29 ] 教育的回答をすればなんとかなるレベルの質問者じゃないので、 回答者とギャラリーが面白いと思う方でいいんでないの?
888 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:40:53 ] そーゆう上から目線はいくないと思うよ。 >>887 俺も昔は NetNews とかで痛い厨房だったけど、親切な上級者に諭されて目が醒めた。 だれだって慣れない内はちょっと痛い言動もあるし、上級者から見ればアホっぽい質問することだってあるさ。 何から手をつけていいからわかんないから答えをみながら考える、だって一概に間違いとは言えないだろう。
889 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:44:49 ] 887が上からの目線とは思わんけど
890 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:48:21 ] むしろ>>888 が上から目線
891 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 22:52:53 ] 慣れないうちとかそういう問題じゃないと思うな今回の人は
892 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:07:55 ] 「教育的回答をすればなんとかなるレベルの質問者じゃない」ってなんで決めつける? とか思ったんだけど、まあ、すまんかったね。空気悪くする気はなかったんだ。黙っとくわ。
893 名前:デフォルトの名無しさん mailto:sage [2007/08/01(水) 23:10:28 ] まあ放っておこう はい次。
894 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 00:22:04 ] schemeそのものとあんまり関係ないかもしれんけどさ、 R6RS(正確にはR5.97RS)で追加されてる "mantissa width"ってなんのこと? 直訳すれば"仮数部長"あたりだと思うんだけど、何? ぐぐってもよくわからんです 仕様を見るに、 "3.14 | 10" みたいに書くのかな?
895 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:25:29 ] >>894 単精度・倍精度のような実装依存の値ではなく、必要な桁数を要求して、 実装が単精度・倍精度を判断できるということでは?
896 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:32:00 ] >>894 R5.97RSのどこに書いてある?見つからんかった。 多分実数の印字表現の仕方の話なんだろうけど、 浮動小数点数の 仮数*基数^指数 の仮数の精度かな。 12345 = 0.12345*10^5 、これの0.12345に相当する部分の幅。
897 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:49:58 ] >>895 d てか、schemeって、複素数とか妙に数値に細かいよな… >>896 俺がさっき落としたPDFだと、13ページ左下 <ureal R> −> <uinteger R> | <uinteger R> / <uinteger R> | <decimal R> <mantissa width> んで、<mantissa width>の定義は13ページ右上 <mantissa width> −> <empty> | | <digit 10>+
898 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 01:55:36 ] >>894 C言語で浮動小数点定数を float f1 = 3.14f; double f2 = 3.14; とすると,バイナリで見たときf1とf2には別のデータが入るよね? 人間は浮動小数点定数のバイナリ表現を書くのが面倒だから "3.14" 等とだけ書いてコンパイラに変換させているわけだが このときコンパイラに「IEEE single相当(仮数が23+1桁)の範囲で最良の3.14の近似を使ってくれ」 or 「IEEE double相当(仮数が52+1桁)の範囲で最良の3.14の近似を使ってくれ」と区別した指示を与えてることになる. この一般化で,"3.14 | 10" は「ここの定数には,仮数が10桁の範囲で最良の3.14の近似を使ってくれ」と要求していることになる. これは当然IEEE singleよりは桁が多いし,またIEEE doubleよりは桁が小さいので 普通に3.14と書いてデフォルトの52+1桁(以上)の数に変換させたときとは違う演算結果を得るだろうね. Mathematicaやbc(1)のように浮動小数点数データの内部に「有効桁」という属性が含まれるようになる,という意味ではないよ. ソースコード内の "3.14" などという文字列から処理系内部の数表現への,対応付けの厳密化だね. 指数表記にe, s, f, d, lの区別ができたり,ずいぶん細かくなったものだ. >>896 R5.97RS 4.2.8 Numbers
899 名前:894 mailto:sage [2007/08/02(木) 03:05:51 ] 細かい話だけど、>>898 は > "3.14 | 10" は「ここの定数には,仮数が10桁の範囲で > 最良の3.14の近似を使ってくれ」と要求していることになる. って書いてるけど R5.97RSの該当部分を読むと Implementations that use binary floating-point representations of real number objects should represent x|p using a p-bit significand if practical, or by a greater precision if a p-bit significand is not practical, or by the largest available precision if p or more bits of significand are not practical within the implementation. ってことなので、仮数部の指定が"実装内で現実的で無い"場合は それより大きい仮数部を持つ浮動小数点表現をすればOK、という風に 読めるけど違うかな?メモリ量を最適化しようとする実装に対して 仮数部の最低ビット数を指示するためにある、という風に俺は解釈するけど、 どうなんだろう? 言い換えると、小さい仮数部pが数値が指定されたときにわざわざdoubleから 落としてsingleにする必要性があるのかってことだけど。
900 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 03:33:44 ] 多くの処理系ではわざわざ定数をsingleにはしないだろうけど、もしそれで高速になるならば しても良いという(コンパイラに対する)ヒントにはなるわな。 (そこまで最適化する処理系は少ないだろうけど)
901 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 12:37:25 ] common lisp の処理系で > (hogehoge '#+ 1 '(1 2 3 4)) (2 3 4 5) となる関数は無いでしょうか? > (mapcar '#+ '(1 1 1 1)'(1 2 3 4)) (2 3 4 5) でもいいんですが、リストの長さが不明な場面なので、 > (mapcar '#+ (make-sequence 'list (length'(1 2 3 4) :initial-element 1))) こういう感じの実装くらいしか思いつきません。 もし標準的な関数があればそちらを使いたいところです。 よろしくおねがいします。
902 名前:デフォルトの名無しさん mailto:sage [2007/08/02(木) 12:56:17 ] 足すのが1に決まってるなら (mapcar #'1+ '(1 2 3 4)) 決まってないなら (mapcar #'(lambda (x) (+ x 1)) '(1 2 3 4)) でいいんじゃないの? なにか書いてない他の制限があるなら知らんけど。