Lisp Scheme Part35
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2012/09/19(水) 10:41:56.61■前スレ
Lisp Scheme Part34
http://toro.2ch.net/test/read.cgi/tech/1327819028/
■テンプレ
http://wiki.fdiary.net/lisp/
■関連スレ
【入門】Common Lisp その9【質問よろず】
http://toro.2ch.net/test/read.cgi/tech/1330888006/
0153SCHEME餃子 ◆8X2XSCHEME
2012/10/11(木) 13:09:44.77Unix source って書いてあるやつはソースコードが入ってるだけだから、
その中には実行バイナリは無いよ。 さすがにこれは >>152 と同意見だわ。
sh が何か、ソースコードが何かくらいはググって調べてね。
0154デフォルトの名無しさん
2012/10/11(木) 13:31:34.78まずその参考にしてるサイトだか本だか知らんが、最初にそれを投げ捨てる。
次に、そのUbuntu用の.shファイルは「Self-extracting shell script」と書いてある通り、
自己展開するシェルスクリプトだから、ターミナルなどからそのまま実行する。
そうすると、色々とメッセージが出てくるからそれを読みながら指示に従う。それだけ。
メッセージは英語なので英語を読む気がないなら諦める。意味が理解できなくても厳しい。
見てるとLinuxにもEmacsにも凄い不慣れな印象を受けるんだけど、
そんな状況で新しい処理系を使おうとしても、ありとあらゆることが意味分かんないと思うよ。
普段Windows使ってるなら最初のうちは素直にWindowsでRacket使えば良いじゃん。
最終的にLinuxでやりたいにしても、Linuxに慣れてから改めてLinuxでRacket使えば良いし、
Emacsもそう。Emacsに慣れたら改めてRacketをEmacsから使えば良いよ。
0155デフォルトの名無しさん
2012/10/11(木) 13:58:34.98これあったらcall/ccいらない
0156デフォルトの名無しさん
2012/10/11(木) 14:38:00.080157はちみつ餃子 ◆8X2XSCHEME
2012/10/11(木) 15:02:23.31その手順で学ぶのは良いと思う。
Racket は統合環境が有って初心者に使い易い選択だと思うし。
0158143
2012/10/11(木) 15:03:47.500159デフォルトの名無しさん
2012/10/11(木) 15:56:26.11手伝わせるんだ。言語はもちろんLisp。
0160デフォルトの名無しさん
2012/10/11(木) 16:29:05.22保存するファイル形式はやっぱりS式がいいんでしょうか
(データベース
(品名1 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
(品名2 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
(品名3 値段 購入日時 購入場所 在庫の数 使った数 何に使ったか)
)
こうしてくと、値段が変動したりした時に混乱するのですが、
同じ品名でも値段が違ったら分けた方がいいんですかね
0161デフォルトの名無しさん
2012/10/11(木) 16:31:08.36(品名 使った日時 使った数 何に使ったか)
を別にするとよさそうですね
うん
0162デフォルトの名無しさん
2012/10/11(木) 16:34:47.01(品名1 値段 購入日時 購入場所 購入数)
(品名2 値段 購入日時 購入場所 購入数)
(品名3 値段 購入日時 購入場所 購入数)
)
(消費DB
(品名1 使った日時 使った数 用途)
(品名2 使った日時 使った数 用途)
(品名3 使った日時 使った数 用途)
)
これで購入DBから品名で検索して消費DBの使った数から引くと
在庫がいくつあるか判りますね
これでいいかな
0163デフォルトの名無しさん
2012/10/11(木) 16:56:15.25日付に型なんてないから、32bit値でいいかな?
文字列のがいいかな?
日付と時刻は項目として分ける意味がないから文字列だな
"12/10/11 16:49:00"
"121011 未明"
"今日"
"忘れた"
とかありえるし
あ、使ったのを在庫に戻した場合どうすればいいんだろう?
書き換えるのは論外だから、消費DBに
(品名 戻した日時 -戻した数(負数) "戻した")
を追加するしかないか
0164はちみつ餃子 ◆8X2XSCHEME
2012/10/11(木) 17:56:05.43でも、規模が大きくなってデータベース的なことをするならそれに特化して進化してきたシステム
(リレーショナルデータベースや key value store) を使う方が効率的。
柔軟性こそ Lisp の本領なので、
今の段階ではそんなこと気にせずとりあえず思い付いたように書いていけばいいんじゃないの。
問題があればそのときに修正できるだけの柔軟性があるのが Lisp ってもんだろ。
0165デフォルトの名無しさん
2012/10/11(木) 20:28:41.80会社で使うならともかく、
個人でデータベースなんか使うと、
存在自体忘れたり、面倒になって使わなくなるので、
なるべく小規模で、どこでも見れるようにテキストベースにしたく、
そうなるとLISPかなーと思いました
0166デフォルトの名無しさん
2012/10/11(木) 20:44:07.37ム板よりデータベース関係の板の方が本職が居て良いと思うぞ。
>>160-163とか思いっきりそういう話だし。
0167デフォルトの名無しさん
2012/10/11(木) 21:23:25.81これ最強
0168はちみつ餃子 ◆8X2XSCHEME
2012/10/11(木) 21:44:03.370169デフォルトの名無しさん
2012/10/12(金) 15:55:32.89こわい
0170デフォルトの名無しさん
2012/10/19(金) 14:53:47.960171デフォルトの名無しさん
2012/10/19(金) 16:20:00.340172デフォルトの名無しさん
2012/10/19(金) 16:52:50.94末尾再帰最適化や継続が不完全な実装も多 (特に C や Java とのやり取りが主のもの)。
だから、静的スコープで単一名前空間なら Scheme、でいいんじゃない?
0173デフォルトの名無しさん
2012/10/19(金) 17:06:43.71Schmiz
0174デフォルトの名無しさん
2012/10/19(金) 17:20:33.570175はちみつ餃子 ◆8X2XSCHEME
2012/10/19(金) 17:26:24.95マクロはともかく (まだ議論がぶれているので) として、
末尾再帰最適化や継続は Scheme の顔なので、
それなしで Scheme を名乗るのはちょっと微妙だと思うなぁ。
あえて Scheme を名乗らなくても、
(部分的に Scheme 風の) 新しい Lisp 方言のひとつってことでいいんじゃね。
0177デフォルトの名無しさん
2012/10/19(金) 21:33:26.33指しているよね。不思議だ。
0178デフォルトの名無しさん
2012/10/19(金) 22:45:00.22これも不思議だな
0179デフォルトの名無しさん
2012/10/19(金) 22:49:08.910180デフォルトの名無しさん
2012/10/19(金) 23:52:10.830181デフォルトの名無しさん
2012/10/20(土) 02:59:43.44デキがショボければShameと呼ばれるのは間違いない。
0182デフォルトの名無しさん
2012/10/20(土) 21:37:56.940183デフォルトの名無しさん
2012/10/20(土) 21:50:03.480184デフォルトの名無しさん
2012/10/20(土) 22:44:33.710185デフォルトの名無しさん
2012/10/20(土) 23:31:44.31CLはsbclとかなんか味気ない。
0186デフォルトの名無しさん
2012/10/20(土) 23:36:07.19SCHEYAKI すき焼きスキーム
0187デフォルトの名無しさん
2012/10/20(土) 23:44:37.110188デフォルトの名無しさん
2012/10/21(日) 22:23:53.06RacketがClojureみたいに総合的な開発者向けイベントに参加して広報してた。
0189デフォルトの名無しさん
2012/10/24(水) 23:53:10.42(チック姉さん
というのを思いついたので誰か薄い本をはよ
0190デフォルトの名無しさん
2012/10/25(木) 00:01:38.280191デフォルトの名無しさん
2012/10/31(水) 15:05:08.07問わない)を具現化した・具現化しやすい環境って
なんだろう。生活の中でケータイの電卓以上のこと
がしたいし、計算履歴を残せるとうれしい。入力支
援があるとなお良い。
数年後、タッチパネルにUbuntuを入れられる世の中
になるなら開発せずに待つんだけど。
0192デフォルトの名無しさん
2012/10/31(水) 23:34:07.45http://www.sony.jp/CorporateCruise/Press/200901/09-0108/
0193デフォルトの名無しさん
2012/11/02(金) 01:56:43.430194デフォルトの名無しさん
2012/11/02(金) 22:17:34.710195デフォルトの名無しさん
2012/11/02(金) 23:14:31.74clojure もJVMの都合で末尾最適化を仕様に入れなかったという話だし
0196デフォルトの名無しさん
2012/11/04(日) 15:25:21.550197デフォルトの名無しさん
2012/11/04(日) 21:29:20.88こういうのを github に上げる奴は見てもらう価値があると思ってやってんの?
それとも単なるバックアップ先として使ってるだけ?
0198デフォルトの名無しさん
2012/11/05(月) 09:44:24.190199デフォルトの名無しさん
2012/11/05(月) 15:54:27.02http://www.google.com/cse/home?cx=013299269060639926749:0zjwws1-vxu&hl=ja
「scheme -sicp」みたいな感じでこの辺使ってみたらどうよ?
0200191
2012/11/05(月) 18:14:56.02>>193
もうすぐ2013年だし、2009年1月は古くない?
http://kakaku.com/pc/note-pc/ma_0/s5=-10/
ミニノートって言うんだっけ?いわゆるEeepc系ってタブレットに変わっちゃったんだね。
どこのメーカーも作っていないようだ。
http://kakaku.com/pc/pda/ma_0/s1=1/s2=-5/
一万円切ったほぼ最新Androidも時間の問題で発売されそうだから、Androidで開発して
おくのが一番の近道なのかな。
>>193
誰か作っていそうだけど、マイコンで作るのも楽しそうだね。
ネットに繋げないとして入力デバイスは何がいいんだろ。
0201デフォルトの名無しさん
2012/11/06(火) 00:21:13.62http://android.allappli.net/d_jp.gr.java_conf.hilite.schemepad.html
0202デフォルトの名無しさん
2012/11/06(火) 19:33:07.28racketが一番いいのはドキュメントなのに
0204デフォルトの名無しさん
2012/11/18(日) 08:40:41.950205デフォルトの名無しさん
2012/11/18(日) 14:12:07.73標準出力にこう出力されるものです
; real 0.000
; user 0.000
; sys 0.000
(with-output-to-string (lambda () (time (list 1 2))))のように
with-output-to-stringを使うと空文字が返ってきます
0206デフォルトの名無しさん
2012/11/18(日) 14:49:29.24ここで聞いた方が早いかも
0207はちみつ餃子 ◆8X2XSCHEME
2012/11/18(日) 15:42:00.08time の結果は標準出力ではなく標準エラー出力に表示することになっているので、
標準エラー出力を捕えないといけない。
こんな感じかな。
(call-with-output-string
(cut with-error-to-port <>
(cut time (list 1 2))))
0208はちみつ餃子 ◆8X2XSCHEME
2012/11/18(日) 15:48:51.72(define (with-error-to-string thunk)
(call-with-output-string
(cut with-error-to-port <> thunk)))
(with-error-to-string (lambda()(time (list 1 2))))
0209デフォルトの名無しさん
2012/11/18(日) 19:31:40.33マニュアルのgauche.timeのところ見てみ。
0210デフォルトの名無しさん
2012/11/19(月) 02:18:32.99ありがとうございます。
標準エラー出力が出力先だということを見落としていたのはまずかったです。
勉強になりました。数値を取得できるのは意外でした。いじってみます。
0211デフォルトの名無しさん
2012/12/03(月) 06:56:39.61(0.9999999999999999 1.0999999999999999 1.2)
これ理解できないのですが
誰かご説明お願いいたします。
0212デフォルトの名無しさん
2012/12/03(月) 08:23:43.55逆順で作る理由はリスト作るの簡単だからかな。
0213デフォルトの名無しさん
2012/12/03(月) 08:27:17.09(unless (and (integer? count) (>= count 0))
(error "count must be nonnegative integer: " count))
(if (and (exact? start) (exact? step))
;; we allow inexact integer as 'count', for the consistency of
;; giota and liota in which we can also accept +inf.0 as count.
(let1 count (exact count)
(do ([c count (- c 1)]
[v (+ start (* (- count 1) step)) (- v step)]
[r '() (cons v r)])
[(<= c 0) r]))
;; for inexact numbers, we use multiplication to avoid error accumulation.
(do ([c count (- c 1)]
[r '() (cons (+ start (* (- c 1) step)) r)])
[(<= c 0) r])))
なるほど、確かに。
0214デフォルトの名無しさん
2012/12/03(月) 14:31:12.96ありがとうございました。
0215デフォルトの名無しさん
2012/12/06(木) 12:36:06.37Welcome to Racket v5.2.1.
> (require srfi/1)
> (iota 3 1 0.1)
'(1 1.1 1.2)
CL-USER> (loop :for i :from 1 :to 1.2 by 0.1 collect i) ;; cl
(1 1.1 1.2)
ベタなネタだけどLISPのメイン処理系(複数可)、サブ処理系、ほとんど使わないけど
入れている処理系のアンケートを年2回(コミット数を維持できるなら数回やっても可)
やらない?
IPバレたくない人もいるだろうからプロキシ機能ありで項目ごとにコメントできて、
CUIで動くプログラムを誰か書いて。忙しい人もいるだろうから以前の投稿内容は維持
されて、投稿期間に実行すればいいだけ。プログラム作成者が恣意的にデータをいじれ
ないように厳密なスキームを作ってプログラミングを書いて欲しい。プロキシ変更
などによる連続投稿はありを前提として規制できるならメールアドレス提供、ID、
パスワード発行等の労力負担程度まで許容して投稿側の便利さを追求して欲しいと思う。
プログラム作成者とサーバ提供者を分離した方がプログラム作成者の敷居は下がるのかな。
参考 ttps://www.archlinux.de/?page=PackageStatistics
スルーされそうなので、超亀レスでもいいのでレスください。私はサクッと具現化する
能力はないのでプログラム作成者が現れずにレスの状況によっては私が作ることを検討
しないといけないのかもしれない。
0216デフォルトの名無しさん
2012/12/06(木) 13:07:18.640217デフォルトの名無しさん
2012/12/06(木) 13:09:11.05しかも他人に作らせるつもり満々とかなにそれこわい。
0218デフォルトの名無しさん
2012/12/06(木) 13:35:31.81こわい
0219デフォルトの名無しさん
2012/12/06(木) 14:01:24.450220デフォルトの名無しさん
2012/12/06(木) 22:00:49.60はやってない しょりけい
そんなの LISP じたいの マイナーさ かんがえたら ごさ
0221デフォルトの名無しさん
2012/12/07(金) 00:30:31.09ありがとうございました。
0222デフォルトの名無しさん
2012/12/09(日) 13:16:30.41applicableとかですかね
0223デフォルトの名無しさん
2012/12/09(日) 14:04:53.390224デフォルトの名無しさん
2012/12/09(日) 15:21:45.000225はちみつ餃子 ◆8X2XSCHEME
2012/12/09(日) 15:23:03.08Lisp 全般はわからないけど Scheme の用語の中には相当する言葉はないと思う。
apply という言葉もマクロには使わないし。 (マクロ展開の実体を use という)
operator もマクロに使う言葉じゃないなぁ。
見た目に同じでもプログラム的な作用としては違うから、どうしてそういう一般化した用語が欲しいのか気になる。
強いて妥当な言葉をひねり出すなら「式の先頭」くらいじゃね?
0227デフォルトの名無しさん
2012/12/09(日) 15:31:07.240228デフォルトの名無しさん
2012/12/10(月) 10:09:27.75CL的にはoperatorでOK。
www.lispworks.com/documentation/lw50/CLHS/Body/26_glo_o.htm
>>226
gaucheならオブジェクトだしCLでもオブジェクトだし。
0229デフォルトの名無しさん
2012/12/22(土) 13:59:08.93'(1 2 3) == '(1 . (2 . (3 . ()))) == (cons 1 (cons 2 (cons 3 '())))
どれがどれのシンタックスシュガーなのかサッパリ分からん
0230229
2012/12/22(土) 14:06:09.07'(1 . ((). (2 . ()))) これが (1 () 2) こんな感じで通っちゃうし
(length '(1 . ((). (2 . ())))) これは 3 になるし、終端判定に()は利用されてないんじゃね?
だったら終端に()付ける必要なくね?って思っちゃう
0231デフォルトの名無しさん
2012/12/22(土) 14:33:02.55初めてだと、listが見た目分かりやすいような気がする
(list 1 2 3)
0232デフォルトの名無しさん
2012/12/22(土) 14:34:22.09コンスセルはテキストに載ってないか?
コンスセルを書いて、よく考えて見ろ。理解が早まる。
0233デフォルトの名無しさん
2012/12/22(土) 14:36:21.30http://www.geocities.jp/m_hiroi/func/abcscm02.html
0235229
2012/12/22(土) 15:17:11.00ありがとう。lengthの実装見てなんとなく理解できた。
()が要素にあったらそこを終端と判断する、ってわけじゃなく、cdrの戻り値が()であれば終端と判断する、ってことか
と、理解してからコンスセルの形を見れば一目瞭然だったw
んー、ドット対の利用価値がイマイチ分からんけど(consで説明すりゃいいじゃん……)もう少し読み進めてみます
0236デフォルトの名無しさん
2012/12/22(土) 15:17:57.98名無しに戻ります
0237はちみつ餃子 ◆8X2XSCHEME
2012/12/22(土) 15:45:06.32ドット対はコンスセルの外部表現で、cons はコンスセルを生成する手続という違いがある。
文字列で言えば "ab" と (string #\a #\b) の違いと説明すればわかるかな?
0238デフォルトの名無しさん
2012/12/22(土) 20:11:21.84リストで実用的なプログラムをいっぱい書いてから戻って考えた方が
理解が速いんじゃないの。
cons回りにかけた10時間が意味があったのかよくわからん。
SICPはいつ読めばいいのかね?
0239デフォルトの名無しさん
2012/12/22(土) 20:54:14.44ドット対は関数の可変長引数が楽になる
0240デフォルトの名無しさん
2012/12/23(日) 11:30:21.020241デフォルトの名無しさん
2012/12/23(日) 11:54:07.780242はちみつ餃子 ◆8X2XSCHEME
2012/12/23(日) 12:44:48.06エラーにする処理系はまだいいけど、黙って不可解な動作をする場合もあるから要注意。
Gauche だとリテラルが一定という期待のもとに最適化する場合があるみたい。
http://blog.practical-scheme.net/shiro/20100106-modifying-literals
R6RS だと例外を投げるように明記されてる。
http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3a%E7%BF%BB%E8%A8%B3%3aR6RS%3a11.4.1%20Quotation
http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3a%E7%BF%BB%E8%A8%B3%3aR6RS%3a5.10%20Storage%20model
0243デフォルトの名無しさん
2012/12/23(日) 13:42:12.440244デフォルトの名無しさん
2012/12/23(日) 13:48:18.26http://www.faqs.org/faqs/lisp-faq/part3/section-14.html
0245デフォルトの名無しさん
2012/12/23(日) 19:11:24.370246デフォルトの名無しさん
2012/12/23(日) 20:26:15.95わかっててツケにしているんだからマクロを沢山書くようになってハマってから
ツケが回ったと思ってその時に考えればいいんじゃないの?
その頃にはSchemeの語彙も増えているだろうし、開発環境も整っていて解析も
しやすいでしょ。中学校の連立方程式を振り回して難しい問題を解いている
イメージだ。微分積分で楽な解法があるんじゃないの。
0247はちみつ餃子 ◆8X2XSCHEME
2012/12/23(日) 20:37:54.88言語の機能は相互に関連して成り立っているので、
簡単な方から難しい方へ学んでいけばいいというわけじゃない。
どうせ行きつ戻りつするのだから、
意義をわからずに学ぶよりは実際につっかえるところまで一旦先に進むのも有りだと思う。
0248デフォルトの名無しさん
2012/12/23(日) 21:31:18.420249デフォルトの名無しさん
2012/12/23(日) 21:49:15.78え? Series? 僕もさっぱり理解できません。
0250デフォルトの名無しさん
2012/12/23(日) 22:09:34.22読みやすくするために展開するってことは、はじめからマクロにしなけりゃいいんじゃ…
0251デフォルトの名無しさん
2012/12/23(日) 22:33:30.28マジレスすると、macroexpandとそれに類する機能の話。
マクロのデバッグには必須だと思う。知らなかったら便利だから使ってみて。
0252デフォルトの名無しさん
2012/12/23(日) 22:52:15.39結果、似た構造を持つマクロが大量生産される
定期的にマクロだけあつめてリファクタリングしたい
■ このスレッドは過去ログ倉庫に格納されています