>>984 前スレ
> おれquicklispには非常に期待してるんだ。ネイティブコンパイラのある言語で、
> ああいうライブラリ管理がある言語って、実は少ないんじゃないかしら。
どういうこと?
機能としてのadsfとの違いがわからない。
quicklispの方がインストールできる率が高いぐらいの認識だわ。
Linuxディストリのパッケージ管理ソフトのapt系やyum系やemerge系やArchLinuxのpacman(yaourt)系みたいなことってadsfでできないの?
Perlとかはどうなん?
>>3 パッケージ管理で気に入ってるのはLeiningenのclojarsリポジトリかな
もの凄く楽
>>3 quicklispは依存するライブラリをリポジトリからネットワーク経由して勝手に取ってくるよ。
(要はyumとかaptみたいに)
asdfってそんなことできたっけ?
>>6 それはさすがにできる。
検索機能があったかは、ようわからん。
というか、他の仕事でSBCLを触れていなくて、どんどん忘れていく。
作りたいもの、いっぱいあるのになあ。
Clojureだけど、仕事で使える自分は幸せなんだなぁ
Common Lisp では型宣言出来るみたいだけど、Scheme で型宣言出来るような方言ある?
Chickenならforeign-lambdaの戻り値に型指定が必要だから似たようなことができる
Typed Scheme なんてのも
>>12 へー、Type Inference(型推論)がある。暗黙変換あるのかな。
関数の返値を (list a b) でなくて (values a b) にした方が便利な場合ってのが重いつかない values って何のためにあるの?
>>15 卑近な例だと整数の除算とかだと便利
CLだとtruncate
>15 ハッシュを扱った例を調べてみな。nilがデータ内のnilかデータ内で無いことを 返すためのnilかで使われとる。 たちを扱えるようになってきたら初級から脱却ぢょ。
動的言語の最適化がしにくい関係で使うものっぽい?
ほとんどのコンパイラはvaluesの結果をリストにせずスタックに積んで返すだけ。 だから明示的にリストにして返すよりメモリ消費が少ない。 だからリフティングにも便利。
>>7 ちょっと遅い反応だけど。
多分、ASDF-Installと混同してる。ASDFはファイル間での依存関係を定義したり、
ロードやコンパイルの手順を統一するための枠組み。makeとかに該当する。
そのASDFの枠組みに乗っかって、ライブラリの導入を自動化するのが、
ASDF-InstallやQuicklisp。こちらはCPANやRubyGemsとかと同じ層の枠組み。
ライブラリの自動ダウンロードや検索をするのはこっち。
>>15 性能が必要なとき、コンシングを避けるために使える。
>>16 のリンク先にもあるけど、意味論上の理由を無視すれば、
単に性能への要求が全て。同じことは大体はリストでもできる。
Schemeでの(values)とかの例外を除いて。
多値にあまり必要性を感じない人は結構いて、Gerald Jay Sussmanなんかは
ttp://trac.sacrideo.us/wg/wiki/WG1Ballot1Results > It is important to allow multiple values that can result in multiple definitions
> and assignments, but it is not apparent to me why we need a special data
> type to implement them.
って言ってる。
普通に考えれば構造体でも定義して返せばいいわけだし、
わざわざ特殊なものを積極的に使う理由にはならないなあ
>>18 の例にしてもnilと区別したいならノードを返すとか他にいくらでも方法はあるわけで
>>23 何かにラップして返すと、受ける側でアンラップしなきゃならん。
変数に束縛する場合はdestructuring-bindとかパターンマッチが使えるが、
最初の値だけそのまま他の関数に渡したい場合などは一手間余分にかかるし。
それから、APIの互換性を保ったまま後付けで余分な値を返すようにできるのは
仕事でコード書いてると重宝する。単独の値→構造体へと戻り値を変更したら
呼び出してるところ変えて回らないとならないからなあ。
Schemeの多値は二番目以降の値を無視するような使い方ができないので
性能上の要求以外で使うメリットはあまり感じないが。
CLの多値は使わない分を捨てられたり、足らない分をnilで補ってくれて嬉しいんだけど、 たまに、一部の値を返し忘れてるのをnilにされちゃって、バグの原因に気付けずに頭がおかしくなって死ぬ。
>>23 特殊かなぁ? 謎だ。Haskellのように、Maybe/Eitherを定義すればできるけど
>>23 「わざわざ××でなくても○○でいい」という主張は説得力に欠けると思う。
××と○○のどちらに重みを置くかで簡単に逆転するもの。
実際、「わざわざ多値でなくても構造体でいい」という主張に対して
>>24 は「わざわざ構造体を使うより多値」って反論だろう。
だけどこの反論は「手間」に焦点をあてて重みを具体的に主張してるのでそれなりに説得力がある。
こういうときには構造体の方が手間が小さいとか、こういうときは手間をかけてもなお構造体の方がいいとか、
「多値を使う理由がない」よりも「構造体を使う理由がある」で主張してくれた方が良い議論になりそうな気がする。
じゃ言うけど、 多値で返す値は順番に依存してるのが良くないんだよ 構造体は名前を使えるぶん間違いが少ないし順序を変えたりするのも楽 それとSchemeで性能とか言われても説得力がない 構造体返しても最適化のレヴェルはほぼ同じだし どうすかね
下らねえ。
↑そういう応えしか返ってこないんなら反論無しと受け取るよ 構造体はそれ1つを知ってればいいが、 多値は関数それぞれが何を返すのか知ってないといけないのに加えて、 その順番には何の根拠もないから仕様変更に弱い 後で何か付け足す場合とか考えないのかな? 普通に考えれば積極的に使う物ではないという判断に至ると思う
だから多値を推すなら名前付きにしろって思うんだよ 関数引数にも言える事だけど
まあ、関数の引数が見逃されてきたのは、 呼び出し側のインターフェースで引数を強制してるからだけどね 可変長引数の使いにくさを見れば多値がいかに迂闊なインターフェースか判ると思う
多値のせいで例外処理みたいなすっ飛んでく処理とか複雑になってしまわない? 例外受け取っても何が入ってるか判らんとか R6RS以降追ってないけど
順番に依存よくないな!Scheme みたいな狭い世界じゃなくて、 数学の世界を名前付き引数に改革しようぜ!
(set! result (lambda() (values 1 2 3))) result => 1 (ref-values result 0) => 1 (ref-values result 1) => 2 (ref-values result 2) => 3 とかw 嫌んなっちゃうな
おっと、括弧が1たりないw
つまり多値がファーストクラスでないのがいけねえんだってことね
>>35 何でdestructuringするマクロ使わんのだ。
単にreceiveとかcall-with-valuesの下でリストやベクタ、
構造体を使えば良いだけで、他からは隠蔽できる。
この辺の話は全部
>>16 と参照元に書いてるよ。
>>28 「Schemeで性能と言っても説得力がない」と言われちゃうと
Schemeで準リアルタイムシステム書いてる自分の立つ瀬がないんだが。
構造体を作って返すと、最適化でアロケーションを消してもらうのは大変で、
Stalinみたいに全プログラム解析をやるハメになる。多値なら
アロケーションが起きないことが(使ってる処理系で)保証される。
最近GCの性能は上がってるとはいえ、no consingで書くのはバカにならないよ。
そんなコードをSchemeでわざわざ書くな、と言われたらサーセンとしか言えないが。
>>28 >>30 Schemeでの性能の話に説得力がないとか言われてもなー。
現実で業務とかに使ってる人もいるし、StalinとかはCLの処理系と戦えると思うけど。
それと、構造体を現状の多値の代わりに、というのは色々問題出ると思う。
少なくとも、返す側の関数単体じゃそれが多値の代用として使われるかどうか判断できないから、
Lisp語族で当たり前に行われる、インタラクティブにコンパイルする場合、最適化できないよね?
この辺は自分は詳しくはないので、解決する方法はあるのかもしれないけど。
現実的な(将来コンパイラが十分に賢くなったら、とかでなく)範囲であるなら教えて欲しい。
被ったw
あと、要素の追加や削除が将来的に起きそうな場所を抽象化するのは当然で、
どこで多値を使うかはケースバイケースだと思う。
>>30 は極論に見える。
関数の引数と同じで、固定できる部分は複数の値で、他は抽象化されたものを。
そんなにおかしい話かな?
すっごく素朴な疑問で悪いんだが、多値で使われなかった値って、 そのうちGCされる、って理解で正しい?
>>42 CLの場合だとスタックに戻されるような実装(コンパイラ)が多数を占めてるからGC対象ですらない。
値渡ししかできないわけじゃないんだし 効率重視なら多値なんて使わない方がいいけどな
関数から戻るたびにmake-*するよりはましかと。
副作用を使っちゃうと、状態を変更する関数を呼んだ後に以前の状態を必要とする可能性がある場合、 オブジェクトをコピーしないといけないから、副作用を伴わない多値のが効率が良いこともあると思うよ。
多値についてたちが悪い議論はもうやめようよ。
call/ccで単純に関数の中途で大域脱出し、 デバッグ用途(イミディエイト機能のような)に使いたいのですが、 例を教えていただけませんか。 いまいちcall/ccを使うタイミングがわからないのです
>>48 イミディエイト機能って何? ググってもわからなんだ。
Chez Scheme とかではエラーのときにデバッグモードになるけど、あんな感じのこと?
汎用的に作るのは難しいか出来ないと思うけど、とりあえず使用例みたいなので目的とするところを示してくれんか。
>>49 ベクターを操作する巨大な関数です。
一ループごとに文字列を読み込み、見合った操作をして文字列の先頭を削り再帰します。
(define interprit
(lambda (program memory offset)
(cond
((eqv? programの先頭 #\a) 処理)
...
)
;*ここで脱出*
(interprit 削ったprogram memory offset)
)
)
ループする毎に継続をset!して脱出し、
処理を確認したら戻りたいです
>>50 「処理を確認」をもう少し詳しく。
なんとなく、ブレークポイントを設定してローカルな変数を見たいのかな、
とか思うんだけど、どうなんだろう。
最初はcondないの内部処理は、各条件ごとの内容をそれそれ別関数にまとめて 作って、ひとつの関数から、cond条件わけの関数とそれぞれの関数に分けて作った ほうが最初はいいよ。そのほうが読みやすくなるので。 何もかも一つでやらそうとするのはあまりいい傾向だとは思えない。
余談ではありますが、 call/ccとdelayを用いてpromiseを返却し、逐一動作が出来ました。
gambitcやchikenでvalues使うと大幅に速度が上がるっていうなら できるだけ使うように心がけるかな
>>58 SCHEME餃子の巣はやっぱSchemeスレなんじゃね?
shibuya.lisp はどーだった?
クロージャスレから引越しというか。 授業が奥乃先生と複数担当態勢だったりしたのは引き継ぎの目的もあったのかな。 最終講義のアナウンスがあるとしたら年明けかな?
62 :
デフォルトの名無しさん :2011/10/23(日) 11:51:45.52
某氏と某氏のトラブルも収まったのかな。 Shibuyaでは喋らんと言ってたけど 良かったんじゃない?
一応当時、熱くなって申し訳ない、みたいな感じで本人謝罪してたよ。 あとは、相手もう運営側から手を引いてるし。 何にせよ、また出てくれたのは良かったね。
>>62 ひげぽん氏の声はよく聞こえて良い。
滑舌が悪い人や、集音がイマイチなときがあったりするのはなんとかならんかな。
マイクゲインも大きすぎると雑音も拾うから骨伝導タイプのマイクを使うとか。
それと、映像はもう直接PCに繋げちゃってもいいような気がする。
でかい会場のスクリーンでは見えるけど、中継では見づらい、という場面で ズームしたり、身振りが入った説明をしてるのでカメラを振ったり、という時に 中継担当者の手間が増えるので、そのへんは微妙かも。
>>66 多くは発表資料も公開してるからそっち見ながらでだいたい問題ないかもな。
70 :
デフォルトの名無しさん :2011/10/24(月) 06:22:17.84
スライド画像で差し替えるのは、ページ送りをプレゼン時と同じタイミングにするのが結構難しいです。 元映像見ながらだとなんか微妙にずれるので、わずかに入っているスペースキーを叩く音とかを手がかりにしてました。 あと、音声についてはいつも悩ましくて、人により声質やマイクの持ち方が違うのでなかなか安定しません。 あまりに聞き取りづらいのは、編集時にボリューム変えてますけど、あまりやり過ぎると雑音まみれの変な音になるので悩ましいところです。 発表者の机の上にボイスレコーダを置いておいて、あとから合成するのがいいと思うけど、これもマーカーみたいなのがないと合わせるのがちょっと難しかったり。
UST中継では入力オーバーっぽいノイズ入ったりしてたよね。
音割れしてるのがひとつあって、体調も悪かったからそのまま切っちゃったんだけど、 あれは音量の調整のミスなのか、発表者の声が大きすぎたのか。 さておき、いつも動画アップロードお疲れ様です。
ヘッドセットやピンマイクで強制するとか? いや、そういう面倒な事こそLISPを活用してだな
どう頑張ろうと声の大きさを一定にすることは無理でしょ。声出してるのが プロのアナウンサーとかじゃないんだから。 最初のAD変換で音が割れたりしてたらリカバリーのしようがないので、 そこの機材で入力レベルの調整をすればいいんだけども。
・マイクを違う距離に数台用意してマルチトラック録音して後で選別する ・音圧拾ってレールかなんかで距離を自動調節する装置を作る
PCMレコーダーに自動レベル調整機能が付いてるものがあるようだけど、 PCだと難しいんかな?
細かいこと気にすんなよ 音割れしてたら見るのやめる程度の内容なんだから
RIP
ご冥福を祈ります。
ジョブス、リッチーに続いてマッカーシーまでもか。 R.I.P.
こんどはマッカーシーが天寿を全うしたのか。 RIP
>>77 発 者 同 . 。_ ____ 争
生 同 .じ . /´ | (ゝ___) い
.し 士 .レ .__/'r-┴<ゝi,,ノ ro、 は、
.な で .ベ ∠ゝ (ゝ.//` ./`| }⌒j
.い し .ル } ⌒ /`ヽ、_∠l,ノ ・ヽ´
.! ! か の / ´..:.} >、、___, .r、 ソ、`\
/ ..:.:.} / |∨ ` ̄
/ ..:.:./ | 丶
/ _、 ..:.:.:.{ .{.:.:. \
{ ..:Y .ゝ、 {.:.:.:.:. ヽ
|、 ..:/ 丿 .:〉 >.- ⌒ . ヽ
/ {. ..:./ ソ ..:./ .( ..:.:.:` ..:}
./..:.:}.:.:./ ヘ、 ..:./ .\ ..:.:r_,ノ、.:.:}
./..:.:/|.:/ {.:./ X.:.:}.} X X
/..:.:/ .}.:| }:/ .Y丶ヽ Y.:Y
. __/.:/ { } 《.〈、 _,,__>.:》丶 Y.:\
/.:.:.:.:.::/ !.:.:ゝ ゝ.:. ̄ヾ ´:.:.:.:.:.:.:.:.:ヾゝ \.: ̄>
某声優ユニットの方も7月で活動終わってた QEPD
GCもマッカーシー由来だったの
(define (f x) (define-macro (bl) '(if (> x 0 ) #t #f)) (bl) ) (f 10) racketでは動くけど、他の処理系ではやっちゃいけない?
そもそもdefine-macro自体がRnRSにないので、 あんま気にしても仕方ないと思う。
define-macro は RnRS で提供して無いけど、
R6RS では簡単に define-macro を実装できる。
典型的な実装例はこんな感じ。
(define-syntax define-macro
(lambda (stx)
(syntax-case stx ()
((_ (macro . args) body)
#'(define-macro macro (lambda args body)))
((_ macro transformer)
#'(define-syntax macro
(lambda(stx2)
(syntax-case stx2 ()
((k args (... ...))
(let ((v (syntax->datum #'(args (... ...)))))
(datum->syntax #'k
(apply transformer v)))))))))))
これなら
>>89 のようなことは問題なく出来る。
でもまぁ Scheme 的には let-syntax を使う方が楽ではあるだろうね。
なんだよボーイズラブって
じゃあこんなのも問題ないのね でも `[`(,,op ,'y) あたりがうまく動いてくれない (define (g x) (define-macro (tmpl op) `[`(,,op ,'y) (list y ,op)]) (match x [`(- ,z) (list z '-)] (tmpl '+) ) )
>>91 各処理系がdefine-macroをどう実装してるかが問題なんだから、
RnRSでdefine-macroをどう実装するかはこの場合関係ないだろ。
独自の定義でオリジナルを上書きして差異を吸収するってんなら別だけど。
96 :
94 :2011/10/30(日) 13:34:27.93
結局、期待通りに動きませんでした。何がいけないのかよくわからない。 (define-syntax tmpl (syntax-rules () ((_ op) [(list op y) (list y op)]))) (define (g x) (match x [`(- ,z) (list z '-)] [(list '/ z) (list z '/)] (tmpl '+) [_ 'else] ) ) (g '(/ 8)) (g '(+ 10)) (g '(- 12)) (g '(= 19))
何を期待してるのか判らんから助言しようもないが、 matchの仕様を見るにpat部分は普通の評価はされない場所だから 何か勘違いしてるんだろ。例えばパターンの最初の2行は [(- z) (list z '-)] [(/ z) (list z '/)] でいいんじゃないかと。 tmplもそう書き直せば多分動くでしょ。 全く確認してないが。
あ、だからpat部分は評価されないからダメだよ 出てくるシンボルは「パターン変数」になるそうだから。仕様よく読め。
おまいらそんなに括弧が好きなの? かっこつけんなよ。
templated match macroとか作ったら論文になるんだろうか どんな雑誌に投稿するのか知らないけど
ずいぶん前の話だけど、 Active Basic スレで正規表現ベースの構文定義を提案してた奴がいたなぁ。 あんまりフリーダムでも困るけど、 Lisp の場合は結局はS式だから、それがちょうどいい枷にもなってる気がする。
個人的には、演算子の優先順位をなくせるという利点も推したい。 他にも、パースしやすかったり、式単位での編集を実装する目印になったり、 S式の利点は案外ある。特に、式単位で編集できないと困る人多いんじゃない?
>>103 優先順位の問題は確かに単純になっていいところではあるなぁ。
でも、それは簡潔さとのトレードオフがあるから一概に利点とも言えないかも?
今、思い付いたんだけど、どんな関数にしろマクロにしろ特殊形式にしろ「名前が付いてる」ってのは
ドキュメント引いたり定義場所へ移動しやすいって利点はあるね。
パースしやすいってのは処理系の実装者にとってはそうかもしれないけど、ユーザーに対する利点になるかな?
データのシリアライズを write 一発で出来て、 read で読んだら構造が出来上がってるってのは楽だけど、
プログラム自体をS式で記述するってのとは別の話では?
編集が式単位っていうのは良く挙げられるけど、他の言語でも単位が違うだけで何らかの塊はあるわけで、
実際にその塊単位での編集や移動も出来るわけで、開発環境のサポート次第じゃないかな?
S式は構文木を表しているから、逆に機械的に元の文脈を読み取り辛い気がする。 つまり、IDE泣かせ。開きカッコの直後に、どんな候補だせばいいんだろう。 IDE使わないからどうでもいいけど。S式好きだし。
S式で書くとコードがツリー状になるから,切り取るときの目安にしやすい,と思う. インデントされていればそれがよりはっきり見えるし. 命令型のコードは,意味を成すコードの塊を抜き出すのがかったるいと感じる.
括弧と頭のシンボルでほぼ全てを表現してるから 文脈の探索自体は楽なんじゃないかと思うけど 問題はマクロの処理かな マクロ内で定義したキーワードとかが候補に出ないんでは あんまり意味がないだろうし 展開したものを逆に辿っていくのは難しい
goshです。 質問です。 数ページにわたるCGIがあり、POSTパラメータを渡すのですが、継続を渡せないかとかんがえています。 中途から処理を再開すれば、無駄無くプログラミング出来ると思ったからです。 Q1.継続はなんらかの形でコンテナ化して保管できますか? Q2.継続は一度インタプリタが終了しても有効ですか?
両方無理。手続きの時点でできないので、継続も無理。
>>108 継続そのものをシリアライズするのは原則として無理です。
継続には環境フレームやら何やらがぞろぞろとくっついていて処理系の内部構造と不可分なので、
もしやろうとするなら、処理系が最初からシリアライズを強く意識した実装にする必要があります。
Gambit だと出来ますが、実用するなら不要な環境を捕捉してしまわないようにかなり注意が必要で、あまり簡単とは言えないようです。
オブジェクトの印字表現が全て決まってたら簡単だったのにねえ つまんない制限だよねえ
Schemeオブジェクトが全て印字/読み込み可能だったとしても、環境フレームからは openしているファイルディスクリプタだの何だのが間接的に参照されてるから そう簡単にはいかないよ。
113 :
108 :2011/11/03(木) 18:17:31.61
>> そうですか…残念です。 とにかくありがとうございます。
114 :
デフォルトの名無しさん :2011/11/03(木) 20:03:38.36
結局継続がファーストクラスなんて役に立たないってこった
たしかにバカの役には立たない
kahua とかは?
Kahuaとかはアプリケーションサーバとかの層のプロダクトなので、 基本的に起動し続け、継続をシリアライズしたりする必要はないよ。 継続を活用したウェブ開発をする場合、CGIだと厳しいと思う。
>>106 意味的な単位と表記上の単位が一致しやすいってことですね。
Lisp だと小さい単位で書きがちということもあって納得です。
宇宙全体をシリアライズできなくても 地球全体をシリアライズすれば十分
ありんことみじんこじゃ全然違うと思いますけどー 永続化する場合こんどはインスタンスの管理の問題があるけど
何を言いたいのかわかんねーよ。 比喩を持込むのはなるべく避けろってのは議論の基礎だろ。 もうちょっと具体的に言ってくれんか。
餃子がそれを言うのかw
餃子でもシュウマイでもいいじゃないか。by Lispトムヤンクン
もしかし継続って、外出しできてこそ本領発揮するんじゃないのか? 最初から仕様にもりこんでおけば今頃は超有名になってたよ
行者だと無条件であぼんされそうだから餃子でよかったと思う
>>123 なんでときどきDQN口調になるんだよw
>>129 煽らないとすぐに過疎るからだよ。
極論を書いたりするのも反論してみろっていう煽りだよ。
言わせんな恥ずかしい
餃子のせいで昨日の夜餃子食べたくて大変だった。 部分継続をシリアライズして、HTMLに埋め込むっていう、上で出てた論文は面白かった。 みんな色々考えてんだねー。
>>130 あんたがそこそこ勉強してきた人だってこと多くの人がわかってんだから
煽らんでもいいよ。それより食らいつくネタを考えたり、拾ってきたり
するといいよ。そのほうが健全なスレになる。by Lispトムヤンクン
継続外出しはR7RSで いつでも再開できるのがSchemeの常識に
>>133 俺が勉強してたらどうして煽りが要らないんだ? 意味わかんね。
議論しようぜってのはサイエンス的にもエンジニアリング的にも民主主義的にも美徳だろ。
俺に間違いがあるってのなら、反論しろよ。 意見を出せよ。
議論自体を拒否するのは不誠実だぞ。
>>135 何もわかってない奴が盛り上げよう?あるいはかまってもらおうと
する場合は煽りという選択肢を選びがちという事だよ。あなたの
場合は、その選択肢を選ばなくても他の選択肢で十分盛り上げられ
る技量を持ってるでしょと言ってるだけ。by Lispトムヤンクン
とりあえず行間はうめといたからこれで趣旨はわかるだろう。 最後に、餃子には期待してるよ。
継続をシリアライズしたりプロセスをまたいで移送したりできたら夢が広がりんぐ。
>>112 も言うようにポートのような外部とのインターフェイスだとか、
破壊的な処理だとかを考えなければ関連するデータを全部書出せばいいだけなので
いくらかの (かなり大きな「いくらか」だと思うけど) 制限有りでよければ出来そう。
というか、 Gambit 等ではやってるわけですし。
規格にするならあとはその制限をどのレベルにするのが妥当かって話ですよね。
例えば (継続に一般化すると説明が面倒なのでクロージャで説明) (let ((x 1)) (write (lambda()(set! x (+ x 1)))) (write (lambda()(set! x (+ x 2))))) みたいにふたつのクロージャを書き出したとして、 元々は共有しているはずの x が分断されてしまうのはつまらないので、 set! したら既に書き出したクロージャにも波及したりしたら面白いとか思った。 面白いだけで使いどころがないし非現実的だけど。 無難な落とし所としてはあくまで書き出した時点の環境ってことにするしかないかなー
Petite Chez Schme の 8.4 を入れたらイメージをダンプするオプションが無くなってたよ。 かわりに --compile-imported-libraries なるオプションが出来てた。 R6RS の実行モデルに合わせて変えたってことだと思うけど、 --boot オプションはあるんだよな。 暫定的な処置ってこと? 教えてエロいひと
>>139 「書き出す」っていうのは従来のファイルシステムを想定してると思うんだけど、
その想定は妥当なの? OS自体が一つのSchemeの実行イメージに載ってて、
メモリが自然に永続化されるようなモデルならそういうことも可能かもしれない
(効率との折り合いはあるけど)。Smalltalkの環境みたいな。
142 :
139 :2011/11/05(土) 17:50:35.07
今、サブマシンからの書き込みなのでトリップ無しで御免。
>>141 非現実的ってのはそこんところですね。
出力先を特殊なデータベースとかにするのも、
言語でそこまで踏み込むのは Scheme らしくないし。
さすがにこのへんは余興というか、面白いだろうなーという妄想レベルの話です。
143 :
139 :2011/11/05(土) 17:57:18.27
>>141 書き出すこと自体については可能だと思います。
Common Lisp なんかでは実行中のイメージをダンプしたりは普通ですし、
それをクロージャに繋がってるところだけに限定するか、
無理なようなら効率を無視してまるっと書き出すとか出来るでしょう。
SchemeでFizzBuzzってどこまで小さくできるの?
>>136 知るかボケ
にちゃんねるに何を期待してんだ?
ガキは家へ帰ってパパのチンポでもしゃぶってろ
>>148 ひどいなw
これ言われたら超屈辱的だわwww
ままのおっぱいじゃないんだ‥‥‥。
ナッパさまのクンッ!が必要だな
123 名前:SCHEME餃子 ◆8X2XSCHEME [sage] 投稿日:2011/11/04(金) 22:32:53.69
何を言いたいのかわかんねーよ。
比喩を持込むのはなるべく避けろってのは議論の基礎だろ。
もうちょっと具体的に言ってくれんか。
148 名前:SCHEME餃子 ◆8X2XSCHEME [sage] 投稿日:2011/11/06(日) 08:55:42.40
>>136 知るかボケ
にちゃんねるに何を期待してんだ?
ガキは家へ帰ってパパのチンポでもしゃぶってろ
いや…その書込みは別に意味はねえ ただの悪意よ
処理系がシステム巻き込んでクラッシュするようなプログラムを出してこそ、悪意。
>>153 悪意はある反面あなたの精神的な未熟さだけは理解できました。
By Lispトムヤンクン
>>149 当事者としてはすこぶる不愉快だが、2ちゃんだからこの程度のことは書く
人がいてもおかしくはないですからね。トムヤンクン
実際に対面して同じ事を目の前で言えるような人とは思えないし、
そこまで肝がある人じゃないだろう。それができるのが2チャンです。
心理的に不安定な人という印象だけが残ってしまったのも事実なのです。
これ以上は時間を捨てるようなものであり、オフトピでもあるので
これで失礼します。
>>156 何この粘着君。
空気読まない奴だと思ったらわかった上で乱してんのか。
タチ悪いわー
30過ぎるとタチ悪くなるよ
数ある(のかどうかわからないけど)関数型言語であえてLISPを選ぶ理由って何? それと関数型って言うとLISPの他はMLっぽいのが多い気がするけど他の系統ってどんなのがある?
LISPをマルチパラダイムやで?
LISP「は」
>>160 どういうものを関数型って呼ぶかは明確な定義があるわけじゃありません。 でも Scheme や CL はマルチパラダイムを標榜してはいますね。 LISP 族の中には純粋関数型のものだってあると思いますが、それは少数派。
関数型的な特徴は「プリミティブ」であって、その上に様々なパラダイムを載せられるのが LISP の強力な点だとされています。
例えば Java だって関数型のアプローチでプログラムすることは出来ます。 C++ を定理証明に使うアイデアもあります。
http://www.kmonos.net/wlog/102.html#_0103091022 でも、 Java は関数型ではなくて、 C++ は定理証明器ではありません。 何故なら、そういった書き方はプログラマがそういうパターンに沿って書くことが一応可能であるということであって、そのように書くための道具 (語彙) を作ることが難しいからです。
つまり、抽象度の違いです。 Java は手続的なアプローチに抽象化する道具は揃っていますが、そうではないパラダイムを持ち込もうとすると言語のサポートは望めないのです。
一方で、 LISP はどうでしょうか? SICP にあるような Prolog もどきや回路シュミレータを見ればわかるように、一旦ライブラリを構築してしまえば「もはやそういう言語であるかのように記述できる」のです。
これらの差が生じるのは、一般的な言語における抽象はそれぞれの言語ごとでのパラダイム (クラスとかテンプレートとか) が単位であるのに対し、 LISP ではS式という「記法」が単位であるからだと私は考えています。
あらゆるパラダイムをひとつの言語で実現できて、時には混在もできるというのは圧倒的な強みになると思います。 それが、私が LISP (Scheme) を好む理由です。 下手するとカオスになるというデメリットと隣りあわせではありますけどね。
>>163 そのトリップ、SCHEMEはともかく8X2Xって何?
>>163 JavaとかCだと、文と式があって、言語の拡張=文の追加・変更が難しい。
LispはS式で統一されてるので、Lisp自身の拡張が容易、ってのが大きいんじゃないかな?
16bit
理屈ではそうだけど 現実世界で圧倒的に役に立っているのは JavaやC++なんだけどな
ずいぶん狭い現実世界だな
餃子の相手をする人の相手をすることはない
やあ、言語の寿命が心配なのか? LISPの言語拡張は、S式が作り出した知恵の一つ、いや武器か。 普通のやつらは決して辿り着くことができないLISPの英知として、 S式が我々に与えたものだ。昔、規格策定で起きた大きな抗争の時にな。 あの時はホント、まいったよ。 見ての通り、継ぎ目すらない美しいフォルムだろ? 一体どんな仕組みでできてるのか、調べれば判るだろうが、 すまない。私には興味がないんでね。 詳しい事は、まだArc作ってるポールにでも聞いてみるんだな。 何か知っているんじゃないか? S式。 ろっと、驚かせてしまったようだな。 これは他の言語で言う、演算子でも文でもない。 いわばS式だけが作り出せる構造体だ。 ただ実行するだけでなく、データとして取り出せる。 例えば、この無数の括弧。気を付けろ、数えると一瞬で悟ってしまうぞ。 悟りとは何かだって? ハハハハ、それは昨日言っただろう? あ、すまない。君にとっては明日の出来事か。 いや、もっと先だったかもしれないな。 その日が来たら、また説明しよう。
アシタカ「LISPは死なないよ.構文木そのものだから」
つ AST
なんだかんだ言って、結局はLispだけ残ってきたわけだしね。
>>163 そもそもなんでトリップ付けてんの?
NGワードに設定しやすくていいけど。
>>173 波カッコ{} オプション
スター* 0回以上の繰り返し
縦棒| または
つまり、引数は無くても良い。ある場合は次の2つのうちのいずれか一方。
INTERACTIVE-STRINGの後ろに0個以上の任意個のPARAMETER
LIST
BNFってやつかな。
Lispを使うと普通のやつらの上を行けますか? また具体的にどのように上を行くのでしょうか?
上をいけたのは他の言語が未成熟だった昔の話 今じゃ下にしがみつくのがやっと
※行けと言うだけであり、行けることを保証するわけではありません ※具体的な方法は確認されておりません
>>177 俺が業界に入って以来VBも残ってるよ
俺が業界から去っても多分残ってると思うよ
そういうスパンで区切ると他の言語でも別に問題ないと思えてくる
普通のやつらの上を行けで思い出したけど 彼の作った言語はどうなったんだ 名前忘れて思い出せないけど
ちょっと前curlって言語があったな
>>184 Arcは普通にバージョンアップとかされながら、
一部の人に使われてるみたいよ。
gaucheのさぽせんに聞け
>>188 読んでわからなかったのなら他の人もわからない可能性が高いので、
WiLiKi の初心者の質問箱に書いたほうが後続の人のためになるかもね?
俺もSXMLのモディファイヤを使うのは始めてなので本当にこれが正しいのかよくわからないけど、
試してみた感じではちゃんと動いた。
;; 必要なライブラリを use する
(use sxml.tools)
(use sxml.sxpath)
(use sxml.ssax)
;; テスト用に元になる sxml を作る
(define sxml
(ssax:xml->sxml
(open-input-string "<xml><h1>2</h1><h1>3</h1></xml>")
'()))
;; id を生成するジェネレータ
(define id-maker (let1 x 0 (^() (inc! x) `(id ,#`"L,(counter)"))))
;; sxpath で対象ノードを抜き出してそこに id を追加
(for-each (cut sxml:set-attr! <> id-maker) ((sxpath "//h1") sxml))
;; これで id がついてるはずなので確認してみよう
(write sxml)
>>188 SXMLは基本リストを使った単なるツリーなので、
ツリーを操作するのと同じで問題ないよー。
>>190 みたいに副作用で破壊的に変更しても良いし、
map-unionとかで走査して、置き換えても良いし。
取り込まれてるレベルじゃなくて、 この分野はJavascriptがJavaと 一緒に最先端を形成してる。 pluginによる言語機能も メタサーキュラーJITに組み込まれる 実装が広く出回り始めたり。
Gaucheのtext.html-liteで 特定の条件を満たした時に 複数のHTML:p手続きを実行?するにはどうすればいいのでしょうか 例を出すと (when test (HTML:p "foo") (HTML:p "bar")) のように書くと、最後のbarのみが出力されてしまいます 意図しているのはどちらも出力させることです
>>194 どうせ最終的に write-tree するんだろうから、↓でいいんじゃないか?
(if test (list (html:p "foo") (html:p "bar")) '())
>>194 html:pとかは、HTMLを出力するのではなくて、
文字列やシンボルで表現されたHTMLのツリーを返すだけの関数。
だから、whenの仕様通り、最後の式の(html:p "bar")の値が返される。
>>195 みたいにリストで括るか、html:divとかで括るかすれば良いよ。
>>190-191 ありがとうございます。
sxpath の使いどころの流れが見えてきました。
いろいろと試してみます。
ほかの使い方は思っているのかよ
>>199 普通のプログラマがtak関数の応用について1%考えているとして、
がんばって考えた人が2%だとすると、98%ぐらい考えられていないからなあ。
まあどうでもいい
>>198 メガデモ的でもあるな、なんかちょっと感動した
インタプリタとかで、関数の再帰呼び出しの性能を評価する マイクロベンチマークとしては割と見かける部類だと思う
ベンチマークとしてならGabrielベンチマークとしてLisp界隈だとド定番だし、 他の言語のベンチマークでも見かけるくらいにはメジャー。
そーなのCAR
206 :
デフォルトの名無しさん :2011/11/14(月) 11:37:05.16
EclipseのSchemeのプラグインってないのかな。 エンジンはGauheを使えたらさらにうれしいのだけど。
208 :
デフォルトの名無しさん :2011/11/14(月) 11:53:30.09
やっぱSchemeWayしかないのかな。 ぜんぜん日本語情報がないよね。
ただでさえ人口が少ないSchemeで、さらに人口が少ないEclipseでの開発者で、 さらにさらに人口が少ない日本語話者による日本語の解説を期待しても始まらないよ。 日本語情報が欲しいならEmacs使わないと。マイノリティを貫くならそれなりの覚悟が必要。 そもそも英語の情報だって、最悪辞書見ながら読めば普通に意味が分かる程度には読める。 日本人なら誰でも長年英語勉強してるんだから。
>>210 おいおい。 それを方言としてまとめるのは無茶すぎだろ。 jk
>>192-193 Javaってひょっとして静的型推定なのでGCがある以外はC++とあんま変わらない?
確かに高速になったとは聞いたけど
Javaは速くなければならないというお金に直結する緊急課題が昔からあった LISPには特に無かった 結局流れるお金の量なわけです
>>213 Javaはなぁ、VisualAgeのScratchエディタがEclipseにも乗っていればよかったのにとつくづく思う
REPLみたいなこと出来てアレでの開発はCPU食う代わりに効率よかったんだけどな
Eclipseのスクラップブックじゃダメなん?
>>210 この阿呆はLispスレに何しに来たんだよ……。
言ってることもやってる場所も何もかも間違ってて突っ込み切れない。
方言として認識すれば日本語でドキュメント書いてくれるヤツが増えるのか?
後半の段落は1960年に発表されたLispに関係あるのか?
217 :
194 :2011/11/14(月) 22:11:59.71
>>216 批判は誰でもできるんだよ。じゃあ、日本語環境が厚くないのは、なぜ?
>>213 >> 結局流れるお金の量なわけです
そんな悲しいこと言うな。オレは信じてるよ、人の思いの強さを。
最後に勝つのはAIだよ、AI。
>>219 そもそもの話は外国産マイナーツールの日本語情報が少ないよ、って話だからな?
マイノリティの中のマイノリティが少ないのは当然だ、っていうとても当たり前の意見に、
「日本語を漢字の方言と見なせば多数派だ」とか言ってお前が絡んできたんだからな?
全然事情の異なるFreeBSDやLinuxの事例まで持ち出して。
質問についてだけど、日本語環境が厚くない、という曖昧な表現されても他人には分からんよ。
CLでもSchemeでもClojureでも、処理については多くがUnicodeレベルの国際化を達成しているから、
メッセージカタログとかのUI方面での対応の話と取るけど、構わないな?
単に、それをして受ける恩恵と、それに必要な労力が見合う人がコミュニティにいないからだよ。
開発者の興味とかコミュニティの大きさや文化、個人の趣味とか、色々な要素が関係しているが、
結局は人がいないという所に帰結する。
改善したいなら、コミュニティを広げて、影響力を大きくすれば良い。 そうすれば、英語が得意でUIの地域化に貢献したい人が出てきたり、 処理系やツールに投資してくれる企業が現れて、対応が改善したりする。 こうなって初めて、国からの援助も期待できる。 そういう風にコミュニティを変えていくために必要な労力と、 自分を変えて不自由なく立ち回れるようになる労力を比べて、 後者を選択してる人が多いだけの話。
>>222 「人がいない」って人が少ないって意味だよな。人が少ないと言えるのは何人ぐらいがいればいいの?
人が少ないとで思考停止しちゃうのは問題ないかね?
わざわざ言いたくないけど「日本語を漢字の方言と見なせば多数派だ」はジョークだからなあ。日本語
ユーザーが世界で考えると少ないというのに反論したかっただけ。
人が少ないで思考停止しちゃうのは問題ないかね?
マイノリティ云々言い出す奴でガチでそう思っている人がいるから発言は配慮しようぜ。
>>224 とりあえず、意図を教えてくれたのはありがたいな。今まで意味不明過ぎた。
あと冗談はかなり寒い。
>>211 を見ても。俺らが感性ないだけかもしれんが。
人の少なさを実感したいなら、GitHubやBitbucketで言語別にリポジトリを検索すると良いよ。
相対的にマイノリティなことは理解できる。絶対的に多いか少ないかは証明が難しいな。
こちらはことあるごとに人の少なさを実感するんだけど、それじゃ納得いかないだろうしな。
逆に、
>>224 は人が十分に多いと思う何らかの根拠があると思うんだけど、それは何?
思考停止してると思うなら、別の原因に何らかの心当たりがあるんじゃないのか?
>>219 は
>>218 のベンチマークにRacketがあるのにGaucheがない理由を想像できるかい?
>>225 人が少ないと言えるのは何人ぐらいがいればいいの?
↓訂正
人が少なくないと言えるのは何人ぐらいがいればいいの?
あと多言語と比べても日本語を使えるユーザーは十分いるし、日本は国としてはお金持ちだ。GitHubや
Bitbucketの話はそうなんだろう。それで実際に開発に関わっている日本人が人が少ないという話は肯定
しているよ。
でも、「人が少ない」という現状認識は聞き飽きたから、その現状認識への処方箋を出すべきなんじゃ
ないかという提案だ。
EclipseのSchemeのプラグインが欲しいと思うならLisper Schemer向けEclipseの勉強会(ネット回線なし)を
資料代(A4二枚のレジュメ)500円で都心で開けばいいんじゃないの。交通費のみでプラグイン開発者一人を
呼んで色々と話し合えばEclipse以外の話も出てくるだろうし、個人個人で何ができるかというのがみえて
くるんじゃないかな。三日坊主プロジェクトをいっぱい立ち上げてとりあえずやってみればいいんだよ。そ
して、隔月か、三カ月に一回集まって刺激し合えばいい。
3.11でみんなの意識が変わったから今がやり時だと思うよ。今の有事から終わらない日常に戻ったら何も変わら
ないだろうなあ。自分が言いたいのはそういう話。
>>226 どういう理由? マジで知らない。
そういう話を勉強会で顔を突き合わせて、問題意識を共有すればいい。一人で悶々と考えたり、プログに書いても
あんまり効果がないんだから、身体をもっと使うべきじゃないのかね。
他言語ユーザの多くは英語に不自由してない事実。
俺のチンコはファーストクラスオブジェクト
>>228 中・高・大学で10年以上教育を受けていて、日本人は英語を不自由にしていると言い切れるのかね。
「日本語環境が厚く無い」のを問題視するんなら、何を解決したいのかを整理した方がいいんじゃないか? 俺個人としては、マルチバイト文字処理が手軽に出来れば嬉しい。 もし英語読むの面倒だから、程度の理由なら、殆どのプログラム言語が英語ベースの現状で、随分甘えたやつとしか思わない。 そんなところの敷居を誰かが下げてくれるのをただずっと待つか、自分から積極的に今ある資料を活用して自分の付加価値も相対的に上げるのか、選ぶのは自分だけどな。
日本語のドキュメントが少ないのは、仕方がないよ。 プログラムを書くのもコメントは日本語より英語のほうが多いんだし。逆に 一部を除いて日本発のものの英語ドキュメントの貧弱さは寂しいと思ってる くらい。読むより書くほうが敷居が高いけどね。 日本語で〜と考える場合、すでに環境を整えやすいClojureをやっておけばい いよ。web関連ならこっちで十分だから。schemeならばgaucheでもperlのちょっ とした代わりくらいはできる。書籍はまえより充実してきてると思うけどな。
日本語のドキュメントが英語より読みやすくなっている例って 字の大きさぐらいだな。すまんね年寄りで
>>232 横だけど、clojureはweb以外だとあまり良くないってこと?
closureで気になったことがあります 作ったスクリプトを他のwindowsパソコンでも使えるように exe化できるのでしょうか?
頑張ればexe化もできなくはないけど 実行可能jarで妥協した方がいいんでないかな
238 :
235 :2011/11/16(水) 00:00:01.32
>>234 悪いとは言ってないし、そこまで判断してない。ただし、webに
というのはgoogle app engineやherokuに対応できるというところ
の強みがあるし、java系の強みを持ってる。だからweb関連ならこっちで十分と
>>234 Web以外は既存のjavaと敷居が一緒なんだよ
Webサーバサイドで使うと開発効率がJava+tomcatよりも高いのが魅力なんだ
>>239 , 240
レスありがとう。これなら本格的にclojure使おうと思っていたので、汎用には
欠点があるのかと気になったんだけど、そういうことなら大丈夫そうで安心した。
>>241 Clojureで速いプログラムを書こうと思ったら、ちょっと知識が必要だけど
最初ならプログラミングClojureやlabreplで遊んでればいいよ。:-)
竹内文書
まあ他に大した使い道ないしな
しょぼいLispマシン作った人だっけ? しかも復活祭までやちゃったんだよな
竹内先生の退官記念の最終講義、ようつべあたりで流せば良いのに。
>>246 具体的に指摘できないから「しょぼい」としか言えない、
馬鹿丸出しですねw
>>246 TAOの事いってるならおまえが馬鹿をさらけ出してるとしかいえない.
TAOならうちの研究室にあったけど 誰も使ってなかったな
こいつ自分のことゲルトミューラーとか言っててさすがに引いたわ せめてもうちょっと上手くなってから言えって感じだよ
青木淳とかもそうだけど、やたら古典の引用だののヘンな衒学趣味がうさんくさくて嫌い。 数学者が日本の品格みたいな本出すようになるともうヤキが回った状態であることが わかるのと同じようなもので。
興味のある言語にTaoと書いておいたら面接で爆笑された Railsエンジニアを募集してる会社の採用面接を受けた時の話。 転職エージェントに作れと言われて作ったシートに、「興味のある技術/言語」という欄があったんです。 仮想化技術とか色々書いたけど、プログラミング言語の中で興味があるのはTaoだったので、 Taoと書いておいたのですが、それを見た面接官のリアクションが酷かった。 面接官「Tao・・・ふははっ!Tao!」 面接官「Taoやってるんですか?wwwww」 俺「(唖然)は、はい・・まだS式を理解したぐらいですが。。」 面接官「Tao・・・ニヤニヤ」 その人はエンジニアで、当然Rubyのコードを書いている人だったので、 Rubyが「Matz Lisp」と呼ばれている事を知らないワケが無いだろうと思っていた。 つまり、このリアクションは"理不尽な状況に直面した時にどう対応するか"を見ているんだろうと判断し、あえて突っ込みは入れずに対処した。 しかし最後の質問で「何故RoRを採用したんですか?」と聞くと、 気まずそうに理由を話し、最後に「・・・と、聞いてます」と答えた。 つまりこの人は上からRubyを採用すると言われたから使っているのであって、 特別Rubyに思い入れとか無いリーマンエンジニアなんだなあと分かった。 mix-inとかもLisp発のテクニックだし、RubyやってるならTaoに興味を持つのは普通だと思うんだけどなあ。 多分ガチで知らなかったんだろう。
Lispの神様なんだっけ?w 何をしたのかわからないけどw
竹内自演よくないよ
lisperとは思えない頭の悪いコメントが並んでるな。
竹内、と書いただけで発作のように変なレスが増えるのな
英語版wikipediaには記事がないね Lispの神様なのに 嘘が通用するのは日本限定か
TAO/ELISは、携帯電話なんて話にならないほどのガラパゴスだった。 専用ハードに、ほぼ単一に近い言語環境。 電電公社ならではの採算も将来性も度外視したプロジェクト。
英語版に竹内先生の記事がないなんて糞だな 寄付すんの辞めたわ 金だけ取って肝心の中身がないなんて
(((((((((((((((囲碁、竹内の話題は荒れるので(禁止)で)
とはいえ コンピュータ分野で日本人名ついたのは竹内関数くらいじゃないか 他になんかあったっけ?
カリー化じゃないけど、竹内化といえば、すべてをたらい・・・(略
竹内関数が最大にして唯一の功績ってのがな 神様だって名乗るにはちょっと寂しい
まさか本人が神様と言ってるんじゃないだろ?言ってるとしたらかなり 傲慢だと思う。Lispの仏様という人もいたり、周りがヨイショしてるだけ だろ?そんなに政治力があってLisp界のナベツネやスターリンなのか?
少なくともゲルトミューラーとは名乗っている
いつから何がきっかけで神様って呼ばれるようになったの? 誰が最初に呼び出したの?
>>268 勝手に神様と持ち上げて、暫くしたら叩き落とそうとするのって、マスゴミがよく使う手だよね。
むしろ持ち上げる側でしょ、この人は
他にもあるぞ。二村射影とか、黒田正規形(Kuroda normal form)とか。
lispのなかって、KCL作った人が有名なんちゃうん? Practical Common Lispにもコメントを寄せてたけど。
俺はCommon Lispは使わないんだけど 話題になっているの聞いたことない
ECLやGCLの祖先だからな。一番最初のANSI Common Lisp処理系だといっても 爺しかもう知らんのかも。
あの、たいていのものは俺達で実装しよう、としたがるGNUの連中が、 こんないいものがあるなら俺達で実装するのやめよう、といったぐらいなのにな、 KCLは(その結果KCLをベースにGCLが作られた)。
276 :
デフォルトの名無しさん :2011/11/17(木) 15:51:11.61
KCLからGCLが造られてマルチバイト文字対応はおざなりになったのか。
UtiLispにしても、武蔵野通研にしても、ICOTにしても、 ソース出せないのが痛かったねえ。 出せたらもっと関連研究者増えてただろうに。 KL1のUNIX版が出てきたのも驚くほど遅かった。 UtiLispのC言語版公開も2000年代に入ってからじゃなかったっけ? ソースコード公開されている処理系が他にあるんだから、そっちに流れちゃうよね。
>>275 > あの、たいていのものは俺達で実装しよう、としたがるGNUの連中が、
そうなのか? guileだって最初はSCMをベースにしたし、ライセンスに問題が
なければ使えるものは使うんじゃないかと思ってた。
俺実装するのはフリーなライセンスでベースに出来そうなものが無い場合じゃないかと。
GNU Emacsにしても、Gosmacsをベースにしていたしな。 その後、Gosmacsは商用になったから、コードを全部排除したけども。
来年のlispの京都での会議って京都の先生の退官記念かなんかじゃないの?
既出だったらスマン Gambit REPL なんていう iPhone アプリあるんだね。
Androidでも動いてるね。 Gambitベースなのは、Gambit for AndroidとScheme REPL Module。 他には、JSchemeベースのScheme-droid、Scheme REPL、 Clojure REPL、Kawaなどなど。
palmの時代からそういうのはあったが 指でコードなんて書けるのかな
遊び以外では、きっとBluetoothキーボードとか使って打ってるんだろう。
285 :
デフォルトの名無しさん :2011/11/18(金) 21:40:53.05
え?
え?
質問です。 ((lambda (a) (a b)) c) 上のラムダ計算式の構文上の導出と それに関連する抽象構文木を生成せよ。 という問題が分からないのですが、どなたかご回答いただけませんか?
>>289 竹内がblogに書きこんできたとか
くだらないことは嬉々として書きこむくせに
肝心のことは回答しないのな
何のための掲示板だよ
竹内がblogに書きこんできたとか くだらないことは嬉々として書きこむくせにとか くだらないことは嬉々として書きこむくせに
これがたらい回し
竹内関数で音楽を生成するというやつ、 サンプルと同様のものを自分でも作って作業のBGMにしてみたいが どうやればいいんだろう
なぜここで聞く
ひどいマッチポンプを見た
296 :
287 :2011/11/19(土) 06:12:48.81
どなたか本当に答えてもらえないでしょうか? 調べてもわからなかったので・・・
>>296 講義でやってない内容は課題として出ないんだから、
素直にテキストとかで復習するとか、友達にノート見せてもらえば?
どうしても分からないなら、質問しに行った方が良い。ポイントも稼げる。
今後も分からないことがある度にここに聞きに来る気?
今ちゃんとやらないと、本当に講義に付いていけなくなっちゃうよ?
テキストが糞訳だったりする場合だってあるだろ
>>298 まずは自分の脳みそがクソだと認識しろよ
誤訳で原書じゃないと 練習問題解けない本があるとか
ちゃんとテキスト読めばわかるだろ。 そのレベルの問題なら。
>>293 MML で出力しといて適当なソフトで MID ファイルに変換すればいいんじゃないかな。
>>288 GJ
京大の講義資料やってみてーなー。
読んでいてちゃんと訳しているのか 心配になる日本語だよな
日本語で読んでる奴が解けないのをみて にやにやしてるんだよな 相変わらず性根が腐っていることで
上のラムダ計算式の構文上の導出と それに関連する抽象構文木を生成せよ。 回答例:問題の意味がわからない。
さて、lisp とscheme とどっちをおすすめされますでしょうか。 私は、よく使うのがc,javascript,VB という、よくある、プログラムが本業ではないが、私個人や仕事のチームの業務改善にプログラム作成もするもんです。 自分にとってなじみのない分野の考え方のさわりでもしってみたいのです。 本がそこそこ充実しているcommon lisp が良いでしょうか。
今からやるならclojure一択でしょ
SICPは京大教授も認める糞訳か 読む奴が糞だから理解できないって言ってたアホは どう言い訳するんだ?
これはことあるごとに引用されるだろうな
糞訳読んだせいで留年とかwww ちょー可哀そうなんだけどw
まあ、演習問題をとこうと思っても語彙が曖昧なものは いくつかあったのは事実だと思う。<SICP
語彙が曖昧じゃなくって 間違っているって言っているんだが
そうそう間違っているというのはかなり重大なことかと
こういう努力不足とは無関係の本質でないことで留年させるってどうなんだろう 今の時代に学部低学年でSICPやらせるのは 趣味の押しつけ以外の何物でもないと思うし
京大入れて原書読めないとかマジありえんってのが前提なんじゃねぇの?
東大名誉教授で原書読めない 和田さんはどうすんだよw
極論を言ってるような感じもするけどな。京大の連中は知らんから なんとも言えんけど、彼らの話が出てこないと。
その間違ってる問題ってどれなん?
和田さんってMITで強弁をとってたんだろ? 英語の使えない状態でMITで授業をするってありえる?
やさしい英語は出来るんだろ むずかしい文章が読めないだけで
SICPの英語は難しくないよ。
和田っちはSchemeで自動翻訳システム作ったんだよ。 ロボチックだろ、訳が。
和田さんが京大入ったら留年するの?
研究室の輪講で翻訳したやつとかなんじゃないの
K&Rの石田訳のときにそんな話があったな。
文体からしてそれはないでしょ
SICPは多様なパラダイム教える為であって、必要なschemeの構文は 逐次前もって教えるってIPSJ会誌の教育コーナーで書いてたよ。
パラダイム教える為に 東大名誉教授が読めなかった文章を 読めないってだけで 留年させる必要はないわけで
ネタ混じりの可能性もあるからそんなにムキにならなくても
SICP日本語訳disるために ネタ混じりで馬鹿にしたと
留年とか何の話?
実験、演習を一つ落としたくらいで留年しないってw 複数落とすと次の年履修がかぶって留年するはめになることあるが。 演習問題一つで単位落とすこともないし。
一つじゃなくて 複数間違っているように 書いてあるけど
>>335 実験単位が欠席2回で不可が出たりする(自分はそれで2留した、3年に行く必須の単位なんで)所もあるから実験とかレポートは結構厳しいものだとおもってた
病気療養でも斟酌してもらえなくて結構泣いたよ
京大ってスパルタ系の大学だったっけ?なんかあそこって変人が多い という印象が強いが。
最近使ってなかったけどR6RSって評判どうですか?
広まる前に次が出そう
RnRSみたいな版名はナンバリングが前面に出てるから楽だな 面倒ならR4RSとかR5RSとか対応にしとけばいい もうR6RS以降は暇な人向け実装だな CommonLISP程に時間が掛かってはいかんでしょ
343 :
デフォルトの名無しさん :2011/11/24(木) 01:46:33.31
Gaucheについての質問です。 循環参照してるオブジェクト同士でメソッドを呼び合いたいのですが、 相互のメソッドを使うためにメソッドをuseしなければならず、useは循環して使えないので うまくできません。 今のところ考えたのは、別モジュールに空のメソッド群を置いておいてそのモジュールだけを useするという方法です。でも、これは冗長ですし気持ちわるいので、きっと他に良い方法が あると思っています。 どなたか教えていただけないでしょうか?よろしくお願いします。
>>343 一方をuseせずにautoloadにしておくって手がある。機能的に非対称で、
一方が他方に従属する感じの時は、従属する方をautoloadにすることが
おいらは多いかな。
でも機能的に対称な場合はautoloadで非対称なのが気持ち悪いんで、
別モジュールにdefine-genericをまとめて書いとくかなあ。そのモジュールを
インタフェース定義だと思えばそんなに悪くない。
Cのプロトタイプ宣言とディレクティブはスマートだよな autoloadって評価されるまで何が起こるのか判らないのと 名前の二元管理という点であまり推奨できない
346 :
343 :2011/11/24(木) 05:42:29.28
>>344 回答ありがとうございます。こんな時間に回答がもらえるとは流石Scheme板なのか...。
う、やっぱり別ファイルに分けるのが良さそうですね。
というかそもそもオブジェクトシステムを理解してなくて
define-genericを知りませんでした...。define-methodは
これを自動でやってくれてるのですね。
347 :
デフォルトの名無しさん :2011/11/25(金) 21:45:12.85
Luaが形なし言語で最速と聞いて LispやSchemeからの変換機あるかなと思ったら 以外と誰も作ってない。Stalinと速度比較したかった。
>>348 LuaJIT がだろ?
ついでに言っとくと Lisp 系言語は変数側に型がないだけで
変数に代入されるオブジェクトには結構厳しい型付がある
Luaの場合は小細工なしで速いから
Scheme subset -> Luaならantlrあたり使って簡単にできそうなのになあ Schemeでambとかマクロ展開してからLuaに変換できたら高速だし最高なのに
lisperが妄言はいてる間にlua最速! いいうさぎとかめですね
小細工とか妄言とかえらい攻撃的な人が来てるね。 というより主張だけが必死で話を聞いてない この2つの考察から スルーするのが適当じゃなかろうか。
小細工と妄言は別の人なのだが 妄想が激しい人なのな
Luaは速度を速くするための 特別な書き方しなくても速いんだが
luaはschemeと似てるけどcall/ccみたいな厄介なのはないし 言語実装が1つだから無駄なリソースをあまり使わずに進化できたんじゃないかな あんま知らんけど
機械語最速最強、とか言ってるのとたいして変わらんしw
まあ、LuaとかJavaScriptが近年速度面で頑張ってるのは事実だし、 Lispも他に置いてかれないように頑張りましょう、ってことで。 RacketあたりはJIT採用してたはずだから、頑張って欲しいね。
そういや、数理システムの人が CL の最適化は全然足りない、 って論文書いてたよね。 2009年だけど。 あのあとCLの最適化って少しは進んだのかな。
363 :
362 :2011/11/27(日) 12:55:09.42
>>362 商用の奴もダメって?
あとネットで(要約の)閲覧できるならリンク頂戴
>>364 あと, cmucl のドキュメントの中で最適化を施すと危険な場合ってのが列挙
してあって, その部分の見直しがほとんどなされてない
コンパイラ製造技術は上がって来てるのでその辺の対応が強く望まれる
あと吐き出したコード見ればわかるんだけど peephole が壊滅的にだめ
最適化しないでも 小細工すれば速くなるし
>>354 なんでわざわざ遅いLuaに翻訳しないといけないの?
Javascriptならブラウザ上で動くとかメリットあるけど。
lisp cabinetでCCLを使っているのですが、 自作の関数をいくつか書いておき、起動時にそれらを自動的に読み込ませる、というのは どこにどのような設定をかけばよいのでしょうか
? 変なのがいついてるな。
Luaが遅いとか無知すぎるわ
Cへのトランスレータは以前から研究されているのに、なぜLuaへのトランスレータを性能の為に用意するの? バニラのLuaでもCトランスレータを超える性能面のメリットがあるの? ……って意味じゃないの、「遅いLua」って言い回しは 本人に訊かないと本当の所は分からないが 俺は性能面ではなく、ClojureやNuのようなホスト環境とよく馴染むLispとしては興味あるけど SchemeやCLのトランスレータは実物を見てからでないとあまりワクワクしないな
>>364 要約というか本文が
>>363 にあるよ
日本語。共通部分式の除去も定数伝搬もほとんどされてない、
ってのは悲しくなった。誰かCommon Lisp on LLVM作って。
>>368 ホームディレクトリの.ccl-init.lisp。
そこで直接関数を定義しても良いし、適当なファイルをloadで読んでも良い。
Windowsだとバージョンでデフォルトのホームディレクトリの場所が違うから、
(translate-logical-pathname "home:")
を評価して表示された場所。
Lisp -> C -> 機械語 Lua -> JIT -> 機械語 だとLuaの方が速いんだよな
じゃあ tarai で比較するか
実用性のない何の価値もないコードで比較してどうする
>>377 文句言うなら代替案を出せよ。
代替案ない批判は何の価値もないよ。
ここは核融合プラズマシミュレーションで
>>380 Luaってどん亀Gaucheより遅そうだな
型指定したコードと比べてどうすんだよ 馬鹿か
出たものはとりあえず叩く人が居座ってるよな
ドヤ顔で型指定しているコード持ってきて Gaucheより遅そうって 馬鹿以外の何物でもないだろ
何も出せずに文句しか言えない奴は哀れだねぇ
馬鹿な発言しか出来ない奴よりはまし
なぜJITの付いてないバージョンのLuaと比べるんだよ
luajitでようやく比較対象になったレベルでしょ? しかも組み込み用の糞言語w
どん亀racketよりは速いお
こんなところで油を打ってないで、一つでもマクロや関数の使い方 の理解を深めろって。^^; さもないと成長せんぞ。
LuaJITだと2〜3倍どころ10倍くらいになってるな 保守性はともかくポータビリティは問題なさそう
http://repo.or.cz/w/luajit-2.0.git/tree/HEAD:/dynasm 確かにluajitは個別にしか対応できないな。
googleのv8,naclみたいにx86,x64,arm,llvmでしか動かない実装考えるグループも出てきてる時代だけど、
schemeは置いといて、clは人材流入がなくて難しいのかも。
haskellでもx86専用SIMDコードが埋め込まれたり、llvmに載せちゃえとかあがいてはいる。
普通のコードをJITやCPU最適化で高速化するタイプの人材流入から
cl/.net/ruby/perl/phpあたりは置いていかれてる感はあるかもしれないね。
.NET→MS実装は知らないが、MonoはLLVMバックエンドがある Ruby→Rubinius Perl→ParrotにLLVMプラグインがあるので、RakudoもLLVMを使える PHP→PHP.rebootならHotSpot効くんじゃね?多分
398 :
デフォルトの名無しさん :2011/11/30(水) 14:06:16.64
lispのprin1やprincにある"1"や"c"は 何を意味しているのでしょうか?
prin1 の 1 は適当につけただけだと思う。改行するのが print で改行しないのが prin1 だったんだけど、read できるかどうかを考慮してさらに prin2 とか prin3 とかが作られていった。でも方言ごとに意味がバラバラだった。 princ は1文字しか出力しない方言があったので character の c なんだろうが、 そうでない処理系では無意味。
そんなときはHyperspecを読め。1,2行程度で違いを説明してるから。
その名前の源流はn番目の評価結果を返すprog1とかprogn辺りだろうけど 適当すぎるんじゃないか? さすがに挙動が違うのに番号変えただけは適当すぎるんじゃないか? コボル人か?
404 :
398 :2011/11/30(水) 20:45:35.38
HyperSpec の内容でいいとおもうけどな。由来は John L White 曰く prin1 は PRINt characters of 1 object. princ は PRINt the Characters of some Object. print は PRINT compound object. だったはず。
406 :
398 :2011/11/30(水) 23:27:54.17
確かprin1が生まれた当初は 一引数関数でアトムしか印字できなかったはず。 いわばprint下請け関数。 けどLisp interpreterは任意数引数関数にするの簡単だから…
KMPが回答していたのですか 知りませんでした なるほど
渋谷lispみたいなイベントってもうないの? ちょっと発表してみたい内容できそうなんだけど
ついこの間あったばっかじゃねーか。 次まで待て。
東京でしか無いから、残念だよね。
小規模開催じゃ売名できないだろ
コルーチンはリスト処理ではない スタックやレジスタの処理だ リストはメモリ割り当てが頻繁に起こって遅くなりそう
誤爆
勉強会とかならいいけど、5人相手に発表とか悲しさ炸裂だろ。 別にShibuya.lispじゃなくて、普通にネットで発表しても、 興味深いもの、ことなら反響あると思うけど。 この前の竹内関数とか盛り上がったし。
いつどこの勉強会で盛り上がったん?
なんで勉強会が盛り上がるとかいう話になるんだよw この前takを利用して音鳴らすってのが、Lisp界隈で話題になって盛り上がってたでしょ。 元ネタの所に御大降臨したりして。面白いものならどこで発表しても反響がくるんじゃない? って話だよ。 盛り上がってる勉強会とかなら熊本とかなんじゃないの? よく知らんけど。 本人たちは楽しそうにやってるのは分かる。
今、勉強会の話しているからだろ
Lisp界隈は面白いことしている人が 表に出てこないな
>>418 形態は勉強会でもなんでもいいでしょ。
ネットで発表して得る物と人前で発表して得る物って違うんじゃないの。
人前で発表して得る具体的な物って言えないが、ネットコミュニケー
ションonlyの限界ってあると思う。
年1回でもいいから地域で定期的にやって団体をつくれば、偉い人を呼び
やすいし、他県勉強会の遠征もしやすいでしょ(車出す・出さないとか)。
ヘタレlisper/schemmerでいいから代表として誰かが立てば、忙しい
lisper/schemmerも参加しやすくなるんじゃないの。代表に求められるのは、
lispの能力より雑用処理能力だよね。
 ̄ ̄ ̄ ̄ ̄ ̄ ̄l/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ∧_∧ ( ´・ω・`) ∧_∧ / \ ( )何言ってんだこいつ .__| | .| |_ / ヽ ||\  ̄ ̄ ̄ ̄ / .| | | ||\..∧_∧ (⌒\|__./ ./ ||. ( ) ~\_____ノ| ∧_∧ / ヽ 空気読めよ \| ( ) | ヽ \/ ヽ. オマエ馬鹿だろ | |ヽ、二⌒) / .| | | .| ヽ \∧_∧ (⌒\|__./ /
普段の雑多な処理(bashで書くと64行以上のスクリプト)ってlisp(schemeも可)で書く? bashで書く? あと64行未満だったらどうされますか? 行の量レベルによっての取り組み方の違いとかをご教授して いただけませんか? LispでもLinuxディストリ間ぐらいだったら可搬性も楽に高められるかな? Lispだと他の人が読めないよ というクレームが来たら最悪違う言語で書き直せば良いんだよね。そのスクリプトは製品ではなく数ヶ月 後までに書き直しておけば問題なしという条件で。 あと処理のアイデア・メモはみんなlispで書いちゃうのかな?
ざったろくじゅうし
(expt 2 6)
(ash 1 6)
>>429 UNIXの得意なことはshでやる。
fileやprosessにまつわるバッチ処理。
>>429 #!/bin/perlとか書くくらいならgoshする
パイプつなげてガリガリとコマンドを呼び出してステートチェックするならbashで書くわ
書きやすい方の道具使うべきなんであってLispありきってのは間違いじゃろ
せっかくだから、どんな小さなスクリプトもLispで書くことにするぜッ
>>435 bash等と比べると書きやすいで言えばLispだし、ブログのネタにしやすいのもlispでしょ。
つまりはLispありきでいいんじゃないか。
Lisp 1000tips wiki つくろか
common lispのmapcにあたるのは schemeではmapになるのでしょうか? そして、common lisp のmapcarにあたる関数は何でしょうか
mapc => for-eachでmapcar => map。 ただし、mapcと違ってfor-eachが返す値は未定義。
ありがとうございます 勘違いしていました 気になったのですが、common lispのdolistとmapcは何が違うのでしょうか
>>443 すっきりと腑に落ちました。
これで使い道に迷うことはなさそうです。
動作がよくわからないので質問させてください。 (case 0 ((0) 1)) → 1 になるので (case 0 (((if #t 0)) 1)) → 1 になって欲しかったのですが → () になってしまいます。 case が eqv? で比較してるので (eqv? 0 (if #t 0)) が #f になるかと思ったんですが、これは #t になります。 case 文の 条件部分(呼び方がわかりません。)に if 文を使うことはできないんでしょうか?
>>446 (define a 0)
(case 0 ((a) 1))
-> ()
(case 'a ((a) 1))
-> 1
>>446 case の条件部分はただのデータで、評価されない。
なのでその書き方は 0 という整数と (if #t 0) というリストを比較している。
>>446 今度からそういうときはcondを使ってね
ウズウズ
>>447-449 レスありがとうございます。
condを使えば思ったとおりに動かすことが出来ました。
海外のオタクが双葉を元にしたサイトだよ
schemeで画像扱う時って普通にvectorのvectorにするものなの?
u8vectorで
そのサイトの管理人に聞いたほうが早いんじゃね?
まあたぶんテキストエディタで手書きだと思うけど
xyzzyの罫線モードとかじゃないの
lispはHaskellなんかと比べるとちゃんとした関数型言語じゃないって言う人がいますが、どうですか
>>460 副作用のある関数が普通に書けるからじゃろ
Haskellは副作用をする部分を隔離してるもんな。そこで副作用させてる から、あるなし論争があるけど、ML系でも異色でちょっと取り扱いづらい けど人気があるよね。モナド信仰なんだろうかな。サクサク作っていける 部分もある。
c++とlispはマルチパラダイム言語
プログラミングGauche の第15章 テキストの構築を読んで
sxml形式で記述した外部ファイルを読み込み
xmlに変換して他のファイルに出力したいと思いました。
ですが、方法がわかりません。
sxmlのデータが*sxml-data*にあるとき
(use sxml.serializer)
(print (srl:sxml->xml *sxml-data*))
とすればxmlのデータを整形して出力することと、
返還後のxmlデータが*xml-data*にあるとき
(with-output-to-file filename
(lambda ()
(format t "~A" *xml-data*)))
と書くとfilenameで指定したファイルに*xml-data*が書き込まれるだろうことはわかりました
ここで行き詰まったのは外部sxml(*.scm)を読み込んで変換し出力するという処理の
とくにはじめの部分と処理全体です
(with-input-from-file filename...)
で読み込んだファイルを一文字ずつや一行ずつ処理できるのはわかったのですが、
一度に読み込む方法はあるのでしょうか
最終的には
http://karetta.jp/book-node/programming-gauche/197708 の「SXMLでは次のとおりに記述します。」直後のコードを保存したファイルを読み込み、
それを別ファイルにxmlとして保存する関数を作成したいのですが
可能でしょうか?
>>460 関数型とは何かという明確な定義は無いので、ちゃんとしたというのがどの程度のことを言うのかで判断が分かれると思いますね。
Haskell が「純粋関数型」と呼ばれることからもわかるように、その逆の純粋でない関数型もあるわけで。
純粋でないことを以ってちゃんとしてないというのであれば「そうですね」という感じかなぁ。
純粋とそうでないのとを分ける基準があるのかもよくわかりませんが、
あたりまえに副作用を起こせるのを純粋とは言えないのは間違いないでしょう。
そもそも LISP は何でも有りの自由なところが特徴だし、
Common Lisp や Scheme はマルチパラダイムを標榜してもいるので、
LISP という言語が関数型としてどうかという問いはあまり意味がないですね。
あなたがそうしたければ純粋関数型的な語彙を組立ててそのスタイルを貫く自由は与えられています。
lispの特徴はS式構文でしょ。
昔はGCとかSchemeの継続とか強力なOOシステム(Flavors, CLOS)も特徴だったけど、 今は他の言語でも見られるしね。S式+マクロはLisp族だけだね。
ADTを直接記述出来る事かと。
リストの操作で質問します (val (lis1) (lis2 (lis3))) このリストに別のリスト(lis4)を追加して (val (lis1) (lis2 (lis3) (lis4))) のようにlis2のリストの末尾に追加したいです そのあとで追加したリストも (val (lis1) (lis2 (lis3) (lis4) (lis5) (lis6))) というふうに後ろに挿入したいのですが、 どういう操作をすればよいでしょうか
>>471 そういうことをやりたくなるってことは、リストが分かってないってこと。
深いすなあ
474 :
デフォルトの名無しさん :2011/12/12(月) 21:30:27.25
(set-cdr! (last-pair (caddr ls)) (cons ls7 '()))
(setq l '((1) (2 (3)))) (defun append-tail (l m) (append (list (first l)) (list (append (list (first (second l))) (list (append (second (second l)) m)))))) CL-USER> (append-tail l '(4)) ((1) (2 (3 4))) CL-USER> (append-tail (append-tail l '(4)) '(5)) ((1) (2 (3 4 5))) CL-USER> (append-tail (append-tail (append-tail l '(4)) '(5)) '(6)) ((1) (2 (3 4 5 6)))
>>474 意図した通りに動きました!ありがとうございます
>>475 副作用無しのその動作も魅力的です
ありがとうございます
478 :
475 :2011/12/12(月) 22:45:13.92
ちなみにこの形だとpush, popが使えて楽だよ。 CL-USER> (setq n '(((3) 2) (1))) CL-USER> (push 4 (first (first n))) (4 3) CL-USER> n (((4 3) 2) (1)) CL-USER> (push 5 (first (first n))) (5 4 3) CL-USER> (push 6 (first (first n))) (6 5 4 3) CL-USER> (push 7 (first (first n))) (7 6 5 4 3) CL-USER> n (((7 6 5 4 3) 2) (1)) CL-USER> (pop (first (first n))) 7 CL-USER> n (((6 5 4 3) 2) (1))
>>471 リストをひとつのオブジェクトに見立ててるように見えるけど、
そういう場合は、各要素へのアクセサを定義した方が良いよ。
単純になるし、保守性が良くなる。
あるいは、素直にクラスとか構造体、レコードで定義した方が楽。
単なる演習とかならどんな書き方しても良いと思うけど。
480 :
475 :2011/12/12(月) 23:42:26.08
>>471 具体的に書いてよ。
中高一貫校の中学1年生が英作文の問題を必死こいて解いている子に関係代名詞を使うとシンプルな文章になって
読みやすいよと言われても語彙や文法を知らないのですよ。Web参考書は揃っているんだけどw
>>480 詳しく説明するのが面倒だった。食いついて来たら説明する予定だったけど。
てーか取り敢えず落ち着けよ。明後日の方向に弾飛んでんぞw
(define (value-name v) (cadr v))
(define (value-value v) (caddr v))
(define (set-value-name! v x) (set-car! (cdr v) x))
(define (set-value-value! v x) (set-car! (cddr v) x))
(define *x* '(value "x" ()))
(value-name *x*) ;=> "x"
(value-value *x*) ;=> ()
(set-value-name! *x* "y")
(set-value-value! *x* (append (value-value *x*) (list 0 1 2)))
(value-name *x*) ;=> "y"
(value-value *x*) ;=> (0 1 2)
こういうイディオムのこと。クラスやレコードはそれらのWeb参考書読んでくれ。
いや、イディオムってのも変か。パターンとか常套手段でひとつ。 なんでもリスト使うようなプロトタイプを最初に作るときとか、 後でデータ構造を差し替えたり、コードの可読性を上げるためにやるでしょ?
Schemeで書いたのは、いじめか。 Python使いにRubyで答えればプログラマとしての幅も広がるし、良いことづくしだ。
?
いやいやいやいや。
>>474 の人もSchemeだけど、「動きました!」って言ってんじゃん!
そもそもCommon LispともSchemeとも書いてないんだから。
マジレスすると、CLerだった場合はset-car!をrplacaに読み替えれば分かると思います。
普通は汎変数使うと思うけど。
schemeは教養だから CLerは当然schemeぐらい読めるから
Cは教養だから万行デバッキングできるよね
racketはset-car!がありません
set-mcar! があるだろ。
Lisp方言で良いなら教養としてarcで書くのもあり? gaucheに接近するかと思ったら全然ダメだな。 arc> (time (tarai 12 6 0)) ;; arc3.1 time: 11241 msec. arc> (time (tarai 13 7 0)) time: 83869 msec. > (time (tak 12 6 0)) ;; Racket cpu time: 197 real time: 197 gc time: 0 > (time (tak 13 7 0)) cpu time: 1480 real time: 1481 gc time: 0 > (time (tak 14 8 0)) cpu time: 11046 real time: 11047 gc time: 0 gosh> (time (tak 12 6 0)) ;;gauche ; real 0.715 ; user 0.710 ; sys 0.000 gosh> (time (tak 13 7 0)) ; real 5.214 ; user 5.220 ; sys 0.000 gosh> (time (tak 14 8 0)) ; real 38.301 ; user 38.060 ; sys 0.000
Racket 速いな。
やだ Racket 格好いい……
>>488 sicpプラグインではあるけど、set-mcar!をエイリアスしてるみたい
Lisperがgcc on LinuxでCの手習いで何かの分野の処理をやるとしたら何の分野がいいかな? コーディングがマゾい奴はやりたくない。うひょー、コーディング楽しいって感じの週末にしたい。
LISPインタープリタの原始的なやつを作る。
つまらん
そしてその LISP で本格的な LISP 処理系を作る。
つまらん
>>499 だからマゾいの嫌だって言っているでしょ。インタプリタならlispで書いた方が楽でしょ。
Cで文字列処理はしない方が良いと思っているんだけど、偏見かな。
>>501 つまらないし、目的がみえてこない。
自分で考えたら?
>504 おまえは499を否定しているがハードウェアべったりの処理系でGC付き言語を組むとかなり楽しいのだが。 GCは奥が深いぞ
>>504 マゾいのが嫌だっていうから原始的なやつって書いたのに。
そもそも手習いが目的なのに「〜の方が楽」とかアホだろ。
>>504 >Cで文字列処理はしない方が良いと思っているんだけど、偏見かな。
はい
必要な時に出来ないのは、偏見ではなく無能。
プログラムを組むときに一番大事なのは用件を最短で満たせる適切な言語を選ぶことだけど
プログラムを楽しく組む為に必要な事は「いつでも初心でいられる」事だと思っている
そんなわけで
>>504 はこの土日もグズグズすると感じてしまうのであった。
;;;仕事でもプライベートでもプログラムを書くのを楽しくするコツは2行目ね
ずいぶん参考になった ほんとうにありがとう
schelogってGPLなの? schelogをrequireしたらソース公開しないといけないの?
515 :
デフォルトの名無しさん :2011/12/19(月) 15:37:56.70
>>516 まさに探していた説明です
アプリケーションには任意のライセンスを設定できるのですね
そのうえで使ったライブラリのソースコードのありかとライセンスを表示する
すべきことがわかりました
ということは biglooやgambit-CでGPLなライブラリをuseやrequireしたものをCに変換して Cをバイナリーにした場合はソース公開の義務はないってことでいいのかな
chickenはeggの分割コンパイルできるんじゃないの? 動的リンクにできそうな予感が
>>519 の最後のリンク先を見ると
LLGPLのライブラリを静的リンクして実行ファイルを作った人は
使ったライブラリのソースコードを(公式サイトだけではなくて)独自に配布しなければならぬ
こう理解したけどこれでいいのかな
プラグインとかならともかく 動的リンクでも根本機能として必要ならダメだよ 使うのをきっぱりやめた方が早い
>>522 それはGPLの話(
>>518 )だよな?
LGPLの4.d(LGPLv3の場合)では「"Minimal Corresponding Source"と"Corresponding Application Code"の配布」と
「適切な共有ライブラリ機構の使用」のどちらか一つの実行が条件だから
後者を選択した場合はソースの配布は義務付けられないと思うが
>>521 入手できる手段を保証すれば大丈夫じゃないかな。アクセスできるかが重要なので。
自分は、GitHubとかなら特定リビジョンのリンクの提示だけでいけると解釈してる。
もちろん、配布元が閉鎖とかしちゃったら、自分で配布しなくちゃいけない。
この辺はGPLやLGPLの思想を汲んでおけば、そう大外しはしないと思う。
もちろん、会社の商売でやるなら法務と相談必須だけど。
心配ならソースのzipを読み込んだコアを配布すれば? ある関数実行したらファイルに書きだすようにしといて。
そんな面倒なことするくらいなら、普通にソースも一緒に配布するだろ……。
元のお題(
>>515 )が実行ファイル一つだけにしたいというものだから。
READMEすら同梱できないとか、
>>515 のどこにそんなストイックな条件が書いてんだよw
まあ、ある意味そういうのも厨二心をくすぐられてwktkするけど。
気になったんだけど、common lisp絡みの案件で ライセンス上問題となった事件は何かある? それとfranzがllgplをわざわざ設けた経由が知りたい llgplでなくて修正BSDで実用上十分だと思うんだけど 裏事情があるのかしら
ソースコードの再利用について考え方が全く違うもので十分という意味がわからない。
GPL系と商用のデュアルライセンスの話なのか?
名言来たな。「LLGPLじゃなくて修正BSDで十分」 どうみてもコピーレフトへの宣戦布告です本当にありがとうございました。
GoogleがV8に修正BSDを採用した経由が知りたい 修正BSDでなくてUnlicenseで実用上十分だと思うんだけど 裏事情があるのかしら
>>531 修正BSDを開発者の視点から考えてみるといいよ
修正BSDでライセンスされているプログラムは、著作権表示の点をクリアすれば
ソースコードを公開しなくてもいい
そのプログラムを開発した人にとっては自分が作成したコードを見せなくていいが
他の開発者からするとそのプログラムのコードを見る機会がなくなる
誰にとってそのライセンスがいいものかは立ち位置によって変わることには
注意したほうがいいかも
>>536 >そのプログラムを開発した人にとっては自分が作成したコードを見せなくていいが
いまどきスパゲッティコードを書いているわけでもないだろうよ。
>他の開発者からするとそのプログラムのコードを見る機会がなくなる
見る機会がなくなるのも嘘な気がするなあ。最新技術としての賞味期限過ぎたら
公開しようかなと考える人・団体はかなり存在するんじゃないの。
BSDスタイルライセンスの良いところは公開しない・するといつでも自由に切り替えられる
ところだよ。
>>537 NDAで公開出来ない物があるからじゃろ、自分のコードが綺麗でないから公開したくないってのとは別の問題。
>>537 納入するときはツールを使ってわざとスパゲッティコードにしてる俺が来ましたよ
>>539 そのツールは可逆性があるの?
鍵がないとそのツールを使えば可逆できるなあ。
何を言ってるんだお前は。
立て続けに見当外れなことを言ってる奴は釣ってんのか?
>>539 マクロを全部展開するだけでもスパゲッティー化できるよね
前に見たbiglooのソースもあきらかにやってたし
おれもコードランダム化させるの作ったよ 自分でハックしてみたが方式が判ってても追跡困難だった もう二度とやりたくない
コードランダム化のコードを 誰か公開したりしらいいなあ
実行速度を落とさないで難読化なら 変数や関数の名前をランダムなものに変えたり 実行されない関数を追加したり あと他に何があるかな
実行されないはずの意味ありげな処理追加。 実行されたら、それはそれで異常検出。
>>546 やっぱりマクロの魔術師でしょう :-)
これRubyちゃうん?
いやCommon Lispさ(ふっ)
とか
納入先がWindows使ってたら、改行コードをUNIXの改行コードにする 改行してしてなくてもいい場所は改行を削除 コメント部分の日本語を全部文字化けさせる コメント部分に実行ファイルの機械語をASCIIコードに変換して追加 diffの差分ファイルを納入
それ途中難読化じゃなく処理系を相手にチキンレースしてるだけでは
納入しなければならないのはきちんと動くけど人間が読めないコード 相手に解読されたら仕事が来なくなる
せめてLispのケースで話して(><)
LISPプログラムを他人に渡すなんて、大学の研究室の後輩に渡すくらいしかなかった 当然、究極のスパゲッティにして渡したけど
カレーが少し余ったんでスパゲティ茹でて一緒に炒めたらおいしかった
>>553 先輩のプログラム、センス悪いな。糞じゃん
あのひとエラソーにしてるだけだったよな。いなくてせいぜいだ
とか言われてるかも。
>>554 次は、麻婆豆腐にスパゲティ入れて上にチーズをかけてオーブンで焼いてみ。
>>555 そのプログラムを即座に改良できるのが俺だけ という優越感
まあいいんじゃないの 自分で一から書く気になってくれれば
先輩がせっかくテーブル拭きプログラムを書いたのに姑のようにまたテーブル拭きプログラムを書いていいか、悩まないか。 そういう先輩に限って卒業も飲み会に参加して、「まだあんな(俺の)プログラムを使っているの」とバカにしつつ顔が 喜んでいたりするんだよなあ。
難読化したソースなんか納入したら検収で落とすだけだが。 当然納入できなかったんだから違約金は払ってもらう。
お前みたいな奴はマ板に行ってくれ。
ちょっと遊びで処理系実装してるのだけど symbolとquoteの実装方法で参考になるコードどこかにないでしょうか mosh?
何で実装しているのか、書けよ
c
ホビットが #define long SCM とかしててびっくりした
何を参考にしたいのかによるな。 原理的なとこ知りたいならミニマルな処理系がいいんじゃない? tinyschemeとか。 つーてもsymbolは単に辞書に登録した文字列だし、quoteの処理はもっと高レイヤ なのでLispで書いてあるevalの実装あたりを見ればいいんじゃないか。
Schemeって他の処理系の定義重複部分をコピペすると書く所ほとんどないのか。
>>568 SICPって何回くらい読むもの?
再来年の年初めぐらいから読み始めようかな。
570 :
デフォルトの名無しさん :2011/12/24(土) 16:09:36.63
難読化なら一度速度優先でコンパイルしてアセンブラをはかせる。 そのコードを今度はCなりLISPなりに戻してやればよいじゃないかと思う。 動けばよいコードを納品って契約ならコンパイラでアセンブラはかせて、 それをそのまま納品でよいじゃないかともおもいます。 昔移植でアセンブラからCへコンパイルするコードは作ったことがあります。 半自動でしたけど9割は自動化して移植してました。
環境は組み込み。 68アセンブラからCへコンバート。 IOは仮想化して対応した。 なのでアセンブラまで落とせればそれを高級言語に再変換してあげれば、 それだけで難読化しているようなもんだと思うよ。 動作の保証はテストを書いておいてそれを通すとある程度担保てきると思います。
いま難読だい?
新しい構文を作るマクロって可読性下げてるよね。マクロ禁止みたいなコーディング規約とかある?
そういうのは規約というよりプロジェクトルールだろ
>>574 はマグロ納品禁止な
一行目がマジレスなのか二行目のギャグを言うためのフェイクなのか分からん
lispやschemeを使った仕事ってあまりイメージがわかないんだけど どういった用途に使われているのかな
他人のソースにdefin-syntaxなんて出てくると この野郎・・・!て思うわけよ
つーか複数人でlisp使うプロジェクトなんて実在するのかよ ゲリラ的に入れちゃいました、って案件ばっかりだぞ
」なに・・・これ・・・」 「lispですよー知らないんですか哀れ」
普段からストレスの連続なのに括弧のカタマリなんて出遭ったら発狂するだろ
なんだ。やっぱプロジェクトで使われないから、そういうルールもないのか ポール・グレアムはlispでサイト作ってたんでしょ 「 10人のLispハッカーが集められないようなら、 たぶんあなたの会社はソフトウェアを開発するのに適さない都市にいるんだ。」とか言って 結局ヤフーにM&Aされて書き換えられたんだっけ
組み込むにしてもGCの無い軽い言語入れちゃうし、 あえてlisp入れてもそれほど面白くない
マクロ禁止してまでLisp使う意味があるか疑問。それなら他の言語使えば良い。 JavaとかPythonとか、自分の足を撃ち抜きづらい言語が他にあるんだし。 具体的に、どんなマクロが可読性を下げると感じるのかには興味がある。 if*が気に喰わないとかならまあ理解できるけど、aifとかなら賛成できない。 あと、旧ITAとかMSIとか、プロジェクトで使っているとされる所は普通に存在するし、 そもそもFranzとかSBCLとかCCLの処理系開発者連中自体が複数人で開発してる。 興味があるならMSIのセミナーでも行ってみれば良いんじゃない。
一貫した構文がないこと自体、可読性が低いと思うけど、違うの
まあ普通はPython使うけども、後学のために使ってみた いずれにせよ書き捨て用だけど
お前みたいな抽象化された脳みそでは同じに見えるんだろうけど 名前付きの関数と新しい構文では、普通は次元が違うと捉えるだろう 別にポール・グレアムはPythonをdisってないよ。lisp化してるとか言っちゃってるし ただPythonにあまり詳しくないだけ
>>589 arcを触った後にまた読むと読み方も変わるね。
真面目に(簡潔さの)プログラミング言語の比較をやるのはおもしろいのかもしれないなあ。
「(1)一ヶ月かかるプログラムで比較しろ」と言うけど、「(2)プログラミング言語間の相対
的な力を正確に比べるのはまず不可能だということになる。」とも言っているから(1)を
大きいシステムで試せという話に置き換えて、ちょっと小ぶりだけどLispの処理系作りで
試すのは良いことかもしれない。
So any language comparison where you have to meet a predefined spec is testing
slightly the wrong thing.
(だから、あらかじめ決められた仕様に合わせてコードを書くという形式の言語間の比較は、
少し的を外している。)
とあるけど、slightlyなわけでLispの処理系作りでいいんじゃねえと思った。いや、むしろ
比較しやすいシステムな気がする。
あと最初に仕様がまったくないシステムなんてないだろ。未知の問題があったとしても既存の
解法のベースがあってそれを応用して解くわけだし。天才数学者をさんざん殺してきたフェル
マーの定理クラスの問題を解くという話なのかな。言語で解ける射程距離って意識下/無意識
下で分かって解くことが始まるから仕様って頭の中にあるよね。
>>591 Lispインタプリタを実装できないPythonは糞だな。
PythonでR5RSを実装できんのかよ。
できないと思う理由は?
R5RS準拠Schemeすら実装できない汎用言語って存在し得ないだろw Schemeよりよっぽど複雑なPython処理系をPythonで書いたりしてるのに。
よっぽど複雑なPython処理系って具体的に何よ。
>>598 その解釈はこちらの意図と違う。「よっぽど複雑な」が掛かるのはPython。
Pythonで実装してるPythonが知りたいなら、例えば名前がエロいPyPyがそう。
PyPyとかPychinkoとかPython使いエロ過ぎ。
Lisperももっとエロくなる必要があると思う。pgのeroとかじゃエロさが足りねーよ。
今、man perlして気づいたんだけど、man perl*の充実ぶりってすごいなあ。 日本ローカルだけでman lisp*って充実しないか。manで引けるって便利だよなあ。 ドキュメントの置き方的に問題があるのかもしれないけど。 Overview perl Perl overview (this section) perlintro Perl introduction for beginners perltoc Perl documentation table of contents Tutorials perlreftut Perl references short introduction perldsc Perl data structures intro perllol Perl data structures: arrays of arrays perlrequick Perl regular expressions quick start perlretut Perl regular expressions tutorial perlboot Perl OO tutorial for beginners perltoot Perl OO tutorial, part 1 perltooc Perl OO tutorial, part 2 perlbot Perl OO tricks and examples
600ぺりか
おらの600ぺりかがあ・・・・
>>599 ooopyもあるんだぜ。そりゃホルスタインは男の夢だが
質問です。 '((A B C D) (E F G H) ...) -> '(A B C D E F G H ...) の加工を行いたいのですが、関数をどのように組めばいいですか?
>>604 Common LispかSchemeかは知らないが、appendをapplyすればおk。
ただし、関数の引数の最大数の制限に掛かるから、巨大なリストには他の方法を使うこと。
http://www.aiai.ed.ac.uk/~jeff/lisp/cl-pitfalls から引用すると、
(reduce #'append list-of-lists :from-end t)
(mapcan #'copy-list list-of-lists)
とか。Schemeならfold系の手続きを使えばreduceと同じことができる。
っと。肝心なapplyの例載せ忘れたよ。 (apply #'append '((0 1 2) (3 4 5))) ;=> (0 1 2 3 4 5)
とりあえず、LispでエロいっていうとS式を受ける引数によく使われるsexpは外せない。
>>608 cofee-p のあれからいくと...
mapappendていう関数があったような なかったような
あー、中でapplyしてんのか 失格だ (define (mapappend func . args) (if (memv '() args) '() (append (apply func (map car args)) (apply mapappend func (map cdr args)))))
sexp と書くのはためらわれるので、自分で書くときは sxp と書いている。
>>609 nil って答えられると困るじゃないか
615 :
デフォルトの名無しさん :2011/12/26(月) 00:45:26.84
PyPi PyPy Pychinko Pypants
おいおい。パンツまであるとかレベルたけーな。
pypanもあるぞ
行列計算ぐらい統一してほしい (list 'matrix 数値) とか (vector (vector 数値)) とか (vector 数値) とか というか計算が一番速いのはどれ?
racketに (define (apply-values proc args-expr) (call-with-values (lambda () args-expr) proc)) なんてのあるけど、どうせならsrfiかなんかに登録されてほしい。
>>618 Common LispやSchemeで行列演算とかしたことないけど、
本気で性能を気にするなら、disassembleして生成されるインストラクションを見た方が良い。
リストはインデックスアクセスの計算量的に不利だから、あんま使われんだろうとは思う。
ベクタのベクタと単一のベクタは生成時のコスト以外あんま変わらん気がするけど、
処理系によってベクタの実装に差があると思うから、その処理系で実際試してみないと何とも。
処理系のコード読んでみるのも良いかもしれない。ベクタへのアクセサとかの。
CommonLispなら組み込みでarrayがあるのにわざわざリストやベクタのベクタ使う意味は? arrayで型宣言して(speed 3)(safety 0)すればそれなりのコードは出るよ。 Schemeはsrfi-25があるけど、速度はわからん。
標準で行列演算ならarrayを使うほうが適切だわな。
キーワードじゃなくて素のシンボル使ってるから多分Schemeっしょ。 Racketはサポートしてるけど、リファレンス実装ぽいなー。 Gaucheはgauche.arrayでSRFI-25とAPIは揃えつつ独自の実装してるっぽいね。
ところでgauche使いってここに何人いるの?
gauche以外に何があるんだよ…
凄い脳味噌
>>605 -
ありがとうございます。
助かりました。
common lisp(CCL)とgaucheでcdかdが見つかったら続く非空白文字につなげたいのですが (直後に改行が来ていたら次の行の非空白文字につなぎます) どういう処理ですればいいのでしょうか。dは一つだけ来て二つ以上は続きません。 a1a2cd b1b2b3 c1c2c3 d1d23d e1e2e3 f1f2f3 a1a2 cdb1b2b3 ; cd b -> cdb c1c2c3 d1d23 ; 行末のd -> 次の行へ de1e2e3 f1f2f3 ; ->行頭にdを追加 ファイルから一文字ずつ読み込んでcdとdが来たら非空白文字まで出力を控え、 非空白が来たときにそれとともに出力という原始的な方法を考えたのですが もっと効率のよい手法はあるでしょうか
>>628 > もっと効率のよい手法はあるでしょうか
具体的に何の効率なの?
実効速度の事なら、よっぽどまずいコーディングしない限り、
速くなったり遅くなったりする要素は殆どないけれども。
631 :
628 :2011/12/26(月) 23:22:59.43
Gauche ならその手のスクリプトでありがちなテキスト処理用の機能が多数用意されてるからよほど速度とかメモリとかにこだわるのでなければ正規表現でマッチさせて置換えでいいんじゃないかな。 (display (regexp-replace-all #/(c?d)([ \n])/ "a1a2cd b1b2b3 c1c2c3 d1d23d e1e2e3 f1f2f3" (^[m]#`",(m 2),(m 1)")))
cl-lexでもいけそうだけど、本人案でいいでしょ。
またお願いします。 define-syntaxを使って (map proc list) -> (proc (x list)) のように変換したいです。 簡単に言えば、リストにmapを内在させて見てくれを良くしようと思ったのです。 e.g.) (define plusone (lambda (x) (+ 1 x))) ;;;通常なら (map plusone '(1 2 3)) ;;;=>'(2 3 4) ;;;やりたい (plusone (まくろ '(1 2 3))) ;;;=>'(1 2 3)
最後の'(1 2 3)は誤記です
call/ccでも使えば
>>636 使いましたがリスト先頭のみ処理されました。
≡≡≡≡ 癶( 癶;:゚;益;゚;)癶 カサカサカサ
AmazonのプログラミングGauche売れとるな
644 :
641 :2011/12/27(火) 22:48:00.53
なるほどわかりました
「プログラミング不器用な」 が売れてるのか。
http://www.cl.cam.ac.uk/teaching/1011/ConceptsPL/ これのlispのスライドにreflectionとあるのですが
>Fully reflective languages are still just research prototypes
>(e.g. Maude), but limited forms of reflection appear in
>several languages (e.g. LISP, Prolog, Python)
これはどういうことなのでしょうか?
あのpiro氏とは無関係か。 腐はともかくとして、今時elispってのはこれまた微妙な。
>>649 社会人でも予選は参加可能らしいしやってみれば?
時間制限あるしsbclとか使えば多少有利かもね
つまらんわ
ほうしゃのうを除去するプログラム作ってくれ 「ほうしゃのうを除去するプログラム作ってくれ」 ↓ 「を除去するプログラム作ってくれ」
R7RSのドラフト読んでみたけど、R6RSは本気で黒歴史にする方向みたいだな。
>>653 >R6RSは本気で黒歴史にする方向
詳しく聞きたい
互換性切って捨てられるとかpython3みたいだな。
rubyよりまし
Perl6は赦された
R6RSとかいらないし
Windows2000と7に挟まれたVista扱いですか…
7も正直微妙なんだけど8で大コケの予感 UIいじるのは完全に死亡フラグ
単なるマーケティングの問題と一緒にすんな
racketに慣れきってしまったので6を黒歴史にされると困る
RacketはもうArcよろしく我が道を往くことになってるから安心しろ。 あれはLispではあるけど、もうSchemeじゃない。RnRSをサポートしてても。
iphoneでもluaはちゃんと動く lua上で動くschemeがあるので iphoneでも無料でscheme動かすことできる
de?
666 :
デフォルトの名無しさん :2011/12/31(土) 13:06:19.87
>>663 だとすると、結局のところschemeのエッセンスって何なの?
誰かアンドロイドタブレットで動くgaucheインタープリタ作って
>>666 純粋な計算機科学の話ではなくて、どちらかと言えば政治的な話。
"a dialect of Lisp and a descendant of Scheme"のRacketの処理系であって、
今後もRnRS Schemeをサポートするけど、それは彼らにとって一番の目的じゃない。
gaucheで テキストファイルの内容をテキストとしてそのまま出力するcgiと ダウンロードページのように、アクセスすると指定したtar.gzをダウンロードさせるcgiを作りたいのですが どういう風にすればいいのでしょうか
お前 Gauche 以前の問題だろ
gaucheで の部分を何に変えても同じことだな
テキストファイルやtar.gzを読んで適切なhttpヘッダーつけて標準出力に 書き出せばいい。
iphoneのgambit cが便利。しかしソースの保存先が不明。どこから見れるんだろ
>>670 高校生の時を思い出したわ。
今の時代はこんなの中学生か小学生かな。
>>676 >
>>675 >アプリつくれるんだっけ?
単にどこでもスキームコードが書けるだけみたい。
Gambitの継続をスレッドで実装する方法ってどこかに文献ないのでしょうか
トップレベルの解釈って処理系がそれぞれ適当に決めてるんじゃないの
処理系作ってみればわかるが どっちもどっち
schelogでちょっと複雑なプログラム組むと 無限ループから帰ってこなくなるのは 自分の使い方が悪いだけなんだろうか
srfi-*とかクソわかりづらいんだけど慣れるもん?
いや、メモを参照すべきだと思うぞ。
RFCなんかに比べりゃかわいいもんよ
srfi とslibの関係がよくわからない
srfiは仕様案を出してみんなで議論して形にする。一応参考実装があるけど、 「仕様」が本体なので、仕様だけ見て独自実装している処理系も多い。 slibはSCMの作者が中心となってメンテしているライブラリの集合。仕様に こだわるよりも実装が主体。 両者は基本的に無関係だけど、SCMの作者がslibの一部の仕様をsrfiとして 提出して承認されているものはある。
racketはシェルとの融合性が悪すぎる パイプとportつなげたいだけなのに出来ないとか
(call-with-output-string (lambda (out) (call-with-input-string "aaaaaa" (lambda (in) (exec-shell-pipe "cat -" in out) )))) みたいなことしたいのだけどRacketはできないみたい Gaucheならできる?
みたいなことはどれでも出来るんじゃね
shellの標準入力とパイプ入力で扱いが違うらしく 動かないshell コマンドがある
common lispとscheme(gauche)のソースを見やすくする javascriptでできたシンタックス・ハイライトはありますか? webでそれらのソースを見せたいので
>>699 Racketで694に相当するのが(process "cat")だけど
実行してみると何処がおかしいのかわかると思うよ
何言ってんだか全くわからん。 $ cat foo.ss (define-values (p stdout stdin stderr) (subprocess #f #f #f "/bin/cat")) (display "aaaaaa\n" stdin) (close-output-port stdin) (display (read-line stdout)) (display "\n") $ racket -f foo.ss aaaaaa
>>701 ls, top, cat hoge.log | tail -n 99 | grep abとかは、どうやるの?
(subprocess #f #f #f "/bin/sh" "-c" "ls | grep ab")でいいんじゃない?
>>698 すみません、それはpythonでファイルを新たに生成するものではないでしょうか
>>704 単独で生成もできるし、jekyllみたいなものから静的なhtml作成
もできるよ。common lisp,scheme,clojure含めて対応言語が多いので、
重宝する。705にも紹介されてるよ。
709 :
デフォルトの名無しさん :2012/01/16(月) 16:31:35.37
ステマスレと間違えたんですね
Ycombinator懐かしいな (define (Y F) ((lambda (s) (F (lambda x (apply (s s) x)))) (lambda (s) (F (lambda x (apply (s s) x)))))) (define length (Y (lambda (f) (lambda (ls) (if (null? ls) 0 (+ 1 (f (cdr ls))))))))
>>711 2についてはpaulが答えてる。
http://ycombinator.com/faq.html Why did you choose the name "Y Combinator?"
The Y combinator is one of the coolest ideas in computer science. It's
also a metaphor for what we do. It's a program that runs programs;
we're a company that helps start companies.
Lispには歴史的価値しかない Lispからはもう新しいものは生まれない
うん、過去ログを読めない人にとってはそうだな
717 :
デフォルトの名無しさん :2012/01/18(水) 12:40:32.37
2ch監視し続けないと目に触れないようなもん 大したものじゃないな
719 :
デフォルトの名無しさん :2012/01/19(木) 01:07:41.25
別に新しいの生み出さないでも、 俺一人が気分良く使えればそれでいいし。
schemeで 文字列 "aabb" から同じ名前の変数に何か割り当てたい (define aabb "some") string->symbolで変換しても無理だったのだけど何か方法ないのでしょうか
適当に加工してevalかマクロ
関数に値を渡す時 vectorとlistは参照渡し それ以外は値渡し なんかすっきりしない
Schemeに参照渡しなんて無い
(lambda (x) (set! x))は、xが関数の中にあるのか外にあるのか、分からない (lambda _ (let ((x (car _))) (set! x)))は分かる パラメータを宣言するのをやめてローカル変数を宣言すればいい
perl大好き
RnRS にも載っているように let は lambda に変換されるマクロ ローカル変数を作ってるのは実は lambda の方
(my-let ((x 1)) x) から ((lambda (x) x) 1) に変換するこんなマクロ一度は作るよね
参照渡しなんて無いほうがいいと思うなら 引数を評価しないで渡すマクロも無いほうがいいと思うだろうな
参照渡しと参照の値渡しを混同してるやつが居るな
Lispは他の言語と比べたら 全くと言っていいほど役に立ってないのに なんでLisperはあんなに威張りくさっていて態度がでかいんだろう
↑こんな風に
下から目線キター
たしかにバカを相手に威張ってもなんの得にもならないし ろくなことはない。愚かな行為ではあるな
>>730 その理論でマクロは説明できないの?
quoteの値渡しとか
値渡しを理解してない初心者がなぜか動かないと疑問に思う例 (define (push stack objct) (set! stack (cons objct stack))) (define (pop stack) (prog1 (car stack) (set! stack (cdr stack)))) やりたいことはこう (define (make-stack) (list '())) (define (push stack objct) (set-car! stack (cons objct (car stack)))) (define (pop stack) (prog1 (caar stack) (set-car! stack (cdar stack))))
自分の役にたって自分だけ金が儲かれば、 世の中の役になんてたたんでええわ。
>>737 おまえもぉ〜いつかは〜世の中の〜♪、傘になれよと教えてくれた〜♪
>>736 thisやselfを渡すOOを理解していない初心者はそういう書き方はしない
stackを自由変数にするだろう
perlのshiftやjavascriptのargumentsのように外部イテレータで書くのが正解っぽいな 引数で混乱するなら戻り値を使え 内部イテレータはオワコン
最近のコンテンツ産業はプログラミング言語の機能も扱うのか
LISPを勉強してよかったことは、片方向リストに強くなった
コンテナ渡し コンテンツ渡し コンテナのコンテンツ渡し
744 :
デフォルトの名無しさん :2012/01/21(土) 23:28:14.88
Python3って異様に普及していないよなあ。
Gauche の HEAD が Windows でもスレッドを使えるようになったお。
schemeでpaipに相当する本ってないの?
vector-set! があってlist-set!がないのは何故だろう
R7RSにはあるぞ list-set!
R7RSは大丈夫なの R6RSみたくならない?
大丈夫問題ない
R6RSとは何だったのか
一部の暴走
実用重視とか言ってなかったっけ?そんなにダメなん?
(set! (cadr '(1 2 3 4)) 5)
Vistaみたいなもんとか
>>748 vector-set! を無いところから作るのは無理だけど、
list-set! を作るのは難しくないのでそれほど困ることは無いはず。
R5RS の時点では言語コアに入れるほどのものじゃないと思われたんじゃないかな。
R6RS ではペアの破壊は避けて欲しい雰囲気になってる。
set-car! や set-cdr! でさえライブラリの僻地に追い払ったくらいだから、
更に list-set! を追加しようとは思わないだろ。
O(1)で済む所が全てO(N)になってしまうからな
srfi-101 があるでよ。 と思ったけど、これはまだ Draft の段階だな。
760 :
デフォルトの名無しさん :2012/01/22(日) 16:23:16.48
PythonでSICPが教えられるようになった 今となってはSchemeでSICPやるのは 時代遅れの教える側の趣味の押しつけでしかない 選択授業でやるならまだしも 必修でやるのは職権乱用だよな
>>760 クリエイティブコモンズで公開されてることだし、てめぇで翻訳してからでかい口たたけよカスが。
翻訳終わるまで2ちゃんねるには書き込まなくていいからね。さもなくば死ねよ。
WD先生自重してください
763 :
デフォルトの名無しさん :2012/01/22(日) 19:18:16.48
SICPは日本語訳変だし、 どこも英語でやっているでしょ。
764 :
デフォルトの名無しさん :2012/01/22(日) 21:08:22.16
Lisper教授は野球でいえば、 ピッチャーの球種がストレートとカーブしかなかった時代の強打者。 球種が増えた現代の野球に対応出来ないでいるのに居座っていて、 後進にも時代遅れの打ち方を強要している。 もういい加減引退して野球博物館に展示されるべき。
何か最近やけに煽りに来る人多いけど、誰か何かしたん?
脳を患った人がいるだけでわ
強打者って褒めてるし
モノスゴイ執念で一人でがんばってる仮説
みんなが相手してくれるから
Pythonで拡張できるエディタが普及するのはまだなの?
秀丸はLinuxに移植されないの?
>>760 「中学・高校で古典・漢文は時代遅れの教える側の趣味の押しつけでしかない」と
言っているようなもんだよなあ。
日本人が学校ネタで世代間を越えて語れるようにSchemeでSICPやるのはそういう
面でも意味がある気がするけどなあ。あとLispは文献の資産もたくさんあんだろ。
SchemeでSICPやめたのは失敗だったとあとで気づく気がする。
というか、SICPぐらい高校生のうちに読んでおけよと思うんだが。
Pythonって規格もないし、後方互換を切り捨てたばかりだろ。 拡張性もschemeより低いし、数年毎に全面改訂必須になりそう。 schemeなら新技術が出てもマクロを足すだけで済む。
最後の一文だけは妄想の産物だな
>>771 > Pythonって規格もないし、後方互換を切り捨てたばかりだろ。
> 拡張性もschemeより低いし、数年毎に全面改訂必須になりそう。
> schemeなら新技術が出てもマクロを足すだけで済む。
同意。
何よりもプログラミング言語を構成している基本概念(の中で静的なデータ型を除いて)を
Schemeほど学習者にとって認識しやすくしている言語は他にほとんどないんだよね。
Scheme以外のほとんどの言語は実用を意識し過ぎて最初からシュガーを纏った形であったり
概念の要素ごとでなく複合的な形でしか提供されていない場合が多い。
しかも言語の構文まで拡張する(それも普通の意味でのマクロよりももっと系統的な方法で)のを
可能にしているのはScheme以外には存在しない。
実用プログラムを書くだけならば他の言語でも良い(あるいは他の言語の方が便利)かも知れないが、
プログラミング言語とは何かを一度きちんと理解して、表面的には色々と異なる様々な言語に出くわしても
自在に応用が利くようなレベルまで深く修得するには、Schemeを学んでおくのは時間の無駄ではない。
プログラミング言語やプログラミングに関する優れた教科書でSchemeを採用しているのが何冊もあるのは
何故なのかか?という事をもっと真剣に考えるべきだし、それは偶然ではないんだよね。
SchemeでなければCommon Lispだな。 SICPのスコープには入ってないが、LispのマクロのパワーはPythonには全く無いからな。
R6RSのことも思いだしてやってください。> 規格の堅牢さ
>静的なデータ型を除いて 致命的に駄目じゃん
他の言語やるならSchemeなんてやらない方がいいだろ うちの教授なんてLisp脳が酷すぎて他の言語が理解できなくなっているし
779 :
デフォルトの名無しさん :2012/01/23(月) 12:49:32.86
>「中学・高校で古典・漢文は時代遅れの教える側の趣味の押しつけでしかない」と >言っているようなもんだよなあ。 古典・漢文はいらんだろ。少なくても時間を減らすべき。
その辺は高校では選択だったから、さわり程度しかやらなかったよ。
781 :
デフォルトの名無しさん :2012/01/23(月) 12:52:56.67
>後方互換を切り捨てたばかりだろ。 後方互換を切り捨てたのは今までで一度だけだし、もうだいぶ前のことだ。 規格が分裂しているSchemeよりかなりましだろ。
SICPはCSの教科書のふりをした Schemeを押しつけるための教科書だろ
>>782 Schemeは静的型付けを押しつけない。
また、文字列処理を押しつけないためにsymbolとconsを使う。
しかしquoteの分かりにくさは文字列を普通に使うよりも酷くなった。
Schemeに代わるものがあれば使えばいいと思うよ。
構文にあれこれ気を使う必要がなく、ラムダ式や高階関数を使うことのハードルが低く、
関数型パラダイムだけでコードを書くこともできるが、データ構造の破壊的更新も
やろうと思えばできる、という言語が、あればね。
>>782 は具体的にそういう言語があるなら示してみろ。できないなら黙れ。二度と書き込むな。
Pythonの話が出てるので普通言語ユーザな視点からの質問。 Schemeとかって手続きがデフォルトでポリモーフィックじゃない(オブジェクト指向じゃないから当たり前だが)のが 使いにくいと思ってるんだけど、Schemeを使ってる人達はそんなことは思ってないの? (vector-ref vec i)より vec.ref(i)の方が良いと思いません?vecもダブらないし。
サスマン先生本人がどっかで言ってたけど、SICPの意図は、 抵抗やコンデンサ、トランジスタを集めてきてハンダ付けして実験することで 電子回路を理解するのと同じように、計算のしくみを部品から組み立てて 理解できるようにするものだったそうな。だから敢えて機能が少なく簡単に仕様が 説明できるSchemeを使ったと。最初の講義の30分で言語の説明を終えられる、 だったかな? けれど今の工学をやるなら、バラバラのパーツを集めてくるだけじゃなくて、 ブラックボックスになっているチップやモジュールを使わざるを得ない。それと 同様に、言語でもありもののライブラリを集めて使うことが重要になってきたと。
最初に少し説明に長くかかっても、 言語なんてこの先ずっと使うものだから(Scheme以外は) ちゃんとしたの選んだ方がいいよな。
>>785 Lisp語族を使う人の中でもそういう記法を好む人もいるよ。度々見掛けるネタ。
ただ、vec.ref(i)って、(vector-ref vec i)の構文糖以上のものではないから、
大抵はリーダーマクロとか使って、リーダー部分をいじって変換するだけ。
言語仕様に入れるほどのものじゃないと思う。ライブラリや処理系のレイヤ。
最小限ってのもあまりよくないような みんなが好き勝手に作ってしまって 言語仕様ですらひとつにまとまらない
オブジェクト指向のライブラリもけっこうあって、好きな文法が選べる。 デフォルトの文法に従うのではなく、問題領域を簡潔に表記できる言語を作ってから書く。 最小限の部品で言語を作るための言語。文法が多いと専用の言語を作る時に邪魔になる。 但し大量の俺々schemeができて互換性がなくなる問題点がある。 R7RSが解決する予定。
>>785 横に長くなるのが嫌なら、手続き的に書くだけで充分に縦長になるので
その上に更にOOで幅を狭くしたいとは思わない
>>793 SICPの話しているんかと思ったんだけど
SICPにCommon Lisp関係ないしょ
アホはひとつしか言語が使えないのか。 分野によって使用言語を使い分けるのが常識だと思うけど。 言語の文法は優劣でなくて選択で、ある点で有利な文法は他の点では劣ってるのが普通。 言語の作り方を見せるという点でscheme以上の言語はいまのところない。
うちの教授はLispしか使えんぞ
SICPだから言語の作り方でなくて、計算の基礎理論か。 それにSICPはschemeの教科書ではないよ。 あれはCSの教科書。schemeの理由は上にあるように、CSを教える用途に優れてたから使っただけ。
今ならOcamlとかHaskell使った方がいいよね
S式ならね
>>787 Lispは文法の純潔さを選んでいるわけですね。
>>789 あくまで個人的な印象だけど、メッセージ送信の文法は構文糖以上だと思うな。
名前空間も絡んで来るし。
>>791 確かに選べるけど、それらが役に立つのは自分で新しくオブジェクトを書くときか
その文法が使われているライブラリを利用するときだけで、
既存のデータ型を好きな文法でシームレスに扱える訳じゃないから
あまり嬉しくなかったりする。
>>792 長さは置いておいても、意味が同じ手続きをプログラマ側で使い分けないといけないのが
面倒に感じるんだよね。
801 :
785 :2012/01/23(月) 15:03:18.43
>>789 ちょい追加。個人的な印象ってのはよくない。
vec.refからvector-refに展開するにはvecの型と対応する手続きを知ってないといけないから、
静的にはできないし構文糖とは言えないんじゃないかな。
pythonのnumpyに相当するものは欲しい 行列計算や数値計算の枠組みを共通化してほしい
共通化よりも変換だ unicodeとiconvのどっちかを捨てろと言われたらunicodeを捨てる
その二つを比べてどうする
>>800 端折り過ぎたというか、言葉が足りなくて色々考えさせたみたいで申し訳ない。
メソッドのディスパッチとか、そういった途中経過も勿論含めての話。
オブジェクトとメソッドへの引数を伴った、単なる手続きの呼び出しと、
最終的に等価になるのは同意してもらえると思うんだけど、どうだろうか。
それで納得してもらえたら、あとは
>>789 の最後の部分に続く。
>>802 ベクトル・行列演算ならBLAS
連立一次方程式ならLAPACK
とFotran由来の共通規格があるじゃないか
>>779 > 古典・漢文はいらんだろ。少なくても時間を減らすべき。
減らさずに土曜日授業もやればいいんだよ。
生物学は物理学との選択で学べず、地学は選択すらできなかった。
大学受験予備校化や実用主義って学問をやる上で邪魔な存在だよ。
実用主義に走りたいなら義務教育が終わったらやる気や才能ある奴が働きやすいようにしたらいい。
就職予備校化している大学は専門学校って名前を変えればいいんだよ。
>>786 なんか作ろうと思ってマイコン関連のスレにずっと常駐しているけど、
ブラックボックスになっているチップやモジュールは好まれず、仕様
公開とか、色々とホワイトボックスになっていないと好まれないじゃん。
オープンなAruduinoがあるけど、どういう位置づけなの?
あと具体的にブラックボックスのモジュールってどういうの?
> 言語でもありもののライブラリを集めて使うことが重要になってきたと。
これってSchemeの得意分野じゃないの。
>>788 そりゃあ、言語選びはもの凄く大事でしょう。
習字の二度書き禁止みたいに無駄に何個も覚えるもんではないからね。
シェルスクリプトbashを覚えちゃったけど、kshを覚えたかったなあ。
MSが作ったから馬鹿にしてたけど PowerShellが以外とよかった
>>808 ブラックボックスって言い方が悪かったか。仕様は公開されてるけど、使う時に
チップの中の電位分布の変化を意識したりしないでしょ。ディスクリートで
組む時のような意味では。インタフェースと定格と限界さえ理解してれば、
中身はブラックボックスとして扱っても良いってこと。
SICPの文脈だと、具体的には、MITでは電気電子情報の学生は初年度に
ロボットを作らせることになったのね。そのくらいの複雑度になると、
全てを把握するってのは無理で、出来合いのユニットのインタフェースを
理解して目的に合わせて使いこなしてゆくってことが重要になってくるって話。
> これってSchemeの得意分野じゃないの。
PythonのライブラリとSchemeのライブラリの量を比べてみれ。
Schemeが教育上の効率(言語の説明が省ける)で選ばれたのと同様、
Pythonが教育上の効率(使えるライブラリが既にたくさんある)で選ばれるわけさ。
この現実に不満があるなら、Schemeのライブラリを同じくらい充実させるしかないねえ。
SICPをSchemeで教えるかPythonで教えるかって話をしてるところに、 SICPを教えるかライブラリ利用云々を教えるかっていう、関係ありそうで全然別の話を持ち込んでる人が居ますね
何ヶ月も学習するわけだから 最初にやるSchemeとPythonの言語の大きさの差なんて誤差のうち むしろ一般人には規模が大きくてもPythonの方が楽に学べそうだ
全員が高校卒業までに体系的にSchemeを学ぶ必要はないけど、独学でやり込んで来てくれと
いう話じゃないの。
Pythonを一から教えるなら一年かかると思うし、半年で教えるなら色々と前提条件がつくんじゃないの。
MITのロボットの話だって事前に設計図を読めて書けて安価なマイコン・コンデンサ・モジュールを
組んだりとか、してきてねってことじゃないの。やっていないと物凄い苦労するよって。
人権無視で長時間拘束して大学で4年間教えていいなら教えられるけど、人権ありで4年間だと何も
教えられないんじゃないの。
>>812 なんで楽なのにPython3って普及しないの?
Python3.1になったらみんな使い始めるって計画じゃなかった?
今、 Stable release 3.2.2 / September 4, 2011; 4 months ago (2011-09-04)だよ
。
Pythonに思い入れがなく、ただ覚えやすいという宣伝文句にひっかかって使い出したに過ぎ
ないんじゃないのか。教祖のGuidoが3使えって言っているんだら3使えよ。
教祖に背くと地獄に行くぞ。
まだやってんのか
>811 >787 あたりみるとSICP書いて教えてる本人がいってるんじゃね?
MITはライブラリがないからScheme使うのやめたってことなのか
sussmanさんの話だとSICPをやめたのは時代遅れだからで Schemeをやめたのはライブラリがなかったからか
古い言語は捨てられ新しい言語が次々と作られる 一方、ライブラリは足りないから古いライブラリは生きのこる
>>818 > 古い言語は捨てられ新しい言語が次々と作られる
かくして世の中は思い付きで作られたポッと出の出来損ない言語とバグだらけの処理系だらけになる。
出来そこないの処理系の多さではSchemeがダントツでしょうな
sussmanって人SICPの著者?
>>818 でもLispにはライブラリがないから、捨てられるね
だれか、QtをSchemeにバインディングしてくれないかな
Qt程度ならSchemeで実装すりゃいいじゃん
>>820 はぁ?
そもそも仕様ができそこない、というゴミ言語が山ほどある時点で、
Schemeがダントツとかありえません。おまえの脳みそが出来損ないw
Schemeのマクロだけを詳しく噛み砕いて解説した本出した ら売れるよ
ライブラリの具体例がUIというのはすごいな 全然具体的じゃないがいかにもありそうな話だな
問題の切り分けができない負けず嫌いが教育を語る
>>824 仕様ができそこないがどんな意味で言ってるのかわからんが
とりあえず実装数の多さじゃSchemeはダントツだな次点はJavascriptか
みんなで処理系ばかり作っても意味ないだろ ライブラリ作れっての
処理系向けのテクニックが開発されていく言語というのがある。 そういう分野では処理系たくさん作られることが重要。
最近の処理系向けのテクニックってどんなんがある?
少なくともRacketはライブラリ充実してるぞ Chikenは既存のC++ライブラリをくっつけやすいから 違う意味で充実している
racketは名前が駄目だわ
「ライブラリが充実」で想定しているレベルに齟齬があるような気がする。 本業がプログラマでなく別の専門を持っている人たちが書いたようなもの、 生物屋さんがゲノムデータベースを簡単に検索して実験データと付き合わせるために 作りましたとか、経済学の人たちがセンサスの情報を統計処理しますとか、 言語学で文献のデジタル化をやっててその解析に使える便利ライブラリですよとか、 そのへんの層の厚さなんだよね。決め手になるのは。Schemeにそれが無いとは 言わないけれど。その分野の専門でない人間が聞き齧り、読み齧りで書いた ライブラリって、専門の現場のフローに合ってなくて使えないこともままあるし。 現場の人が現場の事情に合わせて書いて、それが蓄積されてるってのはでかいよ。 CS教育の話をしてるんだから関係ないと思うかもしれないが、研究にせよ開発にせよ、 今は別の分野の専門家とコラボしてソフトウェア工学を使ってその分野の問題を解決 する重要性が大きいし、今後もそっちが大きくなる一方だから。
日本の大学では インタプリタの作り方教えて リスパーの数を増やすことがCSだから
そういえば俺の大学には記号処理という名のcommonlispの授業があったな
つか別にインタプリタの作り方をやらなくて良くなったってわけじゃなくて、 メタサーキュラーインタプリタくらいは基礎教養としてスタート前にやっといてくれ、って くらいの話だと思う。 おいらは自分で何か書くならLispだし、Lisperが増えて欲しいとも思っているが、 だからこそ「それLispにもあるよ」ってタカをくくってる意見には賛同できない。
MITの学生は入学前にメタサーキュラーインタプリタ知っていると?
知ってる学生もいるだろうし、知らなかったら1ヶ月で詰め込める。
http://web.mit.edu/alexmv/6.S184/ てか大学の実験や実習なんて教わってないことだらけで、そんなのは自習するのが前提でしょ。
俺は日本の大学だったけど。
「スタート前にやっといてくれ」はちょっと変か。「講義でやらないけど知らなかったら自分で
やっといてね」くらい。
>>835 その辺の層の厚さが一番あるのはRとperl
pythonは正直いまひとつ 劣化matlab
>>841 日本語版 (3rd だが) なら読んだことがある。
SICP や Little Schemer と違って、 Scheme の言語機能の解説が多くを占める。
C++ にとっての `The C++ Programming Language' みたいなもの。
4th では R6RS を前提とした内容に大幅に改定されているはず。
>>835 非本業プログラマはCL一択でいいと思うんだけどね。gccに匹敵する速さだし、
REPLでelispとも親和性が高い。
>>842 PerlってRみたいに統計関連のツールって豊富なの?
Perlでやると遅くてメモリ食うわで最悪な選択な気がするんだけど。
>R6RSを前提 えーー
R6RSってR5RSと比べて全体的にどんな感じで変化した(させた)んでしょうか?
CLは美しくない
>>846 色々あるけど、モジュール化をどうするかが一番大きな議題だったように思う。
結果的にライブラリという概念を導入した。
# それさえ出来れば後々の規格改定で機能を追加することになっても、
# ライブラリを分けて共存を図ることもできるという思惑もあったみたいなのに
# R7RS では仕組を変えようとしてるので、おまいらもちつけと言いたい。
# しかも新しい提案も R6RS と劇的な差があるわけでもないし。
それとマクロシステムが拡張されて非健全なマクロ等も書けるようになった。
マクロで問題になる、マクロ展開時にどの環境を使うかという点はフェイズの概念を導入することで解決した。
フェイズはライブラリ単位で決まるので、上述のモジュール化の仕組みとも密接に関連している。
レコードや文字列ポートなど、多くのケースで便利な機能がちょろっと追加された。
R5RS までは小さい言語コアだけ決めて残りは SRFI や各処理系の裁量にお任せという感じだったのが、
ここへ来て方向性が変わった感じがする。
細かいことは↓を参照
http://practical-scheme.net/wiliki/wiliki.cgi?R6RS%3a%E5%A4%89%E6%9B%B4%E7%82%B9
CL、Scheme(R5RS)、Scheme(R6RS)、Clojure 利用者の割合はどんなんだろ
??? 4版も無料で読めるような気がするけど 気のせい?
あとでFBIの職員が集金に来ます
>>851 ごめん、3版しか使ってないから忘れてた。
本文読めるのなら質問しないで良いじゃないか・・・。
>>847 チンコはデカい方がいいだろ。
emacs子と親和性高いのは重要だよ。
>>835 > CS教育の話をしてるんだから関係ないと思うかもしれないが、研究にせよ開発にせよ、
> 今は別の分野の専門家とコラボしてソフトウェア工学を使ってその分野の問題を解決
> する重要性が大きいし、
応用プログラムを書くのとCSを専門として学ぶというのとは目的が全く違う。
数学で確率論やルベーグ積分を学ぶのと保険のアクチュアリーになるのが全く違うように。
今のCSは応用に向いた教育ばかりになってしまっていてCSを専門に学んだはずの人が
趣味や独学でプログラミングに上達した人と大して質的な差がなくなっている。
応用としてのプログラミングなんてものは、パソコン1台あれば専門教育なんて受けなくても勉強して身に着けようと思えば着けられるんだよ。
だって、プログラムを書くだけならば必要な知識はカタログ的な平板で雑多かつ多量の知識(ライブラリとかAPIとかね)なんだから。
そうすると、CSの教育を専門的に受けたというアドバンテージをどこに求めるのか、と言えば
体系的な知識、例えば雑多な様々なプログラミング言語を構成している基本概念やそれらの間の関係をきちんと理解しているとか、
それに基づいた様々な技術(プログラム解析とかね)を体系的に身に着けているといった点に求める事になる。
プログラミングに限らず他の分野でもカタログ的な知識は下手をすると素人マニアの方がプロよりも上だったりするわけだ。
例えば鉄道ヲタクの連中は、△△電鉄の3000型のブレーキは初期型は××製だったが後期型車両からは○○製になり
その結果として制動能力がどれだけ上がって云々なんてのを知っていたりする。下手をすると当の△△電鉄の関係者や
その3000型車両を設計・製造した車両メーカーの技術者よりも型番なんかに関しては詳しかったりする。
だけど、そんな知識を持っていても、その鉄ヲタは電鉄会社の整備主任も車両メーカーの設計技師も務まらない。
何故ならば、彼らに必要な知識は体系的なもの、つまり(科学や)工学だからだ。
今のCS教育は同じカタログ知識の教育に偏重していると思う。これでは素人プログラマと変わらない人材しか育てられない。
Schemeの長所は言語概念を体系的に教えるのに非常に適した言語だという事。だからCS教育に向いているんだ。
>Schemeの長所は言語概念を体系的に教えるのに非常に適した言語だという事。 これLisperの主観でしょ
今の時代に大学でしか学べないCSって何があるの? むしろ大学に行くと教える側の専門に縛られたりするんじゃね?
その大学で扱っている専門を知った上で入るならいいんだけど、 大抵の受験生は自分が受かりそうな中で偏差値が高いとか、 家から近いとかで大学選んでそうだし。
>>856 どういうことなんだろうな、Schemeだけで言語概念が云々ってのは。
lispが全てS式だからとか、再帰処理が構文解析器とかにマッチするとか、そんなん?
プログラミング言語論の授業では特定の言語に拘らず色んなパラダイムを紹介されたけどねえ
それと実装は別だな。特別に指定されない提出物なら全部pythonで書いてる
楽だから。何より楽だから。
matplotlibも便利でエクセルなんか使わずに結果をプロット出来るし
まあ他の言語もgnuplotとか使えるだろうけどmatplotlibのが楽
は?抽象構文木を直接扱って、いかなるパラダイムでも実現できるのは、現状Lispしかないだろ。 楽なのが良いならPerlを使うべきだろうな。ライブラリがダントツで、人為的な強制もない。 一つの言語で全て出来るという幻想を持ってるようだけど、長く続けてると言語処理系やOS等の下位層を直接弄る事態になるから。 複数の言語が出来て当然だから。年に一つは新しいプログラミング言語を憶えるべき(特にパラダイムが全く異なる言語を)だから。構文抽象というパラダイムはLispにしかないから。
誰が、一つで全てなんて幻想を持ってるって???まったく、LisperとPerlerがそうなだろうなあ 最も一つに拘ってるのがLisperだからな、初めから矛盾してる 指定されなければpythonつってるのに、それすらも読めないのかよ Cを指定されることが多いわ。こだわりが無いからpythonなんだよ お前みたいな頭がダイヤモンドより固い奴が、完全に思考停止して 毎年プログラミング言語を意味もなく覚えたり、意味もなく弄って何かやってるつもりになってると思うと頭がいたくなるわ プログラミング言語はツールだろ。いや、お前にとってはオナニーの道具なのかもしれないけどさ 必要に応じて使い分けてるだけなんで、ただやることもなくプログラミング言語の中をウロウロしてる浮浪者に何か言われる筋合いはないです
長文はやめて3行以内に分けてレスしよう まるで人が多いかのようにみえるよ!
議論なら良いけど、喧嘩なら他所でやってくれないかな。 自分の常駐してるスレでそういうのやられたら嫌でしょ?
Lisperが持ってる「見下し」というスペシャルスキルによって、Lispの実のない権威は支えられている 全てのパラダイムが実現できても、実際のプロジェクトにはほぼ使われない Lisp万能論車の妄想に付き合うのは面倒だが。少なくとも一般人は自由を強いられたいとは思ってないよ プログラミング作法があるのならそれに合わせたいの。趣味的な誤差でもね。特に見やすさは強制でなくても重視している、残念ながら。
必要に応じて使い分けるなら、構文を知るためにはLispが便利なのも分かるだろ。 一年に一つの言語は「達人プログラマ」だよ。もちろん読んでるよな。 最初から議論じゃなくて喧嘩だろ。未踏に落ちたか知らないけど、変なLispアンチ野郎との。
作法でなくて人為的に一部の操作をやり辛くしているのが問題だと言ってるんだよ。 書きたい事の足を言語が引っぱるの、しかも実装の必要でもない作者の主義とやらで。 Windozeと同じく一般人がやりたい事はやり易いけど、深い事をやろうとすると足を引っぱろうとする。 実際のプロジェクトに使いたいならscheme以外の言語をどうぞ。CLとかどうでしょうか。あるいは自分が頑張ってschemeのライブラリを書いて下さい。R7RSの議論に参加するのも良いのではないでしょうか。 但しLispのみが構文抽象を扱える重要な言語であるという事実は変わりません。
もちろん最初から今現在に至るまでずっと両方を邪魔に思ってる。 言わせんな恥ずかしい。
いや無批判に引用すんなよ。一年に一つの言語なんて馬鹿の極み それくらいも分からないの?本を読んでも意味をなしてないね だからさあ、構文を知るためにとか大袈裟なんだよね。噴飯物だよ。それも何かの本の引用なの? Schemeは書けるけど、別に構文を知るためにSchemeを勉強したわけでもなければ Lispを見たことなくても構文の勉強は出来るし。そうしてる大学も多いだろ
邪魔らしいので私は消滅、さらばだ。
>>866 Lisp至上主義の成れの果てだな、視野が極端に狭い
構文を知るためだけの言語
むしろ構文が1種類しかない言語なんだが
873 :
デフォルトの名無しさん :2012/01/25(水) 07:47:19.29
Lispは重要な言語じゃないだろw
わかった。 見下されたい奴は並べ↓
同じ括弧に見えるけど構文は1個じゃないんだよ
先頭にあるシンボルを解決した結果が関数かマクロかによって、S式(リスト構造)の 解釈(インタプリテーション)が変わるだけであって、S式を表現するための構文は唯一だ。 あとはアトムのリテラルの記法がいくつかあるだけで。
言語の話をしてるんじゃないの? ご自分で言語なんだがーつってるのにw
878 :
855 :2012/01/25(水) 11:36:40.67
>>856 > Schemeの長所は言語概念を体系的に教えるのに非常に適した言語だという事。
>
> これLisperの主観でしょ
違います。
ついでに言えばSchemeと他の大多数のLispとは上の一点に於いて全く違います。
ほとんどのLisp(典型はCommon Lisp)は基本的な言語概念が見えにくくなっています。
実用を重んじて言語設計された結果として、あまりにも余分なものや複合的なものが多いので。
(抽象構文木を直接的に表現できるデータ構造を基本データとして持っているという点はもちろんLisp族すべてに共通ですが)
SchemeはGuy Steeleの若き頃のMITレポートの数々を見ても分かるとおり、それまでの言語概念を突きつめて考察した結果から
可能な限り単純な要素概念だけを言語としては提供して、プログラムを書く側はそれらを自在に組み合わせられるようにする
という言語設計哲学に基づいて言語仕様が作られました。その点では他のLisp族言語よりもAlgol 60やAlgol 68の精神を引き継いだ言語です。
(Revised^6で台無しにされてしまいましたが)
Schemeの開発者たちがAlgol 60のシンプルで例外の少ない言語という精神を引き継ごうとしている事は、Schemeの言語仕様の
タイトルにも表されています。
RubyにせよPythonにせよ、もっと他の言語にせよ、実用で広く使われるのを狙って作られた言語は、Scheme以外の他のLisp系言語と同じく
言語概念が基本要素でなく複合的であったり様々なシュガーで最初から修飾された形でプログラマに提供されているケースが多く、
基本要素概念を単独で用いたいと思うと逆に回りくどい書き方をせねばならないようなケースがしばしばあります。
そこがSchemeとは決定的に違うのです。
Schemeは、少なくともRevised^5までは実用よりも言語の基本要素概念を学び理解する為の言語として言語仕様が策定されて来ました。
だからこそ、実用的な構文は最初からは入れずに体系的な構文拡張の方法を導入して、「シュガーが欲しければ自分で好みの言語に仕上げなさい」
というスタイルで実用側からの言語仕様拡大の圧力に対応して来たのです。
856のような人はSchemeをきちんと勉強した事がなく言語の基本要素概念とは何かを真剣に自分で考えようとした事がないのでしょう。
>>844 CLでgccなみに高速プログラム作るめんどくささは
cで最初から作った方がましな感じ
SchemeがLex/Yaccでどんな言語にも変換可能なら あらゆるアルゴリズムをSchemeで書く有用性もあるのだけどねえ
>実用側からの言語仕様拡大の圧力に対応して来たのです。 対応できてないから廃れてんだよ >言語の基本要素概念とは何か その基本概念も絶対的なものじゃないでしょ
882 :
デフォルトの名無しさん :2012/01/25(水) 13:17:10.43
>>881 最後の行は内容ある反論できずに相対主義持ち出して議論から逃げた典型だなw
883 :
デフォルトの名無しさん :2012/01/25(水) 13:45:30.40
Schemeが廃れた原因って10年ちょい前からのプログラミング言語論とかプログラミング論教育の軽視だろ ACMのカリキュラムでもその手の科目が消えるとかインディアナのFelleisenとか騒いでたし ACMのカリキュラムも881みたいな 知ったかプログラマに合わせたってことだろ 881も自分に内容あるって言いたきゃ Schemeとは全然ちがうけど 同じように見かけもフォーマルなセマンティクスも単純な コンセプトや構文だけで構成されてる 実用言語の具体例あげろよ 878の主張は実用言語は実用めざすから否応なしに複雑になっちまうってことだろ
言語の基本要素概念とはなんなのか? まずは855以外の人に聞きたいな
>>884 おおざっぱだけど言語仕様と言語の基本要素概念は同じものっていう定義でいいだろ。
>>885 >言語概念が基本要素でなく複合的であったり様々なシュガーで最初から修飾された形でプログラマに提供されているケースが多く、
>基本要素概念を単独で用いたいと思うと逆に回りくどい書き方をせねばならないようなケースがしばしばあります。
855の人の意見だと違うものだと取れるけど
コレはアレから導出できる、みたいなのを突き詰めていった時に 最後に残る要素はなんだろうみたいな話では。
最後に残る要素は何?
Lispの簡易実装を読んだらJavaScriptの動作が腑に落ちた。 てかJavaScriptじゃなくてLispにしてくれたらよかったのになあ。 つかHTMLがS式だったらよかったのになあ(笑
>>889 世の中の人が欲しているのは
DartとかCoffeeScriptでLispではない
(define (f) 3) と int f(void) { return 3; } は意味論的には同じだけど、 (define (f) 3) => (define f (lambda (x) 3)) で、これはSchemeがCにない無名関数という基本概念要素を持っている。 とか (define (f x) x) をCでやることはできない これはSchemeがCにない動的型付けという基本概念要素(?)を持っているから、とか? 言語仕様のなかでユーザーが利用できる概念のうちsyntax sugarでないもの? で、Schemeの基本概念要素は標準的なな言語が持ちうる概念を網羅している、という主張? ちゃんと考えると(怪しい)論文ができあがりそう。
仕様が50ページだから基本要素概念とはなんなのかって突き止められるし、実感できるけど。 www.unixuser.org/~euske/doc/r5rs-ja/r5rs-ja.pdf 仕様が500ページあると精読するだけで何日もかかるし、実感するには何ヶ月もかかるし、 全部突き止められるのか、怪しい。実装をみるとなると500ページに相当するコードも 読むハメになって、ゲロ吐きたくなる。そして言語の再実装をする奴ほとんどいないだろ。
実用言語を題材にしても全部の仕様を扱うわけじゃないでしょ Ocamlのサブセットのmini-Ocamlはたった2000行だっていうし
処理系実装時のコード量の話なんてしてないのに
>>895 >実装をみるとなると500ページに相当するコードも
>読むハメになって、ゲロ吐きたくなる。
>>894 7行スレに3行でLispっぽいものがあがってたけどw
そんなこと言ったらLispでそのままeval1行じゃん Camlのサブセットも似たような事をしてる そういうズルを見て言語を理解したと言えるのかよ
BNF記法がなくてコードが仕様の言語とかあったな
Schemeはlambdaが多機能・高機能すぎて細かい所でネックになる印象
>>893 その50ページは言い換えれば客寄せパンダ
Scheme特有の概念を普通に説明したら数倍の分量にはなるだろうし
平易な言葉で書き直せば500ページ超えも夢じゃない
BNF見ても言語は理解できない C++の例外だけで本になるように 継続だけで本になる マクロだけで本になる 末尾再帰だけで本になる
>>900 parse.y を読んだこともない馬鹿です、って自白しなくていいのにw
parse.yで対応できるのは簡単な文法だけ いまの流行りは手書きだろ
LISPはパースとかそういう「どうでもいい部分」をほぼ省略できるのが魅力なんだよ
それが言語の仕様読み解くのに関係してるって話だろ ちょっと前ぐらい読め
schelogでパースしようとしたら無限ループから返ってこなかった 仕方ないのであきらめた
>>899 > そもそもプログラミングする上で(Lispでも)仕様を全部読む必要なんていない。ゲロ吐きたくなる
仕様を全部読む必要ないと言うけど、一つの言語を体系的に深く理解して、言語
とはどんなものなのかとか、どういうのが作れるのかとか、ある程度の言語のイ
メージを捉えているから新しい言語でも判断できる話でしょ。
チュートリアルに沿って学習したり、雑務をこなすためにちょっとした雑多な処
理を書いて言語を理解するアプローチも大切だけど、概念を理解してトップダウ
ンで組むのも言語の理解が進む。
>>902 それだと500ページの仕様の言語が5,000ページという話になるじゃん。
pg御大が数学の論文を読むのには時間がかかる。それは一個一個が表現力が豊か
という話で数式とはそういうものだ。
BNFで読み解ける言語仕様って構文レベルでそ。
>>899 のBNFみて分かることって、
LISPって括弧がいっぱいあって入れ子になってるんだなーぐらいじゃん。
LISPの失敗 ・S式をXMLみたいに標準化しなかった(分派ごとに微妙にバラバラ、慢心、環境の違い) ・種類が多い割に今風の静的型とか型推論とか型方面が思考停止状態 その他の欠陥 ・括弧がいっぱいあって人を寄せ付けない(見た目が怖い) ・readが成功するまで言語として構文解析できない
>>912 > ・S式をXMLみたいに標準化しなかった(分派ごとに微妙にバラバラ、慢心、環境の違い)
XMLが絶対善みたいな言い方だな。
> ・括弧がいっぱいあって人を寄せ付けない(見た目が怖い)
htmlのタグ<>が人を寄せ付けないという話は聞いたことないけどなあ。
食わず嫌いな怠惰人間の屁理屈にしか聞こえない。
<html <head <body <p blah >>>>> とかだったら怖いよ…
・使われないことをユーザのせいにする
htmlはネストしてはいるけど、あまり深刻ではないんだよな 冗長な終了タグがあるからだけど 何が終わったかが判るから、閉じ括弧の連続よりは心理的ダメージがが少ない
角括弧[]のお陰で心理的ダメージ軽減したんじゃなかったんですか!?
ちょっとつけたし そこにある名前を見るだけで何が終わったかが判るから、 閉じ括弧の連続よりは心理的ダメージが少ない 名前を利用してエラー検出もできる S式だと閉じ括弧から開き括弧の横の名前へという目線移動が発生する
冗長なのは括弧を数えるのにエディタ使えと言うのと同じだから 手書き派以外には受け入れられる 属性ズラズラ並べられるのは嫌いだけど
>>914 > <html <head <body <p blah >>>>> とかだったら怖いよ…
(html (head (body (p blah ))))
こうすると普通だけどなあ。
vim, emacsだったら(html (head (body (p blah ))))の方が扱いやすいし、冗長な終了タグが
問題なんじゃないの。冗長な終了タグが必要な時ってある? インデントもあるんだし。
Cの中括弧は複文インデントの文化とネストが比較的緩いから }}}}}}}}}}こんな連続で閉じて数える事は少ない つまりLISPは括弧でずいぶん損をしてるという話
>>920 なんか別スレで迷惑かけてる人と同じ匂いがした
連続括弧 ))))) とかは、DrRacketみたいなLISP対応エディタ使わないとキツいよね。
>>920 (html (head (body (p
blah
))))
いくら慣れてもどの閉じ括弧が何と対応するかは瞬時に判らないでしょ
<html><head><body><p>
blah
</p></body></head></html>
これだと3行目だけ見て判る
すっきりしてるけどもw いくら単純でも)))))))))))))))うわあああって人もいるよ 色弱な人は色分けされても困るし
見慣れない人は、これでもかと連打される閉じカッコには狂気を感じると思うw
短いが正義ならあれだ、みなまで言わない
>>925 > <html><head><body><p>
> blah
> </p></body></head></html>
(html
(head
(body
(p blah)
)
)
)
でも
(html (head (body
(p blah ))))
でもいいんじゃないの。
本文これだけなら個人的には(html (head (body (p blah ))))でいいかな。
あとそもそも論だけど、ある開始タグ・終了タグを変更したいときって開始タグを変更して、 終了タグを変更するわけでしょ? 面倒くさくない?
で、さっき思いついたけどS式でも任意オプションで 終了タグを入れられるようにしたらどうかな (html (head (body (p blah /p)))/html) readのエラー検出は向上すると思う
うむ、]で半端に区別するよりは良いな
>>933 うざいだけじゃね?
適切なインデントと対応する括弧へのジャンプができるエディタがあれば括弧なんか無いのも同然じゃろ
問題は、lengthとかリスト数えるとこでいちいち考慮しないとダメな点だな readとwriteの対称も維持するとreadで省くのもあれだし まあ却下だなw
半端に入れるぐらいなら終了タグ強制のS式と別のデータ構造にした方がいいか もうこの話はやめるわ
括弧無しでは格好がつかない
インデント(タブ)もカッコも同じようなもんだけどね html head body p blah
>>901 > Schemeはlambdaが多機能・高機能すぎて細かい所でネックになる印象
別にSchemeのlambdaは多機能でも高機能でもない。
単にCやJavaや多くの言語みたいに一度しか使わない関数(手続き)に
わざわざ名前を付ける必要はなくて、関数(手続き)を直書きできるというだけ。
Cの場合、関数には必ず名前を付けなければならない。つまり関数は名前を付けた一種の定数tなわけだ。
ところがそれへのポインタは変数に入れられる。
さらにデータの型(関数の引数や結果の型)として関数へのポインタという「型」もあって他のintなどの型と
同じように使えるかに見える。
つまりCでは整数とか浮動小数点数とか構造体とか関数とかポインタいったデータの種類と記憶域属性(auto, static, extern, constなど)とが
自由に組み合わせられないという意味で直交しておらず、関数に関しては妙な制約がある(constしかダメ)ということ。
そういう制約があるのでCではデータの種類や記憶域属性を基本要素概念として理解するのが面倒になる。
Schemeには基本要素概念同士の組み合わせに関してそういう奇妙な制約がほとんどない。(すぐには思いつかない)
そういう意味で個々の基本要素概念は独立で、各々の概念を理解すれば後は自在に組み合わせて使えば良いから明快なのだ。
Javaは次のバージョンからlambda使えるようになるみたいだよ
その前にJavaって関数内関数を定義できたっけ? その関数内だけでよく使う手続きが、関数の外に宙ぶらりんになってるの見るとイラッとくるよね(´・ω・`)
>>887 CTMを思い出した。そのパラダイムを実現するための
ギリギリ最小の構文は何かという観点から、
宣言的プログラミングに始まり、構文を少しずつ付け足して世界を広げていく本
記述はOzとかいう言語で、同じような話をLispでもできるだろうけど、
Lispで行うべき必然性もないような気がする
>>943 C#3.0「ラムダ式があれば匿名メソッドなんていらんかったんや……」
C++11「Javaはラムダ式見送ったの?俺もう入れちゃったんだけど」
ECMAScript5「俺はまだ本当のラムダ式を導入していない、この意味が分かるな?」
>>947 反論できなくなると黙ってろしか言えない馬鹿は死ね
>>944 おれもCやC++使うとき、関数内関数が書けなくてイラってするときがよくある。
昔CかC++で関数内関数を書いた気がしたんだがきのせいだったんかな(笑
GCC拡張じゃないの
最近はclangならblocksっていうのがある。
>>949 C++なら関数内structでstatic関数定義すればいい。
>>953 それはやったことあるけど、書くのもアクセスするのも面倒だよなー(笑
struct xxx{static } 書くときに増えるのは20文字。呼び出しで増えるのは4文字。 それを面倒といわれても。 名前なしで定義できないのは確かに面倒。 名付けに必要なエネルギーはbodyを書くそれを上回ることが多い。
> 書くときに増えるのは20文字。呼び出しで増えるのは4文字。 書くときに増えるのは20文字。呼び出しで増えるのは5文字。
最近meta circular evaluator絡みでは、 Javascript/SpiderMonkeyのRiverTrail拡張が面白かった。 Lisp, Schemeの言語拡張だと、Racketの#langがアドホックだけど面白いね。 このスレではRacketを酷評する人もいるけどw
>>958 Racketは独自の道を歩んでいる感がなぁ(大抵のlisp族はそうだけどさ)
Racketって日本語の扱いはどんな具合なの?
愛昆布
963 :
デフォルトの名無しさん :
2012/01/28(土) 11:52:11.03 Schemeでclisp位の機能を持った処理系は有りますか? Racketは高機能すぎてもう少しシンプルなのがよいのですが・・・ guileやgausheはタブコンプリーションや矢印キーが使えなくて使い難いです。