X



Lisp Scheme Part40 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2015/03/16(月) 13:45:52.92ID:EEYZoZ1i
Common Lisp、SchemeをはじめとするLisp族全般のスレです

■前スレ
Lisp Scheme Part39
http://peace.2ch.net/test/read.cgi/tech/1408017352/

■テンプレ
ttp://wiki.fdiary.net/lisp/

■関連スレ
【入門】Common Lisp その11【質問よろず】
http://peace.2ch.net/test/read.cgi/tech/1411307361/
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
http://peace.2ch.net/test/read.cgi/tech/1272469779/
【Lisp】プログラミング言語 Clojure #3【JVM】
http://peace.2ch.net/test/read.cgi/tech/1380333808/
【魔法】リリカル☆Lisp【言語】
http://peace.2ch.net/test/read.cgi/tech/1183396621/
0779デフォルトの名無しさん2017/12/25(月) 00:30:34.51ID:eatjhcJn
little schemerはsicpの前に読む人が多いのかな
自分は読まずにsicpに突っ込む予定だけど
0780はちみつ餃子 ◆8X2XSCHEME 2017/12/25(月) 02:53:01.57ID:BGNcpfiB
SICP は計算機科学の専門書だし、趣味プログラマには高度すぎるんじゃね?
SICP は現実的な部分についても書いてないから Scheme を (日常的なスプリクティング用途程度に) 普段使いしたいって
程度の気持ちで読み始めると、理論の部分で挫折して放り投げがちなんじゃないかな?

いや、ガチで背景にある理論を理解したいって志があるなら SICP から読むことに反対なわけではないけど、
もっと緩く Scheme を使いたいっていう気持ちで使う人も歓迎したいし、
最終的に SICP を読んで理解するのが前提みたいに言うのはちょっとどうかと思うよ。
0781デフォルトの名無しさん2017/12/25(月) 21:10:21.58ID:6RDgxEW3
>>776
その「atom」ってのが実は手続きなのよ。本文ではなく前文かどこかに定義が載っていたと思う。
0784デフォルトの名無しさん2017/12/27(水) 21:59:50.53ID:I7jb5yVK
最近はnumpyにしか実装がない数値計算法が増えた
Racketはnumpyのインターフェースあるけど、他はどう?
0785はちみつ餃子 ◆8X2XSCHEME 2017/12/28(木) 00:32:55.47ID:gVqXCAzj
Racket にはそんな変態なものがあるんか。
どうやって実現しているのか興味あるけど、ググっても見つけられなかった。
0787デフォルトの名無しさん2017/12/29(金) 08:38:15.66ID:xmeHjPXR
C++のインターフェースある処理系ならboost.numpyでnumpyは動きそうだが
0789デフォルトの名無しさん2017/12/29(金) 21:45:51.42ID:srQz1veo
機械学習ライブラリとしてなら優秀だけど
今話題になってるディープラーニング対応してない
0790はちみつ餃子 ◆8X2XSCHEME 2017/12/30(土) 01:36:01.07ID:JIvbFZ2K
>>787
boost.numpy はテンプレートもだばだば使ってるし、それをあらためて動的型の言語にバインディングするのあほらしいやろ。
0792デフォルトの名無しさん2017/12/30(土) 21:52:30.82ID:wf2zlY04
Fortran最強か。
0793デフォルトの名無しさん2017/12/30(土) 22:04:07.78ID:NAE2hL7d
gaucheかchickenでGUIやるの厳しい?
tkはlinuxだとめっちゃ汚いから嫌なんだけど
Iupというの気になるんだけど試してみた人いませんか
0794はちみつ餃子 ◆8X2XSCHEME 2017/12/30(土) 23:13:03.41ID:JIvbFZ2K
Gauche や Chicken なら GTK バインディングが楽に使えると思う。

私は使ったことないけど Racket の GUI ライブラリは使いやすいみたいに聞くので、
処理系にこだわりがないなら試してみてもいいんじゃない?
0797デフォルトの名無しさん2018/01/01(月) 15:16:31.98ID:rap/X9U7
(display "Happy New Year.")
0798デフォルトの名無しさん2018/01/01(月) 17:48:15.95ID:UkMdhu1o
今からClojure入門しようと思うんですけど
「Clojure for the Brave and True」
この入門書ってどうなんでしょう?
ポチるか悩んでいるので一押し欲しいです
0803 ◆QZaw55cn4c 2018/01/03(水) 18:25:40.25ID:1ORngv96
>>776
5章になって急に難しくなりました‥
http://d.hatena.ne.jp/kazu-yamamoto/20101021/1287625788
>リストのリストに対して、深く再帰します。見方を変えれば、これは木構造に対する再帰です。

それまでは(復習は必要ですが)理解に苦しむことはなかったんですが‥
0804デフォルトの名無しさん2018/01/03(水) 21:17:21.44ID:E10k9nmq
本は仕様の確認程度に留めて処理系の実装を一通り見た方が理解が早いよ
俺は昔SECDR-SchemeやTiny-Scheme辺りのソース読んでSchemeの全てを理解した
0805デフォルトの名無しさん2018/01/04(木) 06:24:55.50ID:ZoCOsoct
勉強していく上で参考になるプログラムを見つけられないのが痛い
特にgaucheとかchickenでのオブジェクト指向をどうやって身につければいいの
0806はちみつ餃子 ◆8X2XSCHEME 2018/01/04(木) 19:59:41.91ID:l3TQzZ4M
Gauche で書いたプロジェクトとしては WiLiKi とかどう?
shiro さん自身が書いてるのがいちばん Gauche 的に綺麗な書き方じゃね?
0807デフォルトの名無しさん2018/01/04(木) 20:10:19.94ID:L/Z2udtD
gaucheがライブラリを含めて固まってから書かれたならそう断言できるけど……
0808デフォルトの名無しさん2018/01/05(金) 07:35:42.44ID:zqdaz1Y8
RacketのプログラムをCと同じぐらいに高速化したい
Checkenで動くように改変すれば手間かからずに高速化出来るんだろうか
0810はちみつ餃子 ◆8X2XSCHEME 2018/01/05(金) 12:55:55.45ID:CY5W8ai3
Racket は速い方なので、それで不満なら単純に (手間をかけずに) 移植してもたいした高速化は望めないと思う。
処理系ごとのクセはあるから場合によっては載せ替えるだけで高速化になることも無いわけじゃないが、
やってみないと (検証の手間をかけないと) 結果はわからぬ。
0813デフォルトの名無しさん2018/01/06(土) 20:53:46.77ID:/zx+3sJQ
使ってみた感想あれば聞きたいね
日本語情報少ないし、用途もよくわからない
0816デフォルトの名無しさん2018/01/08(月) 07:56:07.49ID:iCZsrYFg
スマホアプリもあるんか
シーケント計算ベースの型システムってのが難しそう
0817デフォルトの名無しさん2018/01/08(月) 14:33:12.38ID:GiAqRu5e
>>816
> シーケント計算ベースの型システムってのが難しそう

別にそういうことはない
型システムを良く行われるように自然演繹で定式化するかシーケント計算で定式化するかという定式化のスタイルの違いだけだから
大雑把に言えばシーケント計算は自然演繹のmeta calculusというスタイルだというだけだからね
0820はちみつ餃子 ◆8X2XSCHEME 2018/01/13(土) 20:46:00.95ID:SxvD86sf
>>818
こんな感じかな?

https://ideone.com/w5FtZ9

ideone はコード中の URL らしきものを適当にぼやかす機能があるらしく、勝手に置き換えられちゃった。
「download」のリンクでは本来の通りになるみたいなので、 html からコピペじゃなくてそっちを使ってね。
あと、 openvpn を手元で導入せずにそれっぽく書いたのでほんとにちゃんと動くか確かめてないぽよ〜
0821はちみつ餃子 ◆8X2XSCHEME 2018/01/13(土) 20:47:24.55ID:SxvD86sf
>>820
いいかげんに書いたけど、まじめに書くならもうちょっと小さい手続きに分割するかも
0824デフォルトの名無しさん2018/01/15(月) 04:35:38.24ID:BnLwMjmV
ちょこっと修正すれば接続は出来ました
+(use srfi-11)
- (set! chosenCountry (list-ref 1)))
+ (set! chosenCountry (list-ref args 1)))

でもCtrl-cするとエラーが出て[autovpn] try another VPN? (y/n)に進めない😱

^CMon Jan 15 04:25:51 2018 event_wait : Interrupted system call (code=4)
*** UNHANDLED-SIGNAL-ERROR: unhandled signal 2 (SIGINT)
Stack Trace:
_______________________________________
0 (sys-waitpid (process-pid process) :nohang nohang?)
at "/usr/share/gauche-0.9/0.9.5/lib/gauche/process.scm":436
1 (process-wait process)
at "./autovpn.scm":42
2 (%with-signal-handlers (list (cons (%make-sigset SIGTERM) (^ ...
expanded from (with-signal-handlers ((SIGTERM (process-send-signal process
at "./autovpn.scm":40
3 (fn item)
at "/usr/share/gauche-0.9/0.9.5/lib/gauche/procedure.scm":303
0825はちみつ餃子 ◆8X2XSCHEME 2018/01/19(金) 06:28:45.76ID:Sx7ZjBeS
>>824
あー、たぶんやけどシグナルマスクがアレなんとちゃうかな。
先にチャイルドプロセスにシグナルが伝播して終了しとんのにシグナルを送ろうとしてもうそのプロセスのうなっとるって感じ。
Windows だとシグナルマスクはなんにも意味なくて、 Unix (POSIX ?) とは扱いが違うんで、ワイにはようわからんのやわ。
すまんの
0828はちみつ餃子 ◆8X2XSCHEME 2018/01/21(日) 02:44:01.85ID:+OtUX/+i
Scheme でオプショナル引数を受け取る手続きをどう書くか? という意味?
0829デフォルトの名無しさん2018/01/21(日) 03:29:23.34ID:88fiVAag
オプショナル引数を受け取れる手続きにどうやって渡すかという意味でつ
0830デフォルトの名無しさん2018/01/21(日) 04:44:31.01ID:+OtUX/+i
それって聞かなきゃわからんような要素あるか?
普通に引数を書く以外にすることないだろ。
0831デフォルトの名無しさん2018/02/03(土) 09:20:23.41ID:AXuwnjr7
はちみつ餃子 ◆8X2XSCHEME怒らせたら大したもんやで
0835 ◆QZaw55cn4c 2018/02/23(金) 00:38:20.14ID:mpvgXBL2
>>834
amazon でみたところ、「白と黒の扉」とかは、オートマトンやチューリングマシンの話だから lisp とはあまり関係ないんじゃないかな?
いや、 lisp でオートマトンやチューリングマシンを記述したいのだったら話は別だが

この手の話は、私は手元に
https://www.amazon.co.jp/dp/4627805500/
を置いて逐次参照しています、チューリングマシンの適当な発展書があれば、教えていただけるとうれしい
0836デフォルトの名無しさん2018/02/23(金) 20:04:19.51ID:VPGO0qVd
>>834
そういう目的には合ってないと思う
ある程度知ってる人が読みものとして楽しむもの
0839デフォルトの名無しさん2018/02/25(日) 21:58:20.05ID:a878t0wv
もねまね鳥をまねる
スマリヤン先生って去年亡くなってたのか
120歳まで生きると思ってた
0840はちみつ餃子 ◆8X2XSCHEME 2018/02/25(日) 22:22:47.90ID:ZmnJQjxy
スマリヤンって関西っぽい響きがあるよね。
スマリやん?www
0843デフォルトの名無しさん2018/03/04(日) 07:44:31.66ID:TAStDbGK
すまん。初心者です。教えてください。

仮に学校の比較?などを扱うプログラムを作ろうとしていて、schoolという1つの学校の情報をまとめたクラスを作るとします。
そのクラスの中に、以下のような学生の情報をまとめたテーブルの情報をぶち込みたいとして、どのようにこれらのテーブルをschoolクラス内に保存するのがいいですか。


名前 整理番号 性別 2ちゃんねら 馬鹿 橋本環奈好き 年齢
taro 0 #\M t t nil 16
hanako 1 #\F nil t t 16
nagisa 2 #\L nil nil t 18
hoge
piyo
foobar
...

学校によって人数は若干違いますが、基本的にテーブルの大きさはそれほど大きくないとします。
それぞれの要素を頻繁に検索・参照する必要があります。
僕が思いつくのは、

・schoolのstudentsというスロットに、1人のデータの1つのリスト・構造体・クラスにして、そのリストとして保存。
・ハッシュテーブルをつかって、下記のような形で保存。

2CHP ((NAGISA NIL) (HANAKO NIL) (TARO T))
BAKAP ((NAGISA T) (HANAKO T) (TARO T))

ぐらいなのですが、このうちどれがおすすめとか、これら以外にもっと便利な方法などありましたら教えてください。
よろしくお願いいたします。
08448432018/03/04(日) 08:03:30.14ID:TAStDbGK
作ったハッシュテーブルをschoolのstudentsスロットにぶち込むと言うことです。
あと、nagisaさんは馬鹿ではありません。失礼しました。

こーいうクラスとかの設計の基本と言うか定石ってどうやって勉強したらええの?
0845はちみつ餃子 ◆8X2XSCHEME 2018/03/04(日) 09:04:58.34ID:R9gQD4Ga
何が良くて何が悪いかなんてやってみなきゃわからんよ。
まず動くものを作ってから出来が悪いと思ったところを直していったらいい。
LISP の良さってそういうとこだろ。
0846デフォルトの名無しさん2018/03/04(日) 13:12:25.83ID:lKMWv6ic
studentクラスの定義がまず先かな
あとstudentsはキーを何にするかが問題
多分名前なんだろうけど、他の項目でも取り出したいときはハッシュテーブルだと面倒だから単に配列でも良いと思うがな
0847デフォルトの名無しさん2018/03/04(日) 17:37:51.82ID:A+6ka4SL
>>843
そもそもクラスは初心者向きじゃないし
Lispのような関数型言語では無理に使わなくても別にいい
多用したいならオブジェクト指向言語を使えばいい
0848はちみつ餃子 ◆8X2XSCHEME 2018/03/04(日) 18:07:26.80ID:R9gQD4Ga
オブジェクトシステムを積極的に使うべきかどうかは確かに場合によるし使わなくても割といけるが、
関数型とオブジェクト指向は直行する概念で、関数型であるからオブジェクトシステムの価値が低いというわけじゃない。
0849デフォルトの名無しさん2018/03/04(日) 20:03:49.57ID:A+6ka4SL
CLOSは初心者に分かりにくい
Lisp自体もそうだけどさらに分かりにくい
0850デフォルトの名無しさん2018/03/04(日) 21:45:17.24ID:t2oIRDJW
CLOSみたいなんじゃなくてもっと言語仕様に密着したオブジェクトシステムがあればと思う
例えばコンスセルはcarとcdrをメンバーに持つクラスみたいな
Gaucheってそうなってんだっけ?
0852デフォルトの名無しさん2018/03/04(日) 22:35:38.01ID:qI2WOoIZ
オブジェクト志向うんぬんの空気読まずにカキコ

>>844
>こーいうクラスとかの設計の基本と言うか定石ってどうやって勉強したらええの?

LISPというよりも、どちらかというとデータベース設計が主題になるね
もし手早くSchemeで小規模なデータベースを実装したいのであれば、
SLIBと呼ばれるよく知られたライブラリに含まれている
データベースを使うのが最短だと思う
・The SLIB Portable Scheme Library
 http://people.csail.mit.edu/jaffer/SLIB
日本語では、以下の書籍で文献データベースを主題として丁寧に解説されている
・入門Scheme
  - Schcme入門からXツールキットを使ったリレーショナルデータベースプログラムまで
 https://www.amazon.co.jp/dp/4879669547

もしLISP(による実装)を離れて一般的なデータベース設計そのものを勉強するなら、
たとえば定番の入門書(教科書)である以下の書籍の前半を読む
・リレーショナルデータベース入門―データモデル・SQL・管理システム・NoSQL
 https://www.amazon.co.jp/dp/4781913903

もしLISPプログラミングに自信があり、その上で広義のデータベースとして
「LISPによる知識表現プログラミング」を習得したいのなら、
遠回りになるけどSICP本の「4.4章 論理プログラミング」への挑戦を勧める
 
0853はちみつ餃子 ◆8X2XSCHEME 2018/03/05(月) 00:38:23.33ID:Q2HqOyhm
>>849
どうだろうなぁ。 初心者っていうか人によるんじゃね。
俺は JavaScript のプロトタイプベースのクソさに辟易した (実利があるのはわかってはいる) けど、
Gauche の (CLOS 風の) オブジェクトシステムにはそんなに忌避感ないし。
08548432018/03/05(月) 05:06:56.57ID:HTepcGeJ
みなさん、アドバイス・参考書の紹介などありがとうございます。

いろいろ自分で試してみて、どれがいいか決めようと思います。
とりあえずの方針としては、school-baseみたいなクラスの下に、studentsクラスを作って
そこにテーブル属性ごとにスロットを作って、alist形式でぶち込むことにしました。
キーの設定やら検索の便宜やら考えた結果、alistが一番手軽そうだと言うことで。

BAKAP ((taro.t) (hanako) (nagisa.t) ... )

みたいな感じで。学生を単位にデータを作ると扱いづらそうなので。
0855デフォルトの名無しさん2018/03/05(月) 22:58:53.34ID:uKMy0Btp
オブジェクト指向的には
学生ごとにインスタンスを生成して
各属性はインスタンスのスロットに入れるのが自然な実装だろう
属性が動的に変わるなら
そこをalist/plistにするか
プロトタイプ思考のOOPSを使うといい
0859デフォルトの名無しさん2018/03/11(日) 23:12:35.97ID:TCP/sl3z
教えてください。
cxmlで150mbぐらいのファイルをparseしようとしたら、
メモリのリミット来てるでーって怒られてダメでした。
巨大ファイルの扱い方教えてください。
08608592018/03/12(月) 03:24:23.18ID:/MpQ/gxq
saxとかklacksってのを使えば良いのか。
どうやっても空白を拾ってしまう。何でだ。
いろいろ頭痛い。
0862はちみつ餃子 ◆8X2XSCHEME 2018/03/12(月) 19:42:56.53ID:wZFlYBXj
>>860
空白はそのままに認識するのが XML の規約じゃなかったっけ。
空白を除去したいかどうかはアプリケーション側の裁量。
よく使われるライブラリなら何かオプションを持ってたりすることはあるかもしれんけど。
0863デフォルトの名無しさん2018/03/19(月) 16:28:35.15ID:wWyAeyoL
これがLispだ!は教科書っぽくていいな
これと実践あたりを順を追って読んでみようと思う
それからSICPにいこうかな

竹内初めてのとかLand of Lispみたいなノリの本こそLispらしいのだろうが、ついていけないと嫌いになる^^;
LittleはCPSからいきなり難しくなるし、その前も背景知識ないと消化不足になる
Yコンビネータも一応流れはつかめても、自分みたいな頭良くない初学者にはあの試行錯誤から何かを掴むのは難しい
Lispは表面的な軽さと話してることが乖離している書籍が多いし、独学者にはキツイ

これらが、同時並行的にあーなるほど、となると悟ったという事になるのかな?
0864 ◆QZaw55cn4c 2018/03/19(月) 17:56:01.30ID:lFWK67Qs
>>863
>LittleはCPSからいきなり難しくなるし、その前も背景知識ないと消化不足になる
おっと、いつのまにか little schemer の読み込みが途絶えてしまっていた、今日から馬力をかけて、ぜひ読みきろう!
0865デフォルトの名無しさん2018/03/19(月) 19:28:13.49ID:VtB6yui4
CPSも紙に書いてトレースすることはできるんだけど
見た目が難しいのにご利益があまり感じられないのは俺の頭が悪いからかな?
0866はちみつ餃子 ◆8X2XSCHEME 2018/03/19(月) 20:10:47.01ID:RG1qd9Pc
>>865
Scheme の意味論的には重要なのは確か。
そういう理屈はどうでもいいやってのなら知らなくてもいいかもしれぬ。
0868はちみつ餃子 ◆8X2XSCHEME 2018/03/19(月) 22:47:45.65ID:RG1qd9Pc
>>867
うーん、俺も理屈をきちんと学んだわけじゃなくて CPS 変換を通して理解したんだけど、
CPS 変換しても何もつかめなかったのならどうすればいいんだろう……。

CPS は継続の理解の助けになるんだよ。
入門書で CPS 変換を取り上げるのは継続を理解させるため。
CPS 変換すること自体が普段のプログラミングですごく役に立つってわけではない。

継続ってのは call/cc で取り出せるやつってだけじゃなくて、
Scheme のプログラムでは常に背後にある。
Scheme に限らずどんな言語にも、 C にだってある。
call/cc は背後にあるのを表に引きずり出す仕組みなんだ。
だから背後でやってるやつを明示的にやったらどないや? っていうのが CPS なの。
そんだけ。
0870デフォルトの名無しさん2018/03/20(火) 11:33:11.49ID:U6Uv8xSd
>>868
> CPS は継続の理解の助けになるんだよ。

その通り

> CPS 変換すること自体が普段のプログラミングですごく役に立つってわけではない。

まあ普通のプログラミングではCPS変換なんて必要ないわな

> 継続ってのは call/cc で取り出せるやつってだけじゃなくて、
> Scheme のプログラムでは常に背後にある。
> Scheme に限らずどんな言語にも、 C にだってある。

上の3行はもちろん間違っていないんだけれども補足しておくと、
Cなどの通常のgoto文(やCのbreak文等のような制限されたgoto文)とか例外処理を有する命令型プログラミング言語の意味論(正確には表示的意味論)を語る上でこそ継続が不可欠になる

Schemeからcall/ccを除けば(call/ccやそれを含むライブラリ手続きの類を一切使わない範囲でしかSchemeを利用しない人は)継続を使わない意味論で考えても何も問題ない

例えば、命令型言語でも制御構文としてif文とwhile文しかない(goto文やbreak文等のジャンプは含まない)言語…しばしば「While言語」とか呼んで手続き型言語の表示的意味論の
説明用としてに最初に取り上げられるミニチュア言語(一応、万能ね)…の意味を与えるだけなら継続は必要ない

そういう単純な(いわゆる「構造的」な)制御フローしか許さない言語では、個々の文(命令)の意味は状態から状態への写像(つまり文の表すものは一つの状態変換関数)として考えれば済む

goto文や例外処理のような構文に関して制御の流れが(文の構文構造について)構造帰納的でなくなる制御フローを生み出してしまうものを含んだ言語の意味論を考えようとすると継続が不可欠になる
もはや、個々の文を状態変換関数(そして個々の式を状態の集合から値の集合への一つの関数)として考えるような直感的に分かり易い意味の与え方は通用しない

表示的意味論の生みの親のStracheyが、compositionalつまり大雑把には構造帰納的に意味を与える表示的意味論において構造帰納的でない制御フローを生み出すgoto文の意味を
如何に与えるかで悩んだ末に発明した概念こそが正に継続なんだ
(因みに日本語の表示的意味論の教科書でやや古いものは“continuation”の訳語として「継続」でなく「接続」という言葉を使っている場合があるが両者は全く同じ)
0875デフォルトの名無しさん2018/03/25(日) 00:56:23.32ID:1/5marwz
CPSは必ずしも再帰で使う必要はないということでいいのかな
リトルのCPSが消化不良なのは前の章までの理解が足りてないってことか
0877デフォルトの名無しさん2018/03/25(日) 23:02:19.40ID:wjjQa2Mo
再帰の際に、例えば階乗計算で終端条件から戻ってきて
1*2*3*.......*(n-2)*(n-1)*nと掛けられるものも継続ですか?
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況