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/
0764デフォルトの名無しさん垢版2017/12/18(月) 21:02:09.62ID:Idgcm8jE
C++には、GCとか実装から切り離して、実行環境をカプセル化した
関数オブジェクトがあるから、そのことかも
0765デフォルトの名無しさん垢版2017/12/18(月) 21:06:41.77ID:Idgcm8jE
ええと、一応念のため説明させていただきますが、C++では関数は
オブジェクトではないのです……
0768デフォルトの名無しさん垢版2017/12/23(土) 21:49:26.76ID:YzWkPP/t
schemeについてのことではなくてelispについてなんですが、同じかもしれないと
おもってお尋ねします。コードを書いた実行をして、(コードを読み込んで)
そのあとその実行して読み込ませたものをclearして、(書いているコードはそのまま
なんですが、読み込んだという事実をclearしたい)それで別のコードを下に書いて
その下に書いたものだけを実行するという風にしたいのですが、そういうclearする
ことは可能でしょうか?どのようにするのでしょうか?
0770デフォルトの名無しさん垢版2017/12/23(土) 23:28:54.90ID:YzWkPP/t
768の質問を取り消します。後日に尋ねるかもしれませんがその時には
よろしくお願いします
0771デフォルトの名無しさん垢版2017/12/23(土) 23:54:12.88ID:3ZTUAfyp
>>769
schemeってみんなインタプリタとかコンパイラの実装ばっかですね
schemeの勉強でもmapやappendを実装しましょうみたいなのばっかやし
まあguiもwebもゲームも低レイヤーも出来ないとなれば仕方ないんかな
0773はちみつ餃子 ◆8X2XSCHEME 垢版2017/12/24(日) 04:11:25.21ID:j1+IHmNs
>>771
あまり話題に上がらないけど GTK バインディングとかウェブフレームワークとかは有る。

FFI を使えばどんなライブラリでも使えるのでとりたてて分野が限定されているということは無い。
メモリ管理とか、Scheme として自然に使えるようにする面倒くささはあるので、
それを整備したものってのは最終的には物量の問題だと思う。
Chicken には Eggs が、 Racket には Planet というモジュール管理システムがあって公式リポジトリに登録されているライブラリの量もまあまあ多いので、
そのあたりから興味があるものを探してみたらいいんじゃない?
0774はちみつ餃子 ◆8X2XSCHEME 垢版2017/12/24(日) 04:26:34.47ID:j1+IHmNs
>>772
Scheme の record は R6RS と R7RS で違うし SRFI でも微妙に違うのがいくつもあるので、
処理系によってサポート状況が違って使いにくいってのは感じるかな。
それでも多少ラップすればそれなりの移植性は確保できるので、
個人的には積極的に使ってる。

class というかオブジェクトシステムについては Scheme ではまとまった提案がないから
CLOS をベースにデザインされたものが多いとはいうものの処理系による差が激しくて、
最初から特定の処理系をターゲットにすると決めている場合じゃないと使わないな。
でも使うと決めたら積極的に使ってる。
0776 ◆QZaw55cn4c 垢版2017/12/24(日) 22:39:11.33ID:WikwUycQ
人生3度目の the little schemer です。
xyzzy で確かめながら読んでいますが、一つ疑問が生じました。
教科書では

(lat? (atom turkey or))

と印刷されていますが、手元の処理系(gauche 0.9.5) では

(lat? '(atom turkey or))

と関数 lat? の引数に ' をつけないとうまくいかないのです。
これはどういう理由なのでしょうか?この ' は scheme の用語ではなんと呼ばれているのでしょうか?
ずっと教科書を読んでいくうちに自然とわかってくる事項でしょうか?

よろしくお願いいたします。
0777はちみつ餃子 ◆8X2XSCHEME 垢版2017/12/24(日) 23:08:21.47ID:j1+IHmNs
>>776
' は quote の略表記。 たとえば '(a b c) は (quote (a b c)) と書いても同じ。

私はその本を持ってないからそのコードで何を教えようとしてるのかよくわかんないけど、
quote はかなり基本的な要素なので理解できるようにしてるとは思う
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 を読んで理解するのが前提みたいに言うのはちょっとどうかと思うよ。
0784デフォルトの名無しさん垢版2017/12/27(水) 21:59:50.53ID:I7jb5yVK
最近はnumpyにしか実装がない数値計算法が増えた
Racketはnumpyのインターフェースあるけど、他はどう?
0785はちみつ餃子 ◆8X2XSCHEME 垢版2017/12/28(木) 00:32:55.47ID:gVqXCAzj
Racket にはそんな変態なものがあるんか。
どうやって実現しているのか興味あるけど、ググっても見つけられなかった。
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 的に綺麗な書き方じゃね?
0808デフォルトの名無しさん垢版2018/01/05(金) 07:35:42.44ID:zqdaz1Y8
RacketのプログラムをCと同じぐらいに高速化したい
Checkenで動くように改変すれば手間かからずに高速化出来るんだろうか
0810はちみつ餃子 ◆8X2XSCHEME 垢版2018/01/05(金) 12:55:55.45ID:CY5W8ai3
Racket は速い方なので、それで不満なら単純に (手間をかけずに) 移植してもたいした高速化は望めないと思う。
処理系ごとのクセはあるから場合によっては載せ替えるだけで高速化になることも無いわけじゃないが、
やってみないと (検証の手間をかけないと) 結果はわからぬ。
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 を手元で導入せずにそれっぽく書いたのでほんとにちゃんと動くか確かめてないぽよ〜
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 ?) とは扱いが違うんで、ワイにはようわからんのやわ。
すまんの
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/
を置いて逐次参照しています、チューリングマシンの適当な発展書があれば、教えていただけるとうれしい
0839デフォルトの名無しさん垢版2018/02/25(日) 21:58:20.05ID:a878t0wv
もねまね鳥をまねる
スマリヤン先生って去年亡くなってたのか
120歳まで生きると思ってた
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))

ぐらいなのですが、このうちどれがおすすめとか、これら以外にもっと便利な方法などありましたら教えてください。
よろしくお願いいたします。
0844843垢版2018/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
オブジェクトシステムを積極的に使うべきかどうかは確かに場合によるし使わなくても割といけるが、
関数型とオブジェクト指向は直行する概念で、関数型であるからオブジェクトシステムの価値が低いというわけじゃない。
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 風の) オブジェクトシステムにはそんなに忌避感ないし。
0854843垢版2018/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しようとしたら、
メモリのリミット来てるでーって怒られてダメでした。
巨大ファイルの扱い方教えてください。
0860859垢版2018/03/12(月) 03:24:23.18ID:/MpQ/gxq
saxとかklacksってのを使えば良いのか。
どうやっても空白を拾ってしまう。何でだ。
いろいろ頭痛い。
0862はちみつ餃子 ◆8X2XSCHEME 垢版2018/03/12(月) 19:42:56.53ID:wZFlYBXj
>>860
空白はそのままに認識するのが XML の規約じゃなかったっけ。
空白を除去したいかどうかはアプリケーション側の裁量。
よく使われるライブラリなら何かオプションを持ってたりすることはあるかもしれんけど。
■ このスレッドは過去ログ倉庫に格納されています

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