1 :
デフォルトの名無しさん :
2013/03/13(水) 19:50:42.79
おつかlisp
私がこの世界に求める優しさのすべて― それがLispなんだと。 あぁ この世界の女性がみんなLisperになったら なんてすてきな世界なんだろうと考えました。 レトルトカレーしか作れぬお前がLisperになったところで そ れ は L i s p e r で は な い !
きめえよバカ そんなんだから女に優しくされないんだよ
再帰的な女性に優しくされたい
こうかくとSchemeに否定的に思われるかもしれませんが、普及する言語という のは、できるプログラマーに好かれるだけでは十分ではなく、そうではないプ ログラマーにも敷居の低いことは要件なんですよね。逆に言うと圏論や型推論 など、一般のプログラマーには難しい理論を要求する言語というのは普及は難 しいのではないでしょうかね。もちろん完全に隠し込めればいいのでしょうが、 コンパイルエラーやデバッグなどで顔を出す限りはなかなか難しい。というわ けで頭の良い方々が推奨されるプログラミング言語については、その普及とい う点では否定的に見ております。なお、アカデミアのプログラミング言語を専 門とする研究者(特に優秀な研究者)が設計した言語が大きく普及しないという のも、この辺りに遠因があるのではないかと邪推しております。
違和感なくlambdaを書けるようになったんだけど。lispのlambda的にbashのコマンドラインを書くと i=99 ; history | tail -n ${i} | less ## on bashかな。変数iをhistory-tailとしておくと!英数字 で頭文字から始まる文字列の直前の履歴コマンドを実行するからこっちの方が便利か。例!history-t lispで表すと((lambda (i) (less (tail :n i (history)))) 99) ;; on lisp で。Linuxってlambda的 なのか、lispが表現力豊かなのか。Linuxはlisp的であるという気づきは、lisp的考える事が好きな ので嬉しい気づきだ。コマンドラインもlispで考えていいなんて。 あとこれ、地上最強の言語Cで表すとどうなるの?
Linuxがlisp的?ないないw
x=1 ; i=19 ; j="~/bm/" ; k="/10MiB.iso" ; time nice -n ${i} xz -d -${x} ${j}${x}${k} ; \ x=3 ; time nice -n ${i} xz -d -${x} ${j}${x}${k} ; \ x=6 ; time nice -n ${i} xz -d -${x} ${j}${x}${k} ; \ x=9 ; time nice -n ${i} xz -d -${x} ${j}${x}${k} ## on bash
xzのベンチマークなんだけど、lispで無理やり書くと ((lambda (i j k l) (mapcar (lambda (x) (time (nice :n i (xz -d x (string-renketsu j (integer->string x) k))))) l)) 19 "~/bm/" "/10MiB.iso" '(1 3 6 9)) ;; on lisp
みたいな感じになる。Cだとi=1, i=3, i=6, i=9の部分は配列を使うのか。 lambdaを使えるようになるとREPLがより便利に感じるし、依存度が増すね。Python2をちょっぴり かじったんだけど、その時にREPLは便利だと感じていたけど、lispのREPLを使うようになってもう一
もう一度オナニーして寝た。以上っす。
段便利になって、lispのlambdaを使えるようになったら10倍便利になった気がする。 lambdaを使った事ない人にlambdaの効用を説明するポイントはワンライナーで書けて楽って事だよね。 wikipediaのlambdaのページを紹介されたら引くわ。 書いて思ったけど、lispは表現力豊かなのか。表現力豊か度で言うと三強はなんなんだろ。
病人みたいな文章だな。
lambdaの前にletの使い方を覚えたほうがいいんじゃない?
>>6 女性も再帰的に男性に優しくされたいワナ。
優しくしてくれるのは世界でlispだけだと割り切って、女性に再帰的に優しくしてやれ。
>>9 リンク未見。コミットして、手の届く範囲だけメンテすればいいんじゃないの。
>>15 オナニーは最大1日1回まで
>>17 あなたがね
>>7 プログラミングしたいだけなのに、いきなり大学数学みたいな話になるのが良くないと思う。
個人的には小学校のドリルみたいなのをたくさんやらせるとLispにハマると思うんだけどね。
lispを使わなくなっても高機能電卓としては使ってしまうでしょ。bashで((2 ** 10))みたいな事
できるけど。もっと凝った事ができるのか、不明。表現力の最大限界はどんなもんなんだろ。
誰もドリル作らないなら私が数年後に作るわ。
>>18-19 let構文使うとタイプ量が多いし、変数は可変でletあたりまでタイプして改変するのが面倒臭い。
ケータイメールで前略ないって起こる人か?
あと
>>18-19 みたいなのが外部からの新規者を排他的に排除する信者って奴だ。let構文書けるように
なったのにそういう事は気が回らないのか。
信念持って排他しているなら肯定してあげるわ。
揶揄とか排他とかいう問題ではなくて文章の意味が捉え難い。 すまんが言いたいことをもうちょっと推敲してから書込んでくれんかな。
Lisperは排他的だというのはほとんど誤解だろうね。 俺も最初はそう思いこんでたが、よく考えてみると自分の考えが稚拙だっただけで 一人空回りしていたというのがほとんどだった。
Lisperは排他というより実力不相応の選民意識を持っている感じがするな 世の中で使われるソフトひとつろくに作れないのに
>>12 ここにいる人はみんなこれぐらい書けますよ
for x in 1 3 6 9; do i=19; j="~/bm/"; k="/10MiB.iso"; time nice -n ${i} xz -d -${x} ${j}${x}${k}; done
もっと頑張りましょう
LisperはむしろLispなんて誰でもたやすく理解できると思ってる人が多い。 選民意識とは逆だと思う。 彼等に選民意識を感じるとしたらそれはおそらく鏡像ではないかな。
嫉妬していても自分の能力が上がるわけじゃないのにね
必要性を感じないものを理解するのは難しいもんだよ
他言語ユーザーのLispはすごいみたいなおべんちゃらをまともに受けているふしがある 本当にすごいと思っているならLispを使うだろ
嫉妬と決めつけるのもどうかと思うんだけど。 Lisperとかはプログラミングというものの捉え方がかなり違うから他と話がかみ合わない事があるんだよ。 上下という事ではなく、男女、犬猫くらい違う。
私はLispを使ったこと無いのですが、あなた方はLispの何がすごいと思いますか?
かっこいい!
括弧が多い!
変人に思われるところ
世界の料理ショー見てたから!
()イイネ!
俺の読んだ話だとポール・グレアムってLispで書かれてるらしいね。 そのLisp処理系はグレアムが実装した。 前のバージョンのグレアムがだ。 信じられるかい?そんなこと。 俺は信じないね。 けどLispならそれに近いことは出来るだろうな。
しょうもない粘着に費やす時間だけはあるのだな
>>29
おまえらがアニメとか見ている間にいろいろやってるんだよ
カッコが多くて読みにくくても、簡単に自動整形できるからいいよね 私は納品するときは逆に一行にしてる
・リスパーにあらずんばプログラマーにあらず ・天はリスパーの上にリスパーを作らず リスパーの下にリスパーを作らず ・リスパーの道はリスプ ・リスプの起源は韓国 まあ色々な格言があるけど、それくらい凄いってわけだ。
ぜんっぜん!ぜんっぜんおもしろくないよ!その書き込み!!
とある大学でFacebookアプリをつくる授業をしたところ 儲かって会社を作る学生が続出したそうな ビジネスで成功するには特別な才能がなくても大儲けできる 時と場所に居合わせるのが重要 グレアムとダン子飼いはその典型例 グレアムなんて今じゃ新言語ひとつ普及さえることのできない程度の能力
・カー(車)は左
そうさ、しかしそのタイミングが見えるのは人生に何度もあることじゃあない。 見えた時にモノに出来なきゃあ、UFOか雪男かrmsを見たと言ってるのと変わりはない。 じゃあモノにするにはどうしたら良いかかって? まずは世界の料理ショーを欠かさず見ることだHahaha
タイミングを逃すのは床の下に(略
一生遊んで暮らせる金があるにもかかわらず 便所の落書き以下の駄文を書いて小銭を稼いでいるのが残念な人
よし、俺もmixiアプリ作って大儲けするぞ。
>>よし、俺もmixiアプリ作って大儲けするぞ。 もうmixiの時代は過ぎておる
いや新言語普及させるってのもタイミングじゃないか? Javaだって物凄く時間がかかったし金もかかっただろう。 Rubyみたいにはなかなか成功するもんじゃないと思う。 例えばBrainfuckなんてまるで普及してないよな。 おっと例えがおかしいとか言いっこなしだぜHahaha…
巨匠グレアムは普及する言語は適度に汚いって言ってたな。
普及した言語は綺麗に直すとみんなが困るんだよ RubyとかPython程度の小変更ですら移行できないでいるし
何せ宇宙はLispで書かれてるからな。 凄いっつうかヤバイ。Lispヤバイ。
宇宙はLispでは書かれていないって証拠があるみたいよ
汚い方がみんなで四苦八苦して仕事してる様に見せかけられるからな。 俺なんかこの3ヵ月間、客先で運用の立ち会いしたが 9割方お茶飲んでネットやって、お菓子食って、鼻くそほじって、 、、やることなかったからな。 一度、客が全員後ろ向いた瞬間にバグフィックスと機能追加したくらいで。 Lispがエレガント過ぎるせいでそうなっちゃうんだ。 いつか後ろ向いてる間にこそっと乗っ取りしてしまうかもしれない。 あ、こういうのが選民意識に見えるのかゴメン。 鼻くそほじったってのは嘘だから。
>>55 その証拠はPrologで書かれてるんですね。
宇宙はハングルで書かれてるに決まってるだろ
人工知能とヒトモドキと猿のアイちゃんではどれが賢いの?
UNIXとCは最もよくできたウィルスだとか言ってる人が居たな。
猿のアイちゃん
>>55 > 宇宙はLispでは書かれていないって証拠があるみたいよ
神様がそうやってlisperに不安定な感じにしているのよ
戸外が「Perl5はもう殆どCLみたいだかんね」とか言ってたが、それってグレアム理論で言えば(略
近いうちに宇宙はHaskellで書き直されるよ。
Haskellマシンを作ってから出直してこい
2ch関数型言語モナードを作るわ
>>24 (何かの)信者になる奴が排他的であって、(* 2ch lisp)になるとその奴の排他性が強化されるん
じゃない。
>>26 添削だけだとつまらんからネタ投下してよ
>>27 (+ 1 1)がそんなに難しいかな?
(+ 1 1)を選民思想と言われても。
このスレ見るとやっぱLisperやべーな、と思う
>>29 実用性の選択肢として入っていない話か。実用性アピールがまだ弱いのかね。
>>30 M社は欠陥OSを売って、みんなに喜ばれているからな。
>>46 深いね
>>50 ICQ関連アプリで儲けてやる
>>51 Java、時間かかったよね。
超概算でいくらかけたんだろ。
>>60 人工知能の定義は? 拡張性はどこまでありなの? CPUとメモリとインターネットと電気だけだと
ほぼ植物人間だよな。あと賢いの定義は?
人口知能でセンター試験の問題解けるってマジ? スピンアトップ・スピンアトップ・スピンスピンスピンとか読んで理解できるの?
誰だよお前
病人みたいな文章だとは思ったが、本当に病人だとは思わなかった
>>69 ,71,72
これは朝鮮人のにおいがするな
>>73 統計処理すれば問題の文末の語尾だけで解答を特定できそうな気がする
>>77 2chブラウザにベイジアンフィルタ作るお仕事ですね。
スピンアトップ・スピンアトップ・スピンスピンスピンってのは 今年のセンター試験国語で出題された問題な
スパムエッグ・スパムスパム・ベーコンスパム的な
ユースピンミーラウンドラウンドラウンドラウンド みたいな。
初心者に向いているSCHEME処理系のオススメを教えて下さい。
gaucheでいいでしょ
Racketってどうなん
Schemeとの微妙な違いが初心者向きでない ドキュメントを読む時間のない人にはお勧めでない
微妙な違いが必要になった時点で初心者卒業だから問題ない
Racket も RnRS モードなら互換性が問題になることは無いと思う。 Windows 用のインストーラがあるし、IDE が含まれているので、これだけ入れれば始められるというところは初心者には楽。 機能が雑多に詰め込まれてるのは人によって評価が分かれるかも。 多機能とも言えるし、似たような機能が重複してて美しくないとも言える。 ドキュメントが英語なのは人によってはハードル高いかもしれない。
88 :
デフォルトの名無しさん :2013/03/16(土) 18:09:37.26
新生活も始まるし、ついでに具体的に聞いておく。
>>85 の1行目の言い分も分かるけど、
>>82 のかなりあいまいだけど憶測する用途だと
>>83 に同意。
で、gaucheで環境は何が鉄板なの?
>>85 の用途の具体って何? 2行目の具体は?
>>85 の言いたい最低限読むべきドキュメントは
何? 推奨で読むべきドキュメントは何?
急患さんでーす
90 :
デフォルトの名無しさん :2013/03/16(土) 18:18:03.14
来年の3月ぐらい入っての最初の
>>82 の類の質問には処理系と環境とドキュメントの3つの値を返す
べきだよね。値の数が多めに返ってくる分には無視すればいいわけだし。
質問者側も環境の具体と明確になっている用途を明記すべき。
>>89 > 急患さんでーす
>>89 は病人なのか。面倒くさいなあ。
青春18きっぷ時期だから被災地に行って、一皮剥いて来てよ。来週中にヤフオクで売りさばけば、
使用した回数分減らした額のほぼ定価で売れる。
>>91 被災地の人をなんだと思ってるんですかね(迫真)
津波は天罰。我欲を洗い流せ。
日本語がよくわからないなら英語で書いてもいいのよと提案してみるテスト 要するに「初心者向けの処理系といっても色々あるから目的を書けカス」 「互換性がーとかドキュメントがーとかいうならもっと具体的に書け池沼が」 とかそういうことが言いたいのか?
そもそも互換性が問題になるほど使い込なしていれば初心者じゃないような気がする それとも、初心者でも互換性が問題になることがあるのだろうか
チョンの正体はレプタリアン
>>96 そんな格好いい物じゃねぇだろw(括弧いい?)
最近暖かくなってきたし括弧脱がないとなあ
結局consの実装はどうするのが正しいんだ structでなくてunionというのがわからん
Lisp が括弧を脱いだら何になるの?
>>99 だいたいは自前でビット操作してると思う。
C の規格で未定義の部分に踏込むことになるけど、
Union ではビットタグのレイアウトをコントロールできないので。
>>88 これって典型的な時間のない人だな
有益なことに費やす時間のない人
>>104 だね。この人、自分の何がおかしいのか全然分からないんだろうな
2ちゃんねるのダメ系の板にしばらくいたことがありますが、ダメになる傾向って確かにあって一つしかないですね 何もしないことです 怠惰や失敗への恐れや他人への迷惑への懸念、大元の理由は様々ですが あそこにいる人たちの共通点は何もしてこなかった事に尽きます
>>103 はちみつ餃子たんから小説家になろうのリンクが出るとはおもわなんだw
>>107 カツコは第38話に登場。 漢字で括弧と書く話は第225話。
Racketは実用しようとすると微妙にいろいろたりない スクライブはtexの代わりになるかと思ったらテーブルが描けないとか Gaucheってその辺どうなの?
その辺ってどの辺?
Gauche 自体にはドキュメントの記述をサポートする機能は特に無いぞ。
言語処理系に何もかも含めてしまうというような気持はないらしくて、
例えば gauche-install も wget, configure, make を呼出すだけの薄いラッパーだったりする。
(小さいファイルひとつで構成されるような Pure Scheme のライブラリでも
configure から呼出してしまうのは大袈裟だからなんとかしたいとどこかで書いてはいたが。)
開発環境全体の面倒を見るタイプの Racket と比較すれば Racket の方が多機能だよ。
そこから話題はちょっとそれるが、
Gauche で書かれたテキストプロセッサってことなら tex-modoki というのがある。
https://github.com/k16shikano/tex-modoki 出力は html だけだし、そんなに高機能でもないけど。
あくまで TeX のモドキという位置付け。
執筆と組版のサポートということならこんなのもある。
https://github.com/yuumi3/GaucheMinDTP WiLiKi を拡張したシステムを使って執筆して wkihtmltopdf で pdf を生成する。
レンダリングは wkihtmltopdf に丸投げ。
ところで最近は Sublime Text 2 で Lisp コードを書くための拡張が整備されつつあるようだね。
http://nomnel.net/blog/st2-gauche/ Eclipse の Lisp サポートなどより期待できるのでは?
長らく Emacs 系か Vi 系の二択だった Lisp 開発環境に新たな勢力が現れて喜ばしい。
lisp使う人からすれば、Eclipseみたいな統合環境はかえって使いづらいのではなかろうか 特に頻繁にマウス操作しなければならない点がイライラする
S式と入力装置とかえらい遠いよなそれ。よく言われてるけどいつも思う
smalltalkもsqueqkレベルまでGUIに特化すれば触ろうかという気にもなるけど、中途半端にGUIそろえてもらっても困る 確実にマウス触るの嫌ななってるわ 画面に没頭してキーボードだけ叩いて脳のクロックが極限までアップしてるときにに、マウスに手を伸ばすと意識が途切れるのが分かる
マウスはともかく、eclipse の機能の豊富さはたいしたものだよね。明らかに並のプログラマーをパワーアップさせてくれる。
Emacs24.3ではcl-lib.elが標準で付いてくるらしい。 逆にCommon LispによるEmacs Lispの実装があれば 今までのelisp資産を生かしたままに現代的なLispの開発がしやすくなるのに。
Emacs Lisp と言えば、 Guile2 が Emacs Lisp をサポートっていうのは何かの布石なのだろうか。
GNUってUNIXをベースに開発言語をCとLispにしたものを作る ってのがコンセプトだったと記憶してるんだけど。 ストールマンが生きてる間に完成するのかな。
ちゃうやろ
GNU宣言(GNU Manifesto 1993年改訂)− 日本語版 −
GNUは、Unixのプログラムを実行できるようにするつもりだが、Unixとは同一
のものにはならない。(略)おそらく最終的には、いくつかのLispプログラム
と通常のUnixプログラムが1つの画面を共有できるようなLispベースのウィン
ドウ・システムを作る予定である。システム・プログラミング言語としては、
C言語とLispの両方が使用可能になるだろう
http://www.gnu.org/japan/manifesto-1993j-plain.html
1993年か 古いな 今だったらC++とPythonかJavaScriptだろう
C++ならまだしもJSはいやずら
126 :
デフォルトの名無しさん :2013/03/21(木) 15:35:19.79
guile上に全てのスクリプト言語を再実装する予定だった。 初期の配布にはAlgol風の言語のparserが含まれていたはず。
じゃあ Guile って GNU 的には結構な重要ポジションじゃないの
ストールマン当時としてはずば抜けたプログラマだったけど C言語に固執してC++を受け入れず GCC開発陣を苦しめたり 時代おくれな人になってしまったな
>>119 >今までのelisp資産
めぼしいのあるか・・?
Emacs Lisp で書かれたものの方が Common Lisp で書かれたものより多いくらいじゃないかと思うけど
>>130 多いかもしれんが, emacs の buffer edit 機能に頼りきってるアプリが多すぎて
CL的に emacs を実装して互換ライブラを誰かが作らないと無理ちゃう?
BASIC全滅宣言の1993年には蹂躙し放題だっただろうな。 復讐は予測しておくべきだった。
全滅宣言って何?
>>131 xyzzy がほぼ Common Lisp な拡張言語でうまくやってる実績があるわけだから、
Common Lisp ベースなテキストエディタは可能ではあるだろ。
ただ、 Emacs Lisp と共存ってなるとかなり無理はあるよなぁ。
偉大なるBASIC。それはSmalltalkを初めて記述した言語であり、 あの世界のポール・グレアムが最初に学んだ言語でもある。
CMU Common Lispには15年は前から、Emacsライクなエディタあるけど全然流行らないよな。
>>124 1993年は改訂であって、オリジナルは1985年
>>123 の部分は特に変わっていないはず
「emacsの利点マイナスemacsを覚えるコスト」を超えるアドバンテージを提供するlisp系言語の統合開発環境はまだない
>>136 Likeなだけで使い勝手良いかと言われたらうーむな感じ
LispworksのIDEも微妙
アレグロさんは良いけど個人で買うにはめんどくさすぎる
DrRacketはデバック機能が便利なので時々使う
別言語で再実装じゃなくてemacsにもう一つ別言語の処理系を乗せるというのはどうだろう。
地獄の始まり
call/ccもないのにschemeとな
emacsの機能を削っていくだけでも軽くて性能のよいモノができそうだと思うのは私だけでしょうか
具体的にどの辺の機能がいらないですか?
ドクター
思われても困るんだよな。
そんなとこにしか絡めないのか
自分の中でぼんやりと形作られていても その形を指すだけでは他人には伝わらない
ここまで全部ドクター
ところがドクターを削っても全く軽くなら無い
org-modeとかpackageとかいらないな
org-modeなかったら今の使い方で三割くらい俺割を食うな 大抵のレポートはorg-modeだけで十分書ける。
emacs の素敵なところは, lisper じゃない人たちが やたら無駄な努力を費やして *mode を作ってくれることじゃないか? 俺は elisp で世間様に公開できるようなものは作った記憶がない
emacsのスレで話した方がよいんじゃないのか? emacs(向けとしか言いようが無い)の機能を削ってlispをよくしたいってことなのかい?
159 :
デフォルトの名無しさん :2013/03/26(火) 21:34:41.60
>>157 プログラミング言語用のモードのこと言ってるの?
DrSchemeでelisp動くといいなあ
どうして Windows 版の Emacs だけ barebin パッケージがあるの?
Windowsは買った状態で開発環境(gccとmake)が付属してないから
メモリー1.5GのノートPCでDrRacketのステップラインデバック機能つかったら ステップ1つ進めるのに3分ぐらい待つ 何か設定でメモリー使用量を減らせないのだろうか
逆にメモリ使用量を増やせばいいのでは?
渋谷Lisp Gaucheナイト みたいなイベントってもうないの?
渋谷Lispは再始動しそうな感じがなかったっけ?
ひげ太郎はアメリカに行ったんじゃなかったっけ?
syntax-parameterize ってどういう意味の構文なのでしょうか matchマクロを展開したもの眺めてるのですが、ここがわからない
ざっと見た感じ、 parameterize をマクロ展開時にやるバージョンってだけのものだと思うが…。
(begin 1 (when false 2) は1にならないの? 昔のRacketがそんな感じだった気がしたのだけど
そういうのは #<void> とか #<undef> とか返す
perlじゃないんだから
>>173-174 規格としては未定義。
何らかの値が返ってくることを期待したコードを書いちゃダメ。
とは言え、 REPL のことを考えたらクラッシュ上等ってわけにもいかないし、
意味不明な挙動をしても困るので、
未定義を表すオブジェクトを返す実装は多い。
直前の式の評価結果がたまたまスタックに残ってて返ってきてしまうような実装は有り得るけど、
処理系の公式な仕様ってことはまず無いと思われる。
真面目な処理系は未定義のために #<undef> オブジェクトを返す、って相当間抜けな状況だ
そもそもundefは定義域から外れたというエラーなんだから返り値というのはおかしい 例外の一部とすべき
180 :
はちみつ餃子 ◆8X2XSCHEME :2013/04/02(火) 23:55:46.86
REPL でちょっと (副作用を期待して返り値がどうでもいい) 式を評価してエラーになるのもウザいじゃん。
#<undef>は未定義値だろ。
未定義は、引数が定義域の外にあるという意味なんだから、関数の値として未定義が返ってくるのは納得いかない 逆に、未定義を関数の値域の中の値とするなら、未定義の定義そのものと矛盾するからまた納得いかない
なので、未定義ではなく未実装にすべき 未定義は例外として関数の値域の中の値とは区別すべき 未実装なら値域のどれかの値を取り得る可能性があるが、未定義は値域の値のどれをも代表しない
>>183 規格として未定義なんだが。
実装は何を返そうとかまわんよ。
それに依存したコードを書いたら他で動くことが期待できんだけ。
>>182 >未定義は、引数が定義域の外にあるという意味
の出典を知りたい。
RnRS的にはundefinedじゃなくてunspecified (未規定) と言った方が正確かな。
ドメインの外から飛んできたという意味なのか、コドメインの中のモノを出すけどまだ特定できてないだけなのか
未定義な値や状態を陽に扱わないといけない場合もあります。
その典型例がIEEE 754のNaNやC99のfetestexcept(3)。
処理系やライブラリの実装者としては
できるだけ自分の庭の中で処理したくなるのは当然です。
>>182-183 3-Lispはその辺をもうちょっと厳密にやってました。
>>179 値だろうと例外だろうと、ドメインをリフトしない限り、
特別な値/例外を扱う、つまりドメインに埋め込みでやらざるを得ないです。
ごく単純な疑問なのですが、Gauche で準引用を試してみたところ gosh> `(1 ,(append '(+ 2) '(3)) 3) (1 (+ 2 3) 3) gosh> `(1 ,(+ 2 3) 3) (1 5 3) gosh> こうなるのですが、仕様的にはどういう説明になるのでしょうか? 個人的にはどちらも (1 5 3) になるべきな気がするのですが…… 上の方の (+ 2 3) はリストで下の (+ 2 3) は procedure call などというのは、概念的に変ではないかと
(append '(+ 2) '(3)) (+ 2 3) 切り出して考えろよ 結果わかるだろ
いえ、 `, の組み合わせというのは継続部の評価の実行を意味するものではないのでしょうか? (eval (append '(+ 2) '(3)) (scheme-report-environment 5)) なら結果は5ですよね?
これとの違いをゆっくり考えてみて。
`(1 ,(eval (append '(+ 2) '(3)) (scheme-report-environment 5)) 3)
それから
>>191 ももう一度読んでみよう。
皆さんの言うこともわからないでも無いのですが、下の挙動を見てると どうにも気色悪いとしか…… gosh> (eval (+ `,(append '(+ 2) '(3)) 1) (scheme-report-environment 5)) *** ERROR: operation + is not defined between 1 and (+ 2 3) Stack Trace: _______________________________________ gosh> (eval `,(append '(+ 2) '(3)) (scheme-report-environment 5)) 5 gosh>
>>194 何が分からないでもないの?なぜ自分の思いこみを疑わないの?
一度 eval されたら、引数自体だけでなく、引数の引数までも全て eval されなければならない、 みたいな謎の信仰を抱えてそう。
(+ '(+ 2 3) 3)
これはまずいわな。
(+ (+ 2 3) 3)
との違いがわからないんだな。
S式がメタな構造であることがまだざっくりとしか理解できてない。
それから整定数が(eval x) == xであることにもまだ自覚的でないから、
backquoteが展開される時に1と3はquoteされてることにもたぶん気づいてない。
>>196 その逆で自分の気にいるところまで結果を再度evalして欲しいんでしょ?
(list '1 (append '(+ 2) '(3)) '3)の結果が、
(list '1 (+ 2 3) '3)の結果と一緒であって欲しい。
つまり(+ 2 3)をもう一度evalして欲しい。
実は
(eval '(append '(+ 2) '(3)) (interaction-environment))
を評価すると結果は
(+ 2 3)
になるんだよ すごいね!
これが
>>190 の一つ目の挙動なんだ
RacketのC++インターフェイス作ろうみたいな話題がMLで出てるけど boost.pythonみたいなもの作ろうとかしてるの?
foreign function interface でなく?
へー。 そんな話題が出てるんだ。 C++ は C と違って ABI がややこしいからめんどくさそう。
>>199 C++ って, 処理系によってとかおなじ処理系によってもバージョン単位で
ABI 違ってたりすることもあるんだけど, C++ そのまま呼ぶわけじゃない
よね?
バージョンに依存すれば良いじゃない > ABI Cじゃあるまいし、C++なんてそんなもんですよ
gcc と足並みを揃えるのは面倒そうだなぁ。 でも gc が既に結構アーキテクチャ依存っぽいし、今更か。
schemeをC言語にコンパイルするシステムを作る方向でやればいいと思う バイナリを作るときはそのC言語のコードをコンパイルするというスタイルで 昔smalltalkでやって完成したから、schemeでもできるはず schemeの処理系はschemeで表現できるから、これができれば一気に処理系が精錬されるはず
C を経由する処理系というと gambit, bigloo, chicken, rhizome/pi, stalin くらいか。 他にある?
Scheme48もブートストラップの部分はSchemeからCへコンパイルする。 もうメンテされてないのまで含めれば、Scheme->CとかHobbit (SCMのコンパイラ)とか、vscmもそうだったかな。 Cを経由する処理系はたくさんあるよ。 ただ、継続の扱いによってCとのインタフェースに違いが出てくるから、単に「C経由してるから Cから呼ぶのも簡単」というわけにはいかない。
CやC++で作られたScheme処理系で一番ソース読みやすい単純なものって どれになるんですか?
chibi-scheme じゃないかなぁ。
tinyScheme
g++のABIは3.3以前のと3.4以後の2つしかないよ。 今は事実上3.4以降のABI version 2しかないと思っていい。 オプション指定するとABI壊すコードも吐けるけど。-no-exceptionとか。 これはそうしたい環境があるんだからg++としてはサポートせざるを得ない。
素数夜曲読み始めたが言い本だな
>>214 バカ大学生たちがschemeで作ったscheme処理系をナメてはいけない
Smalltalkって最初はBASICで実装されたのなw 信じられないような本当の話。
217 :
デフォルトの名無しさん :2013/04/07(日) 23:03:27.27
日本語でおk
cffiのあるscheme処理系はいろいろあるけど templateで書かれたC++関数を呼んでくれる処理系ってないのでしょうか template<typename T> T f(T x){return x;} みたいな関数をffiから呼びたい
単に呼べれば良いなら、extern "C"でラッパー書けば良いんじゃないの。 直接呼びたいとか面倒そうなこと考えてるなら、頑張ってください。
template<typename T> T f(T x){return x;} を一度特殊化した後ならどの処理系も読める f<int>(x) とか。
?
>>220 無茶だよ。 その時点では実体化されてないんだから。
chickenのeasyffiにtemplateの記述があるけど 例は実体化した関数だけだから駄目な予感が
iPhoneアプリ. Windowsアプリを売って生き残れ Ver 1.7 リンク数61 Http://qr. net/kh4y
正規表現にグローバルマッチがないorz
欲しい機能がないと愚痴をこぼしたときに、探し方が悪いと返答されるところまでなら納得できるが、 ないなら勝手に作れという返答まで出てくるのでLISPコミュニティは嫌いです
どうぞどうぞ
変人多いしね
他の言語と違って、欲しい人が欲しいものを、言語実装者と同じレベルで作り込める環境があるからねぇ。 欲しいものが無いなら作ればいいんじゃね?
よく探せば間違いなくあるってのなら探し方が悪いと返答するかもしれんが、 実際に無いことが多いんだもの。
探している本人にはそりゃ必要に思えるんだろうけどねー 1スレ埋めるより作った方が早くない?って感じで
主要言語がライブラリでサポートしてる機能がないとがっかりする ライブラリ設計時に他の言語を参考にしてないのだろうか
主要言語は企業からの払い下げが多いかったり、企業が保守のコアメンバに入ってるから比べるのは酷 LISPは軍事研究から大学の研究室に解放するときに、ライブラリのいくつかを機密にしてしまったため、ライブラリのいくつかは一から作り直すハメになったという
マッカーシーさんもびっくりやなw
Gaucheって以前スレがあったような気がするんですが無くなったんですか? 覚え違いかな
land of lisp日本語版買って5月連休1週間集中で読もうと思ってるんですけど、文章量的にざっくりした話で、 ・到底無理 ・図表が多いのでページ数の割りに楽勝 ・主要部分だけなら十分いける くらいの感じで言うとしたらどんなもんでしょう>持ってる方
今まで読んだLispの本は? どんなLispプログラムを書いたことがある?
一日でイナフ
>>240 読めるよ。でも、手を動かしながら読まないともつたいないよ。
244 :
240 :2013/04/17(水) 23:17:57.67
lisp経験皆無、elispを設定の必要に駆られてコピペした位です。 HaskellとMLで関数型言語に対する壁はないのですが…
>>240 その本、おもしろい 大笑いしてしまう
電車の中で読むときは注意
俺って「数学ガール」とか「スモールコンパイラの制作で学ぶプログラムのしくみ」を読むとイライラしちゃうような人なんだよな。 真面目に考えてるところに余計な物語が入り込んできて思考をぶつ切りに中断させられるのがウザくて仕方がない。 Land of Lisp にも同じ匂いを感じるので今のところ敬遠してるんだけど、 物語部分と説明部分がうまく馴染んで滑らかに繋っているなら楽しく読めそうだとも思っているので、 そういう観点で見てどう思うかを尋きたい。
わかる。
>>246 ギャル絵が無いから大丈夫かも?
無いよね?
小説的にストーリー挟むというより、ジョークの小ネタを挟んでくる感じ。
Lispあるあるとかプログラミングあるあるとか挟んでくるのかwうっとーしーな
お前のほうが鬱陶しいわ。人に相談することかよ。
俺って〜な人なんです という文の破壊力ってなんなの
R7RS の投票が始まったらしいよ。
なんか前にも投票してなかったっけ? どういう手続きで決めることになってんのかわからん。
R5RSにどんな問題があるのか未だに分からない
どんどん仕様が大きくなるのが悲しい むしろシェイプアップしていくべき
そもそもR5RSで困ってる人っているの?
>>259 規格としてモジュールがなかったんで困った。
GaucheがデファクトスタンダードだったけどR7RSで決まったら
それが以後、維持されていってほしい。
モジュールシステムの規格化は Scheme 使いにとっての悲願である。 あと、マクロを生成するマクロで省略子を使えない場面があるのも問題視されてた。 R6RS では (... ...) と書いて展開を抑制する (要はエスケープ) ことで解決してたんだけど、 R7RS (ドラフト) では省略子として使う識別子を別途与える方式。 どちらがいいかは色々意見はあると思うが、 R6RS からあえて変えるほどのものとは思えないんだよな。
typed racketがちゃんと動くようになったらHaskell勉強する意味がなくなる気がする
むしろ、マクロを仕様から外してほしいと思うのは俺だけか
型ヒントつけて高速になるのはプリミティブの数値計算くらいじゃね?
Typed Racket も素の Racket より遅かったような
uniform-vectorで行列計算でもすればいいのでしょうか?
実装を見ると変数のタグを見て適用する関数を振り分けてる そこをソースコードで指示してショートカットしても大して速度向上するとは思わない 携帯端末とかで空間効率を上げるというなら分かるが
つまり最近のScheme処理系は、かなり効率的な型推論を組み込んでしまってるわけですね
全然つまってない件
typed racketでやってるのは、型ヒント付けてプリミティブにしたり型チェックしないようにするのではなく、検査で遅くなるような処理だったと思う。
assertion の一種って感じ?
typed racket 勉強したら型付きλ計算分かるようになる?
ならない。
えーそうなの?
理論的には、λ計算は基本的に全部型付きλ計算なんだけどね
電子計算機出来る前から型という概念があったの?
あったの
>>277 素朴集合論により導入された矛盾を除去するためのタイプ理論。
現実世界も数学ですやん
>>276 型のない(というか静的に付けられない)λ計算だってあるやん。
Y コンビネータが有名だけど。
>>281 プログラミングと数学とが繋がってるのは必然。
計算不可能な領域が有ることが判った後、では計算可能な領域とはどの辺り
なのかを検証しようとした結果、今のアーキテクチャが出来たんだから。
文系高卒の俺には理解できない領域だ…
結局、型はドメインのことだからな… むしろ、計算機プログラムの分野が null を発明したせいで型の厳密性があやふやになった
SD5月号の推薦図書特集で、英語の講義ビデオや輪講参加できるならSICP、独習するなら素数夜曲(付録パート)というオススメがあったよ。
独習ならそうだねえ 説教の部分だけざっと読んで感動してすませるのもよし
SICPはscheme処理系自作への入門が載ってる点が優れている
>>287 もっとあやふやなチャーチ数の方が古いです。
場違いな話で1人盛り上がられてもね
場違いかもしれないけど、SICPの講義ビデオの字幕つきってありますか?
あ、日本語のです。
これからMITの授業受けようってやつに字幕要るかね。
youtubeに突っ込めば字幕付くんじゃない? 英語は結構いい感じになってきているし。
>>290 あの本そんな面白そうな話が載っているのか。原書買って積んでたけど、開いてみるか…
「自作への入門」っていうわかりやすい感じには書いてないけどなw
>>298 ジェネリック型や amb や 遅延ストリームの説明するついでに実装しちゃったという感じ
わたしたちのオーム社さんに Lisp in Small Pieces の邦訳版を出してもらおう 新版出てるの出てないのって話もあったような
>>295 これからMITの授業受けようという人が講義ビデオを見るのかね?
302 :
デフォルトの名無しさん :2013/04/26(金) 03:05:40.06
ambの引数に他で定義したlistもってくるにはどうすればいいの? (amb-collect (let* ((y (list (list 1 2 3 4 5 11) (list 6 7 8 9 10 4))) (x (list ;(apply (cons amb (list-ref y 0))) ;(apply (cons amb (list-ref y 01)) (amb ,@(list-ref y 0)) (amb ,@(list-ref y 1)) )) ) (if (not (= (+ (list-ref x 0) (list-ref x 1) ) 15)) (amb) (list (list-ref x 0) (list-ref x 1) ))))
SICPの和田訳を簡単な日本語に訳した本が欲しい
現代語訳 SICP w
Land of Lispじゃだめなん?
>>291 チャーチ数とかラムダ式使った諸々、あとコンビネータとかも、定義通り計算すれば言ってる事は分かるけど、
こんなもんどうやって思いついたんだろうとか思ってしまう。
経緯とか元ネタとかアイデアの素とか分かる本とかサイトとかないですか。
lispっぽく無いからここでその手の話は止した方がいい?
悪くないと思うけど。他に適当なスレもないし。 基本的にどの本もカッチリ理論を攻めていて、緩〜く解説した本ってあまりないんだよね。
>>307 学習者の理解レベルに応じて、記述範囲・詳細度が動的に変化するテキストを作るんだ!
これくらいやって始めて、電子書籍と呼べる。
家族砲の「説明書」かよw
実用性重視で理論を軽視して設計したC言語には理論を求めないのに、理論を重視して設計したlispには理論を求める不思議
>>306 もともとチャーチ先生は数学基礎論屋だったから、
数学の基礎付けをするための自分の論理体系を作ろうとしていた。
ところが自分の研究室の学生だったクリーネとロッサーが
その体型に矛盾を見つけてしまったので、
この体系を詳細に調べて、深く掘り下げいこうとした。
その過程で体系の一部分だったラムダ計算だけで充分なことが分かった。
クリーネと共著の論文でチャーチ数を発表してる。
クリーネ自身が「ゲーデルを語る」で話しているが、
チャーチの研究室はチャーチの体系のみ徹底して追及する研究室だったとのこと。
だからこんなに掘り下げることが出来たのだと思う。
上の本にその辺の経緯は少しだけ書いてある。
"The Collected Works of Alonzo Church"は、まだ頓挫中みたい。
「チャーチ研て、自分とこの理論がバグってたらしいよ」 (ヒソヒソ 「やだ、恥かしぃ」 「講義ではあんな偉そうに喋ってたのにね」 (クスクス
313 :
デフォルトの名無しさん :2013/04/27(土) 00:21:07.92
SICP読みなおした 読んで身に付いたこと 機械語やC言語を経由しないプログラミング入門 型にタグ付ける方法 scheme処理系の枠組の実装 ambの実装 遅延評価の実装 和田語
>>310 lisp=期待される子、ってことでは?
マクロが便利だからLisp使ってるだけで 深く考えたことはないな
>>316 ペアノの公理系とチャーチ数は同じものだと考えていいのかい?
ペアノの公理系(の自然数の部分):ラムダ計算:チャーチ数 = 仕様:アーキテクチャ:実装 アーキテクチャに合わせた実装。 > ;;ノイマン版 懼, {懼}, {懼,{懼}},... これが集合論というアーキテクチャに合わせたバージョン。 succも集合演算で定義できる。
文字化けしちゃった... ついでに < n = λf.λx.^n x) と修正
S式版 (), (()), (() (())), (() (()) (() (())),... (defun succ (n) (append n (list n)))
322 :
306 :2013/04/27(土) 16:53:54.93
>>316 興味深い話題の紹介ありがとう。
なんか数学の世界のマシン語みたいなところだ、喩えが上手くないかもしれないけど。
また面白そうな世界へのドアを一つ開いてしまったか。。
誰だ!このドア開けっ放しにしたのは ちゃんと閉じれ。
___
/|∧_∧|
||. (・ω・´|
>>1 乙!
||oと. U|
|| |(__)J|
||/彡 ̄ ガチャ
___
/|∧_∧|
||. ( | じゃ、そういうことで
||oと. |
|| |(__)J|
||/彡 ̄ ガチャ
___
| |
| o.|
| |
| |
 ̄ ̄ バタン
lambda ランバダ
ここらへんの話って、素数夜曲読めばもうちょっと詳しく書いてあるのかな。
嫌がらせのように詳しく書いてあるよ
>>319 SICPだとモデルって言ってるね。
計算モデルとか関数適用の置換モデルとか。
>>316 のwikipediaでも。
通常、実装はさらに一枚現実側の層だから。
けどこの板は実装と言った方が分かりやすそう。
"more fun and accessible with its collection of comics and games" lolやlearn you a haskell的なノリか
(define amb-as-function lst) (amb lst) ) がうまく動かないのですがマクロを関数化するのってlambdaで囲むだけじゃだめなんですか?
なんか括弧の対応が出来てないけど、そういう話ではなくて?
>>302 を要約すると
>>332 (define (amb-as-function lst)
(apply (cons amb lst))
)
もうまくいかない
革命機ヴルヴルヴァイヴ
Gauche に R7RS モード入った。
R7RS ってのはいいものなのかい?
考え方や用途によるんじゃないの。 モジールやレコードを入れるのは順当な感じかな。 syntax-rules の改良は当然必要だからアリだろ。 バイトベクタや例外も細かいことは srfi でいいとしても最低限度の共通化は必要だろうし、こんなもんだろ。 datum labels はコアに入れる必要あるかなぁ? ちょっと微妙な気がする。 #true / #false は余計なマネって感じがしないでもない。
はちみつSchemeもR7RSになるんか?
査読の厳しさは色々だよ。 掲載されても、それがどう評価されるかは別な話。
「Scheme処理系作りました」ってとこ自体には全く新規性はない。論文にするとすれば、 何かアイディアがあって、その有効性を示す例のひとつとしてScheme処理系を作って見ました、 というパターンだね。あるいは、制約のあるシステムを考えて、そこでそれなりに使えるプログラムが 動くことを示す例としてScheme処理系を載せてみました、とか。
>>342 実装系ではSoftware Practice and ExperienceとTOPLAS。
後は雑誌ではないがLisp系のconferenceのproceedings。
>>342 処理系作ったというところより、
Javaと連携可能なScheme処理系で一級継続をうまく実装する方法を考えてやってみたらできたよ
継続持ってない他の言語でも実装可能かもね
というところが主題なんじゃないかなあ…
ちゃんと読んでないから違ってたらすまん
あいかわず IRC の (freenode の) #Lisp_Scheme チャンネルは過疎ってるなぁ。
過疎が普通の姿だろ 2ちゃんのlispスレとD言語スレの勢いは異常。普通と思ってはいけない
Chaton Gauche には人が結構いるよね
異世界系でなくてロウファンタジーでもない (超常的なことがおこらない) タイプの作品が話題にあまりのぼらないよね。 投稿されてる作品の割合で異世界系が多いからしょうがないんだろうけど。
あ、ごめん。 誤爆った。 小説家になろうスレに投稿しようとしたんだけど。
リリカルLispかと思った。
リリカル Lisp の人、 NScripter で Lisp 処理系を作るのはまだしも、 ニコニコスクリプトでも Lisp 処理系作ってたりして、 良い意味で変な方向にガッツがあるよね。 そのガッツで教育用ソフトを作ろうと思ってくれたことには感謝したい。 なんだかんだで Lisp が使われないのは今 Lisp で動いているものが少なくて Lisp に触れる機会が少ないというのは理由のひとつだと思うんだわ。 入口になりうるものがあれば紹介しやすいし、 ただ話題性があるものを提供するだけでも結構効果ありそう。 あとアリサかわいい。
すずかは?
_〆(・_・。) はちみつ氏はアリサ派と…
アリサ・ローウェルか
アルトッサ イルトッサ キルルルハー
観月ありさ
クダー(・∀・)モエッ
>>356 リリカルLispをあらためて確認してみたがアリサ・バニングスとは名乗ってないね。
でも鮫島が「バニングス家の科学力は、世界一ぃぃぃぃぃぃぃ――」と言っている場面があるのでリリカルLispのアリサはアリサ・バニングスと断定していいと思う。
>>354 アリサの輝きの前には他の全てはかすんでしまうんです。
>>356 >>360 とらハの設定がなのはシリーズでどこまで有効なのかよくわかりません。
アリサ・ローウェルは完全に無かったことになったものとしていいと思いますが、
すずかが吸血鬼であるという設定はなのはシリーズでも残っているのでしょうか?
強いて言えばコミックス版でのすずかはかなりの身体能力があるように描写されているのですが、
吸血鬼としての能力という設定なのか、単に優秀ということになっているのかはっきりしません。
なのはシリーズの作中で全く触れられないので設定でどうなっていようと関係ないと言えば関係ないのですが、
二次創作小説では吸血鬼であるという設定にしているものも少なからずあり、たいへん気になっています。
このあたりの設定についてわかる関係者の発言などの情報をお持ちの方がいればぜひ教えて下さい。
それと、恭也と美由希は高町士郎&桃子の実子ではなく養子であるという設定はなのはシリーズでも公式にされているのでしょうか?
もしそうでないとするなら桃子の年齢から言って色々とアレなので二次創作をするにしても考慮しないとならないので…。
スレ違い
これだから大きなお友達は
ゆゆS式
>ゆゆS式 情報処理部 今日のまとめ Yコンビネーター:難しい
sicp妖精s 「これ何て言ってるのかな」 「なんじゃこりゃあ。condの括弧の数あわねえし」
なに括弧のサイズさえ合えばいいのさ。 lispなんてそんなものさ
マッコイ乙
お前、入荷お知らせメール受け取ったな
タコぷーって何かと思ったらTACPか。
英語版でいいじゃない、って言おうと思ったけど洋書の値上がりっぷりが凄い。 円が2割くらい価値を失ったから仕方ないのだが。
円高の時に買っとけばよかったじゃん
そろそろ電気代上げるかな
国民は馬鹿だから、社員の福利厚生充実しまくりで赤字ですとか言って、いいように上げてくるよ。 lispと関係ないけど
>>376 燃料の高騰があるからどちらにせよ上がるよ。
燃料費を反映させるのは政府に申請する必要もなかったはずだし。
板違いの話題はせめてS式で語ってくれないか。
スティール兄貴の愛読していた本だよね?>たこぷー
愛読っつーか辞書みたいなもんだから、通して読む種類の本じゃねーよってクヌース自身は考えてるみたいだけどな。
>>380 ファインマン先生は, 幼少の頃からブリタニカを通読し大量に書き込みもしてていたらしいが
ノイマン級は歴史書44冊諳んじたとか、計算機より速いとか逸話がある。
初期のコンピュータ技師「ほんとうに読んだ本を暗記しているのかい? じゃあ試しに...えーと、二都物語...の最初を暗唱してくれ」 ノイマン「(スラスラスラ)」 ノイマン「(スラスラスラ)」 ノイマン「(スラスラスラ)」 技師「わかった。もういい...」
ノイマンさんコンピュータなんか作らないで自分の脳みその研究すればえかったんちゃうの?
自分の脳味噌を研究に使うよう遺言。
>>386 そんな遺言してないと思ったけど。
ていうか晩年の脳はだいぶヤバかったんじゃないか、フォン・ノイマンは。
脳が保存されたのはアインシュタイン。遺言に従って、ではなかったと思った。
アラン・ケイが考えるオブジェクト指向プログラミング - @katzchang.contexts
http://d.hatena.ne.jp/katzchang/20080807/p2 >私が考えるOOPはメッセージング、状態処理のローカルでの保有・保護・隠蔽、そして全ての物に対する強力な遅延束縛、これだけだ。
>これはSmalltalkとLISPだけが実現できている。他のシステムでも可能かもしれないが、私は知らない。
2003年の発言だけど、今でもsmalltalkとlispだけなんだろうか
LL系ならたいがいできてるんじゃないかね 「メッセージング」の定義にもよるが
全ての物に対する強力な遅延束縛というのは何だろう
全てにおいて実行時束縛が可能なこと。 実行時に型を変更できない言語は駄目。
Land of Lisp読了 印象に残ったのはHaskell 共和国こえぇぇぇ
>>392 >Haskell 共和国こえぇぇぇ
kwsk
副作用使用罪を犯した罪で逮捕
マクロ濫用罪ってのはどうよ?
Lisp使用罪で死刑
>>395 あのオフサイドルール自体がマクロみたいなもんだろ >Haskell
Template Haskell もあるでよ。 あれはマクロだろ。
オフサイドルールのどこがマクロなんだ? SRFI-49がリーダーマクロっぽく定義されてるとしても、 それはHaskellと関係ないと思うが。
javaでlispインタプリタ作ってみたんだけど(tak 2 1 0)ですらスタックオーバーフロー起こして困ってる javaだと素直に実装するとこんなものなのかな これじゃベンチマークすらできなくて使い物にならない
Javaで深い再帰をしたいときにはJVMの起動オプションでスタックサイズを指定しないと
Schemeインタプリタなら素直に実装しようとすると自前でスタックを用意するよな
そうしないと TCO が出来ねーっていう話が。
(tak 2 1 0) => (tak (tak 1 1 0) (tak 0 0 2) (tak -1 2 1)) => (tak 0 2 1) => 1 こんだけじゃない? インタプリタがバグってるか tak の定義が間違ってるのかどっちかだと思うよ。
406 :
400 :2013/06/08(土) 13:06:00.39
確かに階乗は800くらいまではスタック溢れしないのにtakが溢れるのはバグかな 自前でスタック用意する方法も考えてみる ありがとう
takはスタックが深くならない、というのが利点(資源がしょぼい環境でも走らせられる)の一つだからな
と思ったがもしかしてtakとtaraiで違うんだっけ?
jvmには、末尾最適化がないとか。 あと、jvm上の言語実装だとrepl動かすときに -Xms=256m みたいなのがついてる。 そして、scalaやclojureはバイトコード生成するので、その部分をasmで実装してる。
ENVをJavaのObjectにしておけばtailコールできそうな気がするんだけど駄目なんだろうか?(1関数の大きさが64K以下ってなるだろうけど)
411 :
400 :2013/06/08(土) 17:03:38.88
スタックオーバーフローの原因は除算の第一引数に変数を入れるとその変数自体の値が変更されることだった Javaの名誉のために訂正しとく
>>400 ,411
まぁ2chに書くまえにもちつけ!ってことやね。
おつやよー
バグが出たらまずコンパイラのせいにするのが基本
>>409 taraiは普通に再帰しても、そもそもネストが深くならないから、末尾最適化は関係ない
そうか全部taraiのせいにすればいいのか
taraiが落ちた
(shimura ushiro ushiro)
現代魔法かよ!
consがどうしたって?
コンスは韓国起源ニダ!
konsに変えるニダ!
cdrねーw
cdrは百済発祥ニダ
carは夏王朝発祥アル
consは東ローマ帝国発祥ぷる
Lispでパラメタライズって動的スコープにすることなの?
既存のjavaプログラムを流用しかたかったら クロージャーが一番いいのだろうけど Scheme(Racket)のプログラムも流用したいなら Kawaがいいのだろうか 他にもJavaで書かれたScheme処理系がいくもあるので どれが一番いいのか
まあ個人的にはKawaを選ぶけど いまさらClojureを覚えるのも面倒だし
Clojureはleiningenができてからとても楽ちんになった,Lisp系ではお勧めの一つだけど Schemeが良いならJVM用ならKawaじゃね?
ABCLも忘れないであげて下さい。
Schluesselはどうよ?
おまえら、GUI出せて、日本語が入力できる処理系を教えろください。
Racket かな。 Gauche や Sagittarius も gtk バインディングが有るから GUI に手間取ることはないと思う。
SBCL+CommonQtとか言ってみる。 きっと茨の道だ。
すまん。 Sagittarius には gtk バインディングは無かった。 sagittarius-turquoise で出来たような気がしてたが、 あらためて見たら TODO のところに書いてた。 現時点では Windows しか対応してねぇー
438 :
433 :2013/06/12(水) 00:19:11.59
KawaいいよKawa
>>438 Allegro CommonLispの会社だろFrantz
>>438 schemeなんて言語使ってると現実世界で生きていくのが面倒くさくなって
世捨て人になっちまうぞ。Common Lisp使え。Common Lisp。
>441 あのさ、なんでもいいけどSchemeって書いてくれない。気持ち悪いから。
じゃあThe Schemeということで
先頭大文字とか lesser lisp 風情がおこがましいです。 schemeでいいです。
シンボルにしたらみなSCHEMEさ
(quote 時代遅れの老害)
>>445 R6RS では大文字と小文字を区別するよ
Lisp系言語総合スレとか需要ないよね
ああ、うん 早く独り立ちして自分で楽しいこと見つけてね
>>449 必要だよ、統合スレは冷たいひとが多いけど、CLスレは優しい人がいっぱいいるから棲み分けにいいじゃん。
そもそもCLだけに特化しなければならないプログラムをLispで書くという状況が分からない
そもそも特定の言語に特化されてないプログラムというものがわからない。
数当てゲームとか? そういえば大昔にゲーム会社が品物があがらないのでタイトルだけソレの数当てゲームでも出せとか言ったとか言わなかったとか
pokan
すいません lambda関数で遅延リストをシミュレートしたいのですがどうすればいいでしょう (car (funcall f)) ==> 1 (car (funcall (cdr (funcall f)))) ==> 2 (car (funcall (cdr (funcall (cdr (funcall f)))))) ==> 6 で以降n回目にnの階乗を返すようなfの定義をお願いします
(defun make-lazy-fact-stream (&optional (acc 1) (n 1)) (let ((acc (* n acc))) (cons acc (lambda () (make-lazy-fact-stream acc (+ n 1)))))) (defun f () (make-lazy-fact-stream)) ところで関数に別名つけるのどうやるんだっけ (setf (function f) (make-lazy-fact-stream)) だと思ったら違った
(symbol-function 'f) の事?
あ、ありがとうございますっ! ふぅ 次にしたいことはmapcan関数のlazy化だな
CLどころか処理系にもベッタリ依存してますがなにか? 移植性?なにそれ美味しいの?
JavaよりもLispよりもC言語が一番移植性が高かったというオチ
もうautoconf地獄はイヤづら。 Javaは意外と移植性高いんでね?
Cは仕様の範囲が狭いから、プラットフォーム依存は普通にあるし、 処理系依存だって別に珍しいことじゃない。 嘘だと思うなら、LP64からLLP64にポートしてみればいい。 mozilla.orgでさえ諦めるレベル。
>>462 pure javaの cursesライブラリが無いのがjava嫌いになる理由の一つかもしらん。
大学の演習や卒研で作ったプログラムのうち、今家のマシンでそのままコンパイル通って動くのはCで作ったモノだけだった 大学はsolarisで家はwindows7 MinGW強すぎ 感動した lispとjavaとprologとfortranは全滅 haskellはなかったけど、あったとしてもたぶん動かないだろう
状況を分類するとどれ? - 処理系が規格準拠ではない - 規格の改訂が多くて処理系の実装が追い付いてない - 規格が分裂して似たようなのが乱立している - 規格の規定範囲が狭いので処理系の拡張を使わざるを得ない - 規格なんかない
- 規格なんかない と他の4つとの区別がつかないんだが?
>>466 最強:「windowsでも動くコンパイラないですかね」と聞いて、何も考えずにそのコンパイラ入れて、ソースに何の手直しもしないのにコンパイルできてしかも実行できた
最悪:そもそもwindowsにコンパイラが入らない
最近は Common Lisp の処理系も Windows を意識してるみたいだけど、 同等とはいかないっぽいな。 特にスレッドがからむとやっかいな感じ? Common Lisp の事情はよく知らんけど。
処理系のビルドでエラーメッセージが出るとやる気がなくなる
しょんぼlisp がっかlisp もうこりごlisp
CLは言語仕様にスレッドサポートはないからなぁ。 典型的なキッチンシンクアプローチで、仕様策定されているから、 プラットフォームに関連する部分はどうしても処理系依存にならざるを得ないし。 この辺は、やっぱり昔の言語なんだと実感するね。
せめて標準出力くらいは完璧な互換性を確保してください
というか、もはや人材不足で仕様策定なんて無理。 コミュニティに利用者の少ないWindowsを無視すれば、 POSIX互換でほぼ問題ないわけだし。
優秀な人はみんなHaskell使っている Lispは残りカス
Haskell共和国へお帰り下さい
でも、人工知能系の論文書くとしたらまだまだlispだと思う
Haskell は面白いけど、マクロがないからなぁ。
QIと言わないところが何か中途半端だな。
lispを手続くがたっぽく使ってしまう自分が憎い そろそろland of lispの第4部読んだほうがいいかな
Schemeのテストフレームワークでお勧め何かありませんでしょうか テストする事が多すぎて自動化したい
残りカス
哀れな人がいるなあ
485 :
デフォルトの名無しさん :2013/06/21(金) 01:43:29.83
まともなWebブラウザもない言語はカスだよね
標準で日本語の出力ができない処理系や、どう設定してもWindowsのコマンドプロンプトで文字化けする処理系はウンコ
それ以前に、Windowsが!
linuxはウンコ 無料しか取り柄がない
490 :
デフォルトの名無しさん :2013/06/21(金) 11:38:58.14
dmatch マクロって何処がすごいのでしょうか 単なるmatchマクロに ? 構文つけたのと同じに見えるのですが
>>481 Lispなんだから手続き型っぽく書いてもイイじゃん。
マルチパラダイム万歳。
Schemeはシラネ。
Schemeも同じです。
やっぱりみんなも手続き型っぽく書いてるのか なんか再帰的な書き方にしないとLisper失格と思ってたんだけどそうでもないのか
業務プログラム向けのオペレータを作るのが楽だからね。 やりたい事によって、関数型っぽく書いたり、手続き型っぽくなったり。
問題を表すのに適した表現方法を選べるのが良いところ。
SICP の3章の冒頭で銀行講座を表す「オブジェクト」と、
それに対するモディファイアやアクセサを定義している様子は
オブジェクト指向的なスタイル。
回路シュミレータのところは制約プログラミングっぽい感じか。
4章の非決定性計算は Prolog っぽいな。
>>494 手続き型的な書き方が適切なのでそれを選んだのならいいけど、
Lisp に慣れてなくてそういう書き方しか出来てないんだとしたら
ちょっともったいないなとは思う。
>>496 色々と再帰的にリストを処理する関数は書いたけど
実際に何かを作るときにそれをうまく使えないんだよ
基本やりながら覚えていけば良いのでは? みんな072のやり方なんて教わらなかったろ? そのうちに、いろんな方法ができるようになるって。
>>496 >手続き型的な書き方が適切なのでそれを選んだのならいいけど、
CTMCPで、計算モデルとは何かを知っておくと迷いが減るよな。
proper tail recursionでないCLで再帰多用は要注意。 CLにはloopがあるでしょ。
>>498 072は中坊時代に保険の先生に…… orz
なんで直ぐに再帰やら計算量やらの小難しい話になっちゃうかね。 べつに再帰つかわなきゃLispっぽくないなんてことはないだろうに。 Lispはプログラマーのやり方のほうに言語が歩み寄ってくれる稀有な言語なんだから、 「こんなやり方知らないなんて、もったいない」とか上から目線とかどうかと思うけどね。 バリバリ手続きっぽく書かれていても、ココぞの部分でピリッと効いてるマクロとか 俺なんかそれ見ただけで「お、Lispっぽいじゃーん」とか思っちゃうけどね。
funcallを使い忘れてエラーになったときに一番lispっぽさを感じる。
lispの教科書を読むとfor文みたいな繰り返しの方が特殊だというような洗脳を受ける
ゲーデルとかチャーチとかチューリングとか再帰とか計算可能性とか論理学?計算機? そもそも自然数の定義があれでしょ?正方形を埋め尽くす曲線とか信じらんない
>>506 >正方形を埋め尽くす曲線
クロネッカー?、それともカオス?
ヒルベルトじゃね?テキトー
「ひるおび」ってテレビ番組があるけど、ヒルベルトを連想してしまう。
ペアノだね、自然数の定義に関するペアノの公理とかペアノ曲線とか
日付変更線に触れないように地球に好きなだけ曲線をひいて、メルカトル図形にすればいいんじゃね?
好きなだけ引いても覆い尽くされるかどうか分からない。 元々のお題は連続な曲線で閉区間を覆い尽くす者があるかどうか?ってお題。 だから具体的に例を示すか、存在証明をしないといけない。
あと,LISPとか前時代の化石をこれ見よがしに使ってますアピールするの見苦しいし,それってカッコつけてるだけだよねって
SRFI 49使えよ
> あと, 何が「あと,」だよw どこかのレスをコピペするからそうなる コピペプログラマーにお似合いだな
(* おおっと *)
>>514 曲線を1次元の図形だと考えると、これは曲線じゃなくね?
フラクタル曲線の次元は1次元よりも大きくて、その次元を限りなく2次元の図形に近づけることができる
次元が限りなく2次元に近い図形で、2次元図形の中を埋めるんだから、そりゃ、なにも不思議ではない
ずるい
お前は一体何を言っているんだ
いまさらそんなこと言ってる奴が「不思議ではない」とは笑わせる。
無知な獣を罠にハメるような設問は関心しない
数学わすれちゃったんで間違えてるかもしれないけど^^; SINカーブだって、正方形の一辺の長さを「l」としたとき、 l・sin(nθ)でn→∞にすれば正方形埋め尽くせるんじゃね?
そこで颯爽とイプシロン・デルタの登場!
ε「どーもーイプ シロンでーす!」 δ「どーもデル↑タです。なんでためんねんw」
全知全能の神の存在を否定するのに使ったプログラミング言語ってlispだったという話は本当でしょうか?
神さまなんて全裸煩悩だってギリシャのじっちゃんが言ってた
神はlispで書かれてるよ
どっかのバカLisperが神とか呼ばれてたな
Lisperは神ではないが 神はLisperかもしれないぞ
知らんがな
Lispは神というよりタオらしい
nil は atom を生じ、 atom は S 式を生じ、 S 式は万物を生ず。 ってやつか。
頭おかしくなったか
餃子がめずらしくウィットに富んだリンク先をしめしててワラタ いつもは自分の言葉なのに今日はどうした?>>はちみつ餃子タン
タオ=道とは? carは左
ELISは女の子 Symbolicsは男性器の象徴
SGIは、、あっそうか。
>>541 ワラタ
タリーズのコーヒー吹いた、スマフォ汚れてションボリ
S式がエレガントであることを証明できないことがlispを用いて証明されたと聞いたのだが
>>541 でもElis中尉はおばちゃんにしかみえないよね
S式からゆゆ式へ
それは由々しき事態
Lispスレは有用な話題もなくて寂れてますな
すごい
Lisp自体が時代遅れで有用じゃないから仕方ない
よくゆうよ
Lisperは総じて雑魚ばかり
大文字で入力しなくなってから軟弱になったな
(defmacro recur-let (name args &body body) (multiple-value-bind (vars vals) (labels ((f (lst vars vals) (if (null lst) (values (nreverse vars) (nreverse vals)) (f (cdr lst) (cons (caar lst) vars) (cons (cadar lst) vals))))) (f args nil nil)) `(labels ((,name (,@vars) ,@body)) (,name ,@vals)))) やったー lisper見習いだけどschemeの名前付きlet出来たよ
>>555 惜しい。初期値の評価は名前の束縛が無い環境でやらないとならない。
(recur-let name ((fn name)) (funcall fn ...) ...) となってる時、
2個目のnameはlabelsで束縛されるnameじゃなくて、その外側のスコープのnameってことね。
>>556 その式変数の初期化の部分がなにかおかしい気がするけど
(let ((evaled-vals (gensym)))
`(let ((,evaled-vals ,@vals))
(labels ((,name (,@vars)
,@body))
(,name ,evaled-vals))))))
(defun f () (format t "called~%"))
(named-let f ((fn 'f)) (funcall fn))
これでいいのかな
558 :
557 :2013/06/24(月) 20:30:43.80
おかしいのは僕の目でした
3分でわかるcommon lispの式評価規則の解説ってないですか? シンボル周りの扱いがさっぱりです。
ごめんなさい 30秒でわかるcommon lispの式評価規則の解説しか知らないです
>>559 どこがわからないのかわからないと説明しづらいと思う。
具体的な例を出してこう思うのにこうなるのは何でって質問してみそ。
俺は Common Lisp のことなんぞ知らんけど。
・シンボルは普通の値用と関数値を持つ ・リストの先頭の場合、関数値が参照される ・それ以外は普通の値が参照される ・ただしsetqやsymbol-functionなど例外がある ・ラムダ式は関数値でなく関数の名前である で1分 後は ・functionとsymbol-function、quoteの違いの話 ・スコープの話 ・setfの話 ・マクロの話 で2分くらいか
いやマクロ展開のタイミングの話は5分は必要か
それこそdotinstall.comの解説動画っぽくなりそう
>>561 ありがとうございます。
たとえばsymbol-valueは仕様書には「symbolのvalue cellを参照する」と書かれています。
setfの第1引数を(symbol-value 'a)にするとaのvalue cellの中身を書き換えることができるので
(symbol-value 'a)はcellの中身でなくcellへの参照値に評価されると思うのですが、
トップレベルで(symbol-value 'a)を評価するとcellの中身が返ってきます。
ということは参照値から中身への暗黙の変換を行う規則があるのだと思うのですが、
そういった規則はどれだけあってどういうときにどう働くのか全体が把握できない
といった悩みです。
setfは特殊形式 評価方法は普通の関数呼び出しと違って、それぞれ独自。
結局common lispは個別に関数やマクロをひとつずつ覚えていくしかない。 30秒で説明できるといった>560はたぶん冗談だろう。
まあマクロだけどな
570 :
デフォルトの名無しさん :2013/06/25(火) 00:57:02.60
最近みる妙の書き込みから想像すると ハスケルで何か劇的な新機能でもできたのかな?
land of lispの影響?
>>566 暗黙に参照に変換されることはない。setfの定義がうまいこと作られている。
まずsetfは関数でなくマクロなので、各引数は評価*されない*。
(setf (symbol-value 'a) 2)
とかすると各引数は評価されないでsetfに渡される。するとsetfは第一引数がリストだということと、
このリストの先頭にある名前、この場合ではsymbol-value、を見て、
それに対応する(あらかじめ色々な関数やマクロそれぞれに対して定義された)処理を探してくる仕掛け。
www.asahi-net.or.jp/~kc7k-nd/onlispjhtml/generalizedVariables.html
の最初と最後の節を参照。
あ、微妙に誤読してた、まあいいか
式の種類ごとにインバージョンの定義が必要なんだよね。 式を完全に評価してしまう一歩手前で止める、という演算が あればもっと汎用的にできた気がする(Cでいう&みたいな) たとえば (setq lst '(a b c)) のとき (car lst)は (car '(a b c)) → a → aの値 と評価されていくけど、 新しい演算lvalueを使うと (lvalue (car lst)) → (lvalue (car '(a b c))) → (lvalue a) → a で止まるみたいな。 そうすると (setf (car lst) 480) でなく (setq (lvalue (car lst)) 480) と書けるし、 インバージョンを用意する必要もない。
ハッシュとかどうするの 新規のキーに値を追加したいとき、その値を入れる場所は、まだ無いよ
お前らLispしか取り柄がないのに そのLispも不自由なのな
さてコイツの取り柄は何だろうな
ISLISP の読み方ってイズリスプでいいの?
使う側としては参照よりsetfのが汎用的だと思うけどなあ
マクロに関してはsetfは勝手に展開して追ってくれるので、オレオレアクセッサも
マクロとして定義してやる限りインバージョンを自分で定義する必要はほとんど発生しないと思う。
>>577 のリンクの冒頭に出てくるmaxfだってcommon lispでは
(define-modify-macro maxf (val)
(lambda (place val) (max place val)))
で定義出来るし、添字計算だって1回しかしない(これも
>>573 のリンク参照)。
しかしTAOよく知らないんだけど設計始まったのcommon lisp以前なんだな。
当時setfまわりあまり固まってなかったんだろうか。
582 :
デフォルトの名無しさん :2013/06/26(水) 04:04:01.88
>>581 define-modify-macroの話はそのリンク先を最後まで読むと書いてあるよ
>>581 David Moonのsetf hackとほぼ同時期なんじゃないか?
TAO関連はリアルタイムではほとんど発表してないはずだが。
若干日本語の報告があるだけで。
そうか。
エラーもか
setfはアラン・ケイのアイデアなんだってね
(map f lst) でfがvaluesを返す場合は動かない(racketの場合) 関数の返り値にvaluesなんか使うぐらいならlistで返した方がまし? valuesのメリットって何があるの?
>>590 ちょっと速度が速くなったりメモリ効率がよくなったりする可能性がある。
スタックに積んで呼出し元に戻るという戦略が可能であり、
その方法を使った場合はメモリアロケーションが発生しない。
が、実装によるんじゃねーの。
内部的にはリストを作って受渡すりょうな実装もあるから、そういうのなら結局は同じことになるか、
場合によってはリストを分解する手間の分だけ遅くなることも有り得る。
CPS 変換された世界では関数を呼出すのも戻ってくるのも同じことなので、
呼出しには複数の値を渡せるのに戻ってくるときはひとつだけってのでは理屈に合わなくなるっていう理由もあるっぽい。
規格の末尾にある形式的意味論では CPS で書かれてるとかなんとか聞いたけどよくわかんなかった。
ちなみに map の第一引数に渡す手続きは一個の値を返すことと規格では明記されてる。
リストよりは型が強い (lambda (x) (let-values (((a b) (f x))) a))
値の個数は型じゃないだろ。 多値はファーストクラスじゃないんだし。 でもまぁ、値の個数が決まってる場面では多値にしとくとチェックが働くのが良いとは俺も思う。
sol-fa-soft 薄着少女
596 :
595 :2013/07/09(火) 12:41:36.26
すいません。 誤爆しました。
let over the lambda is loli
もちろん18歳以上ですよ
Let Over Lambda Is ..?
納得いかない。eq?ならわかるがequal? でも#f #lang racket (require srfi/9) (define-record-type *foo-type* (make-foo name) foo-type? (name foo-id) ) (let ([x (make-foo 'a)] [y (make-foo 'a)] ) (equal? x y) ) ;=> #f
>>600 R6RS の equal? はリスト、ベクタ、文字列、バイトベクタ以外は eqv? と同じになる。 (11.5)
そしてレコードを eqv? で比較した場合、同一のコンストラクタによって作られた構造体であっても、
別個の呼出しで作られた構造体である場合は #f になる。 (Standard Libraries: 6.1)
単純に再帰的に辿っちゃ駄目って話はここらへんで議論されてるみたい。 私はちゃんと読んでないけど。
http://www.r6rs.org/r6rs-editors/2005-August/000830.html #lang racket の equal? はいくらか拡張されていたりはするみたいだが、
R6RS で #f となると定められているケースをあえて変更するほど強烈な動機があるかっていうとそうでもないように思う。
Racket は色々と冒険してるけど、 equal? はさすがにあまりに基本的な機能だからそうそう気軽に変えれないだろ。
Javaのequals()のオーバーライド的なことも出来んのかプンプン
SchemeというかLispの伝統なんだけど、型で操作が決まるんじゃなくて、型は単なる入れものとして
用意しておいてそれに対する操作を選ぶのは使う側だ、っていう文化がある。
リストを二分木に見たり連想リストに見たりね。
レコードの等価性も、レコード自身が決めるんじゃなくて、使う人によって何が等しいかを
決めるのが良いって背景があるかも。主流のオブジェクト指向とは異質だけれど。
Kent Pitmanがこの文化についてちょっと書いてたと思う。これかな。
http://www.nhplace.com/kent/PS/EQUAL.html
格言 「嫌なら自分で作り直せよ」
そしてCLOSが生まれた
モジュールはマルチバイト文字列関係と数値計算用の行列関係のモジュールだけをコアでいれておいてくれればいいよ、もう CLOS組み込むなら、型シグネチャを表現する仕組みをいれてほしかったり
>>609 の一番上のページで参照されてる元記事は、
凄く型の強い言語(OCaml)でのOOPの不自由さを言ってる。
CLOSはずっとフリーダム。
CLOS とマクロとリーダマクロ使うとどこまでも自由 むしろ自由すぎて辛いくらい
Lispの世界で「パラメーター」って動的スコープ変数の事なの?
>>614 Scheme では仮引数のこともパラメタと言う。
R5RS ではそのへん曖昧なんだけど、rest-parameter って言葉は使われてるな。
R6RS 以降でははっきりと argument と parameter が使い分けられるようになったっぽい。
srfi-39 のパラメタは動的スコープをエミュレートするオブジェクトだけど、
あくまでオブジェクト側の性質であって、
変数に属性が付いてるわけじゃない。
Common Lisp のスペシャル変数とは性質が違うので誤解なきように。
というわけで、「Lisp の世界で」と一括りにすることは出来ないんじゃないかなぁ。
他の Lisp を知ってる人のそこらへんの考察は尋いてみたいね。
defparameter の事を言ってる? defparameter で定義するのはプログラム全体に対するパラメタだと思う。 このパラメタは動的スコープの変数だけど、 全ての動的スコープの変数をパラメタと呼ぶわけじゃない。 それとは別に、いわゆる仮引数の事も普通にパラメタと呼んでると思う。
一昔前まで Scheme に限らず argument と parameter の区別ははっきりしてなかったんだけど、 (訳がというわけじゃなくて英語での使い分けも) parameter が仮引数で argument が実引数であるという誤解 (?) が一部で生じて なんかもうそれでいこうみたいな空気だと思うんだけど、英語の話なのでよくわかんね。
そういう仕様って有料の情報じゃないの
空集合は「くうしゅうごう」だからかな 空文字列は「くうもじれつ」?
そらポインタかと思ってた
この速さなら言える……ソラポ
クポ
>>624 集合と文字列の音読み訓読みはどうなってるわけなの
>>624 小学生の時「引数」をインスウって読んでた orz
現代の送り仮名ルール的には「引き数」と書くべきなんだけどな。 まあ数学の世界の方から来た伝統なんで仕方ないが。
何を引くんだろ
632 :
630 :2013/07/18(木) 22:17:32.89
元は対数表です。表を引く時の値が引数。
数表は対数表以外にもあるし。 関数のパラメタとかアーギュメントを引数と訳したほうが先じゃないの?
634 :
630 :2013/07/18(木) 23:23:41.20
昔は掛け算するのが大変なので、 三角関数表も対数表と組み合わせたものが使われていたのです。 ちなみに対数表や三角関数表が日本に入ったのは江戸時代初期です。
それはすごい発見だ。是非どこかで発表を。
用語なんかどうでもいいわ。 もっと本質的な議論しようぜ。
用語重要。 用語がわかると資料の検索効率がかなり良くなるぞ。 質問するにしてもうやむやな言葉じゃさっぱり伝わらん。 でも、同じ意味なのに分野によって違う言葉が使われてたりするのは、 もうちょっと統一してもいいのになぁと思わなくもない。 例えば Windows の世界ではカーソルって言うとマウスカーソルのことなんだよな。 じゃあテキスト入力のところに出てくるアレは何よってことになるとキャレットという名前が付いてる。 Emacs 用語ではポイントという。 違う名前が付いてるのはまだマシなほうで、 ウェブブラウザと Emacs ではフレームとウィンドウの意味が逆になってる。 考えてみれば窓の中に骨組があるのも変な話なので、 フレームの中にウィンドウがある Emacs の方が妥当なのかもしれないな!!
りんねちゃんと無人島で二人きりて。 それどう考えてもエロフラグやろ…。 これのIF展開の薄い本が出ることを期待!!
「テキスト入力のところに出てくるアレ」にはEmacsでもカーソルって名前が付いてるよ。 「ポイント」はアレの位置を表す整数。 www.gnu.org/software/emacs/manual/html_node/emacs/Cursor-Display.html www.gnu.org/software/emacs/manual/html_node/eintr/Point-and-mark.html
そうか。
誤爆、今月二回目じゃないですか!
プリティーリズムにもりんねという名前のキャラがいるのを発見。 今時は割と普通な名前なのかね。
りんね・・・
645 :
デフォルトの名無しさん :2013/07/20(土) 09:53:30.93
RoR
Rand of Risp
Common LispにはOn LispやLet Over Lambdaを始め 実用/実践Common LispやLand of Lispなどの名著がたくさんあるのに Schemeときたらねw
既存のLisp方言には囚われない俺俺オリジナルLispを作るぜえええ
まあ、平均的なLisperならオレオレ実装を持っていて当然だからん オレオレ実装をもってないのが許されるのは初心者まで
なんだ、俺Lisperじゃなかったのか
Realm of Racket って日本語化の予定はないの?
>>648 > Common LispにはOn LispやLet Over Lambdaを始め
> 実用/実践Common LispやLand of Lispなどの名著がたくさんあるのに
> Schemeときたらねw
英語の原書ではSchemeの方がCommon Lispよりも名著がずっと多い、昔からね。
しかもCommon Lispで名著や好著と呼べるレベルの本、つまり上に名前があげられてる類の本が
出版されるようになったのは最近のこと。10年前にはロクな本が出版されていなかったぞ。
Common Lispを取り巻く書籍の状況がようやくSchemeに近づいてきたってだけ。
ああ日本語しか読めない君みたいな人には関係ないか?w
上に名前あげてるのって全部翻訳ある本だよねw
schemeの名著と言われたら、真っ先に和田本が浮かぶ というか、そもそもscheme自身についての解説書は必要でしょうか 別の応用の解説書で、たまたまschemeを実装に使ってるという本なら必要だとは思いますが
素数夜曲っていう本が気になるけど分厚すぎて根気が続く気がしない
今、整数の公理系をプログラミング言語で実装するのって流行ってるの?
657 :
デフォルトの名無しさん :2013/07/21(日) 16:19:07.06
>>654 原書のほうじゃなくて?
あれは日本語訳が…
Lisperには、和田本の変な日本語を楽しむ余裕が必要
そういえばSICPスレが落ちているね
>>657 ,658
ちょうど今、読み始めているけど(節3.5.2を終えたところ)、
文章の日本語に何ら違和感を持たない自分は変なのだろうか?
誤って理解しないよういくらか冗長な文章であるけれど、
慎重に言葉使いを選んで翻訳されているように思える....
660 :
659 :2013/07/21(日) 17:03:38.12
自己レスで訂正 >そういえばSICPスレが落ちているね 勘違い、落ちていなかった...
>>659 訳本だと分かってれば完璧な部類に入るが、「あ、これ日本人が書いたんだ〜」で読み始めた人は本を床に叩きつけるレベル
662 :
659 :2013/07/21(日) 17:16:33.78
>13 名前: 仕様書無しさん Mail: sage 投稿日: 2013/07/11(木) 22:12:52.65
>今時にありがちな書籍のタイトル
>・はじめてのXXX
>・サルでもわかるXXX
>・ふつうのXXX
>
>これに当てはまるのは、どれも愚本のたぐい
>アマチュアとしてプログラミングを楽しみたい人には適しているかもしれないが、
>専門家/技術者の道に進もうと考えておるなら、避けるべき
>これら優しい口調の文章で「分かったつもり」の感覚に慣れてしまうと、
>次のステップへ進むために読む専門書の日本語文書に拒否反応を起こしてしまう
>>661 こういった本を期待するのが当たり前だ!と思うほど頭が慣れきってしまった人であれば、
SICP本を読んで床に叩きつけるのも合点がいくね
>>662 そもそもSICPはscheme本じゃなくて計算機論の本だから、schemeの解説を期待して本を読んだ人は床に叩きつけると思う
何を言いそうか先に見当をつけて 図を見てコードを見て、それから文章を読んで確認する 簡単だろ
>>663 アレを床にたたきつける人は先に日本語の読解力を も っ と つけておくべきだと思う
議論はされつつも結局はまとまらずに規格 (RnRS) に入ってないものってのが結構あるんだよな。 デファクトスタンダードなライブラリとか SRFI も含めて言語としての Scheme を解説した本があれば、私は買っちゃうね。 それと、今 (日本語で) 出てる本はだいたい R5RS かそれより前の規格がベースになってるじゃん? R6RS なり R7RS なりに改版するだけでもそれなりの需要があると思うんだけどどうよ?
cps変換とか直感論理との関係とからへんの話が面白そうなんだけど、なんかオススメの本とかない?
>>665 論点違ってないか?
おそらく scheme の解説を期待する人に与えるほうが問題なんだが
そんなこと問題じゃないでしょう。 言語の解説をする本じゃないことは目次をみれば分かる。
>>669 エスパーしてみると、
>>668 には「与える」とあるから、
おそらく
>>668 は学部の講義テキストとしてSICP本を「与えられた」けど、
「scheme の解説を期待する人」だったので、床に叩きつけたんじゃないかと....
いわゆる、講義に付いていけない(付いていけなかった?)落ちこぼれの
泣き言ないし恨みつらみだと思われる
もしも自己啓発として独学の為「自ら手にした」のであれば、普通は目次くらい目を通すから
これが言語解説本でないことは(
>>669 が言うように)猿でもわかるはず(決して安価じゃないし)
というか、英語であれば全文が公開されているのだから、目次以前の話のような気もするが....
lispの人って認定厨多すぎw
そうやって逃げたかw
話の起点は
>>653 だろ。
「Scheme の本」の話なのに直後に
>>654 が SICP の話題を出しやがるから、
「いやいや、 Scheme 自体を解説した本もいるだろ」っていう反応だで
だで (笑)
ム板も夏かー
猫可愛い γ⌒ヽハ,,ハ ニャ- ("_) (,, ・ェ・)
>>647 ほう、「本を床に叩きつける(
>>661 )」やら
「scheme の解説を期待する人に与えるほうが問題(
>>668 )」とやらが、
「いやいや、 Scheme 自体を解説した本もいるだろ」と解釈できるのか
さすがコテハン様、敬服しますわ
680 :
679 :2013/07/23(火) 13:39:17.97
DDI
Winstonの"Lisp"の3rd ed.(1989) Common Lisp版が、 Common LispとSchme合わせて一番古い著名本じゃないかな。 ほぼ同時にCLOS本。 仕様書で良ければCLtL(1983)が5年くらい先行。 Common LispはずっとMLとNetNews文化だったから その後あまり本が出なかったね。
Scheme だと何だろう? TSPL ? 最初の版が何年なのかよくわからんが第二版は 1996 てなってるな。
実践するとSICPの場合、まえがきでロックしちゃうか
熱心な読者の粘着ぶりを見ていると SICPの日本語版って危険な本みたいね
ということにしたいのですね
事実、2評に分かれて論争起こっている時点でそういう事だよ。
>>690 2評に分かれるっていってもなぁ、SICP自体は言語解説の本ではなくアルゴリズムやデータ構造について学ぶコンピュータ概論みたいな書籍だから既知の事について学ばされる人が苛ついてるだけじゃないの?
むしろ分からない人が焦れてる。
練習問題が理系向けで歯が立たなくてイラつく(本心)
>>693 そりゃそういう人(理系)向けなんだからどうしようもないんじゃ?
>>693 確かに数学やデジタル回路ならともかく、アナログ系は電子工学の基礎が無い人にはつらいわな
問題2.13の並列抵抗を仮に突破できたとしても、問題3.73から始まるRC回路で絶望するだろw
あれだ。クヌースの本の練習問題の難しさに付く、数学が必要な場合の「M」みたいに、 そういう問題の目安として「E」を。
このスレは「Lisp Scheme」スレなわけだし、 多少はブレたり雑談をまじえたりはするにせよ、 SICP の内容そのものは本来は管轄外じゃねーの。
まったく賛同できないが何か嫌なことでもあったのか
>>697 同意する
でもなー、SICP読んで電子回路含めた理系の基礎教養も理解できないようじゃだめじゃないか?
とかも思ったりする。
#まぁ理系といっても医学とかだとまったく相容れないってのはあるけどさー
俺がどうとかじゃなくてさ、 そう思うんならその理由を書けよ。
え?
699だけど
>>700 の返しって俺?
#むしろワタクシが日本語と言う言語を勉強せにゃあかんかもしらん。
>>702 ここが「Lisp Scheme」スレであり「多少ブレたり雑談を交えたりはする」のに
Schemeを利用するSICPの内容についての軽い雑談がアウトというのは説得力に欠けるだろう
>>699 基礎教養として必要かどうかってのはまた別問題だろ。
有用な参考書として SICP を挙げるのはいいと思うけど、
Lisp/Scheme という言語をちょろっと使いたいだけの奴だって別にいいと思うんだよ。
Lisp/Scheme はそれが出来る言語だし、
サイエンスと強力に結びついてるかのようにハードルを上げちゃってる感じがイケてないと思う。
>>703 アウトとは書いてないだろ。
「本来は管轄外」なのに、ちょっと執着しすぎじゃねーのという感じのことが言いたいだけ。
コンピューターサイエンスに関心がない奴だって Lisp/Scheme を使ったっていいだろ?
このスレに来るなら理解してて (最低限目を通してて) 当然みたいな態度がちょくちょく見えてヤな感じだと思うわけだよ。
>>702 何か真面目な議論でスレが流れている時であれば
SICPの話題が目障りだというのなら分かるけど、
スレ(板?)全体が停滞気味なんだから、
(Schemeとも関連のある)SICP談義で雑談モードもいいんじゃねえの?
というか、自分の不幸を他人に八つ当たりして発散させるよりも、
自分から新鮮なネタを提供するほうが前向きな生き方だと思うよ
>>705 > というか、自分の不幸を他人に八つ当たりして発散させるよりも、
> 自分から新鮮なネタを提供するほうが前向きな生き方だと思うよ
ほら、またこういうことを言う。
別に話題にすんなとは言ってなくて、
そういう態度がクソだって言ってるんだよ。
>>704 がLisp/Scheme初心者専用スレを立てて移動すればいいんじゃね?
このスレ、別に初心者お断りではないけれど、理系お断りとも書いていない
もちろん文系向けの話題があっても大いに結構なわけで....
自分勝手に「本来は管轄外」などと宣言しても、説得力ねえよ
>>706 クソとか下品な言葉な大好きな人に言われてもなあ....
何かSICPにトラウマがあるん?
>>707 話題にすんなってわけじゃないつってんだろ。
ちゃんと読んでから反応しろよ。 もう一度
>>704 を読んでくれ。
>>709 >>697 >SICP の内容そのものは本来は管轄外じゃねーの。
>>700 >そう思うんならその理由を書けよ。
完全な上から目線で「話題にすんな」って言ってる気がするけどなあ....
SICPに関してだけ、えらく過敏に反応してるように見える
自分の過去カキコを読み直してごらん
他人からは、かなり専門的なウンチクを自慢げに語っているように見えるけど気付かないのかな
(そのウンチク語りそのものを否定している訳じゃないから、念の為)
自分にとって嫌な話題であれば、華麗にスルーできる耐性が不足してるんじゃね?
単なるワガママとも言うが....
>>710 SICP をとりあげてるのはそれが目立つからであって、私の主張は
>>704 の通り。
コンピューターサイエンスに関心がない奴 (SICP を読まない奴、理解できない奴) を馬鹿にするような態度はイケてないだろって話。
普段使いの言語のひとつとして Lisp/Scheme を選ぶ奴だっていて、そういう奴も仲間だと俺は思う。
よりよく使うために SICP が役には立つのは確かだし、薦めることもあるけども。
じゃあいいじゃん。
いいよ。
じゃあSICPの話を続けるか
なんだいいのか
CTMCPが主流になれば、SICP世代も何十年後かに絶滅してlispスレから計算機言語の概念に関する本の話題もなくなるはず。 CTMCPはどうもOzのせいで実習環境作るのに断念してしまう問題点があるらしい。 なので、Ozが簡単に動かせるようにするか、本をHaskellで書き換える人がいると、SICPの終焉に協力できる。
間違いなく俺だけどそう判断した根拠は? 誤解が有るなら訂正したい。
あの本は、利用言語が並列制約型であることに依存してる。 HaskellやSchemeで書きなおすとすると、 かなり最初の部分からDSLを使うことになって、 本の趣旨が相当捻じ曲げられてしまうと思う。
>>718 壁に向かって独り言?
それとも、また誰かアンカの付け方も知らない素人の成り済ましかな?
なんかまともに話し合う気なさそう
>>711 >コンピューターサイエンスに関心がない奴 (SICP を読まない奴、理解できない奴) を馬鹿にするような態度はイケてないだろって話。
何か勘違いしやいないか?
コンピュータサイエンスに関心がないのに「見栄を張りたい」が為に手を出し、
自分が理解できないのを翻訳者や本のせいにする態度がイケてないだろって話なんだが。
コンピュータサイエンスに関心がある、または自己のプログラミング能力を向上させたいと
考えているヤツなら、目次や前書きくらいは目を通して買うか買わまいか真剣に考えるはず。
で、もし買ったのなら理解できないところは自分の経験不足だと考えて、
数学なり電子工学の初心者向け解説書に手を出して勉強するよ。時間はかかるがね。
そういった真面目に学ぼうとしているヤシラを馬鹿にしてやいないか?
別に普段使いの言語のひとつとして Lisp/Scheme を選ぶ奴だっていてもいいさ。
ただ、それが目的ならSICPよりももっと適した本があるだろ。
SICPが目立つのは理由がある訳で、それが目障りだからといって
執拗に叩くことを正当化する態度はイケてないと考えるよ。
>>722 あのさー。 同じことを何度書かせりゃ気がすむんだよ。
俺は SICP を批判してるわけじゃねーし、話題にすんなとも書いてないのになんでそういう風になってるわけ?
SICP を買いたくて買った奴はそれでいいし、理解できるならそりゃ立派なことだよ。
普段使いの言語のひとつとして Lisp/Scheme を選ぶ奴に対してまで SICP を当然の知識として押し付ける奴のことを
イケてないと俺は書いてるつもりなんだがそんなにわかり難いか?
ニュー速でスレが立ってた
プログラミング言語Harlanは最近、Eric Holk氏が発表した言語で、リッチなデータ構造をサポートしたGPU向けのプログラミング言語だ。Mac OS X 10.6, 10.7, 10.8とLinux系のOSで動作する。
Harlanを動かすには、Intel OpenCL SDK、NVIDIA CUDA Toolkit、AMD Accelerated Parallel Processing (APP) SDKのようなOpenCLの実装に加え、Petite Chez Schemeが必要だ。さらに、間もなく高階関数もサポートされる予定だ。
http://www.infoq.com/jp/news/2013/07/harlan Schemeで書かれたGPU向け新プログラミング言語Harlan
2013年07月05日
GPU向けのプログラミング言語HarlanがGitHubで公開されました。 動作にはOpenCLとPetite Chez Schemeが必要で、Mac OS X 10.6以降とLinuxがサポートで動作が確認されているそうです。
元記事URL :
http://www.phoronix.com/scan.php?page=news_item&px=MTQwMzE
DSLなのかな?
どうしてオープンソースではない Petite Chez Scheme を使うのかと小一時間問い詰めたい。
>>723 >話題にすんなとも書いてないのに
>>710 >
>>697 >>SICP の内容そのものは本来は管轄外じゃねーの。
>
>
>>700 >>そう思うんならその理由を書けよ。
>
>完全な上から目線で「話題にすんな」って言ってる気がするけどなあ....
この部分を無視しているけど、どう考えているのよ?普通は「話題にすんな」と受け取るだろ。
おまけに、
>>674 では「
>>654 がSICP の話題を出しやがるから」などと言うしまつ。
こんなこと言っておいてから、
>>704 ,710のちゃぶ台返しで「そんなこと言ってない」と
いわれてもなあ... 成り済ましでないのなら、多重人格症なのか?感受性がない人なの?
あと、「普段使いの言語のひとつとして Lisp/Scheme を選ぶ奴に対してまで SICP を
当然の知識として押し付ける奴」のカキコってどれよ?
>>654 は「SICPは名著だ」と言ってるだけで押し付けてはいないし、
その後もSICPを読むには理系(工学系)の知識が必要だね、って話は続くが押しつけじゃないし。
そういえば、はちみつたんは twitter やってないの? これは別人? @honeychiaotzu
731 :
728 :2013/07/25(木) 23:01:49.94
アンカが間違っていたので、訂正する
誤) >こんなこと言っておいてから、
>>704 ,710のちゃぶ台返しで「そんなこと言ってない」と
正) >こんなこと言っておいてから、
>>704 ,711のちゃぶ台返しで「そんなこと言ってない」と
>>728 > この部分を無視しているけど、どう考えているのよ?普通は「話題にすんな」と受け取るだろ。
それは言葉が足りなかったと思う。 だから
>>704 で補ってるんだが。
例えばこのスレで遺伝子研究に Lisp を使いたいですとかいう話題が出たとしよう。
それはもちろんアリだろ。 わかるやつがわかる範囲で助言すりゃいい。
でも、そこで 「遺伝子の構造知らんのm9(^Д^)プギャーー」 ってなったら「ここ Lisp Scheme スレですし…」ってなるだろ。
遺伝子のことは管轄外だろ。
Lisp Scheme スレなのに、言語とは直接の関係がない SICP を読んでて当然、理解できて当然みたいにするのはちょっとちゃうやろ。
>
>>654 は「SICPは名著だ」と言ってるだけで押し付けてはいないし、
> その後もSICPを読むには理系(工学系)の知識が必要だね、って話は続くが押しつけじゃないし。
そいつは Scheme を解説した書籍の必要性を否定してるんだぞ。 言葉としては問い掛けという形にはしてるけど。
単に Scheme という言語を使いたいってだけの奴の道筋を否定してるように俺には取れたんだ。
>>730 そいつは別人。
Twitter で Scheme の話題を出してる奴って少なくね?
Scheme クラスタを根刮ぎフォローしたら俺かもしれないぞ。
俺が Twitter アカウントを持ってない可能性もあるし、
持ってたとしてもでは Scheme の話題を出さないかもしれないので、
いわゆるシュレジンガーの猫。
/l、
(゚、 。`フ ニャーン
」 "ヽ
()ιし(~)〜
ハーランに対抗してコムトライヤというコンパイラを作るべきなのだろうか stalinよりも速いの?
>>734 用途によるんじゃないの。
並列化しやすい計算なら速くなる可能性が高いだろうし。
>>732 >それは言葉が足りなかったと思う。 だから
>>704 で補ってるんだが。
言葉が足りなかったのなら、前言を撤回した上で、それを直接言わなければ他人には分からんよ
>>704 は言葉を補っているんじゃなくて、自己正当化の「いい訳」に聞こえた
>Lisp Scheme スレなのに、言語とは直接の関係がない SICP を読んでて当然、理解できて当然みたいにするのはちょっとちゃうやろ。
SICPはScheme解説書ではないけれど、
「理系(工学系)を題材にしてSchemeによるモデル化のプログラミング法を解説」
した、ム板のLisp Schemeスレと直接関係する本だよ
しかも「数学やら電子工学も知らんのm9(^Д^)プギャーー」とは誰も言っていないし、
題材が理系だから前提知識として必要だね、ハードルの高い本だよねと言ってるだけ
どこをどう受けとれば「SICP を読んでて当然、理解できて当然」に脳内変換されるのか、
訳がわからん
>単に Scheme という言語を使いたいってだけの奴の道筋を否定してるように俺には取れたんだ
ならば、
>>654 に対してそれを直接伝えればいい。それを上から目線で
>>697 ,700みたいな
レスを返すから、「SICPを話題にするな」と受け取れられてしまう
全体を通して、コテハンを名乗るなら名乗るなりに、言葉を慎重に選ぶ大人の自覚が必要だと思う
SICPもいいけどEOPLも同じくらいにいい first edition は飯を食うのも忘れて読みふけった
>>737 LISP本の中では、SICPの次に読むつもり
ある言語を理解したいと思ったなら、
その言語の処理系(インタプリタ)を書いてみるのが一番だと思う
素数夜曲の著者はあとがきでこう述べている
「歴史的名著『計算機プログラムの構造と解釈』、通称「SICP」は常に傍らにあった。この著作は
演習問題の膨大さでも知られている。初学者に読み難さを感じさせる最大の要因が、問題を解か
なければ次に進めない構造、解答がそのまま次のステップで必須とされる点にあるだろう」(p.844)
また
>>722 ,736はこう述べる
「で、もし買ったのなら理解できないところは自分の経験不足だと考えて、
数学なり電子工学の初心者向け解説書に手を出して勉強するよ。時間はかかるがね」
「題材が理系だから前提知識として必要だね、ハードルの高い本だよね」
練習問題を飛ばして読み進めて頓挫する文系プログラマは後を絶たない
今回のやりとりはかれらへの福音となるであろう(文系しるす)
>>724 自由度が高そうに見えるが、裏の原理とかに結構気を配ってコードを書かないと、
GPUの性能が台無しなコードになっちゃうじゃないかね。
それともコンパイラが上手く良きに計らってくれるのかね。
>>736 俺の文章ではわかりやすく言い方は誇張したけど、
>>662 とか
>>671 みたいな奴はいてるやん。
それと、繰り返しになるけど、 SICP はこのスレでよく出てくるから取り上げただけだかんね。
Scheme (Lisp) が小難しいサイエンスと強く結び付いていてそれの理解が必須であるかのように言ってる奴はこのスレにいるだろ。
背景としての理屈はあるけど、それを理解できなくても理解できないなりに Scheme は使えるんだから、
変にハードルを上げるようなまねをして欲しくないってだけなんだよ。
伸びてると思ったらなんだこれ? lispのこと語ろうよ。
このスレは「Lisp Scheme」スレなわけだし、 多少はブレたり雑談をまじえたりはするにせよ、 SICPについて話すべきかどうかは本来は管轄外じゃねーの。
Schemeでの並列処理はどの程度、研究されてるんだい? 2010年代にはcorei100なんてのが出現しそうな勢いだが。
>>724 Connection Machine Lispきたー
懼ァアLispきたー
> さらに、間もなく高階関数もサポートされる予定だ。
デジャブ
>>745 ファーストクラスの継続がないとSchemeとは言えないと思うが、
SIMDっぽい並列とScheme的継続をうまく整合させるのは難しい。
独自になるなら最初から俺Lispとなるのだと思う。
>>724 は高階関数すらまだなくSchemeとしてはレアケースだろう。
> インディアナ大学の博士課程で学ぶエリック・ホーク 元ザ・シンキング・マシン、コネクション・マシン関係の人というわけではなさそうだ。
R7RS では低レベルマクロは large の方に入るの? small に syntax-rules (高レベルマクロ) が有って large に低レベルマクロってなんか変じゃね?
syntax-caseを使って別のfrontendを書く、 こういう機能は最小仕様には必要ないという考え方だろう。
そういう話じゃなくて。 低レベルな方をコア (small) に入れて高レベルな方をライブラリ (large) にするのが筋じゃねってことを言いたいんだけど。
SchemeはEuLispじゃない
そうか。
R7RS large に低レベルマクロが入るとしたら explicit renaming か syntactic closure のどっちだと思う?
いっそのこと両方入れればいいんじゃない
ですよねー。
Schemeで型情報を追記する場合の標準ってありますか? CLにあわせたdeclareにした方が違う処理系でも取り込みやすいのでしょうか
標準と言えるほど確立したものはないと思う。 Typed Racket あたりがまぁまぁ先駆的なんじゃね。 取込みやすいってのがどういうことを言ってるのかよくわからん。
>>755 その方針でいくと将来的にCommon Lisp以上のモンスターが誕生するんだが。
マジか、、scheme は一体何処に向かってるんだ?
Common Lispは言語仕様とライブラリ仕様が、 一冊の本にまとめられてるから大きく感じるだけで、 今やpython(および標準で配布されるライブラリ)とあまり大差ないくらいでしょ。 ワンパック実行/開発環境としてのJava JRE/JDK、 標準ライブラリ規約としてのJCPと比べるともの凄く小さい。
マジか、、scheme は一体何処に向かってるんだ?
すまん、二回送られてしまった
ライブラリも含めて標準化するのにCommon Lisp仕様より小さかったら話にならない。
R7RS large が制定されて処理系も充実するようなら、 もしかすると Common Lisp が担ってきた分野の一部を Scheme が食うことになるかもな。 処理系の信頼性っていうのは実績で判断されるからそう簡単ではないだろうけど。
前スレで Common Lisp の関数群は標準ライブラリではないっていう指摘があったな。
http://www.logsoku.com/r/tech/1348018916/321 Scheme でも同じだけど、 Lisp ってどれがプリミティブ (コンパイラ自身が特別なものとして認識する語彙) で
どれが標準ライブラリなのかっていうのは区別しづらいよな。
例えば Scheme の規格の後の方にあるマクロ使用例には lambda にマクロをかぶせて let を作る例は載ってるけど、
let から lambda を作ることも出来て規格上はどっちでも問題ない。
どちらがプリミティブであるべきかっていうのは意味付けの仕方によって変わってしまう。
(実装上は大抵の処理系が let を特別扱いしている。)
R6RS だとプリミティブな機能だろうが何だろうがライブラリは名前の束を管理するようになってるのを見て
こういうやりかたもあるのかとちょっと感心した。
define とか lambda とかいう基本的な機能も (rnrs base (6)) に属してる。
C で言えば for とか struct とかをモジュールに分けるみたいなもんだから、こりゃ Lisp でなきゃ出来んわと思った。
ライブラリが含まれるから仕様が大きくなるとかそういうのじゃなくって、 良く吟味しないで仕様をガンガン入れると、仕様も無駄にデカくなるわレガシーなAPI引き摺ることになるわ、 Common Lispなんて目じゃない惨状を招くよ、って話なんだけど。Schemerってそういうの嫌いじゃなかったの?
R6RS Recordsとか、最近だとSRFI-106あたりのグダグダっぷりを見てると、 R7RS largeを本当にまとめきれるのかはかなり疑問。 ERR5RSみたいなのが出てくることにならなきゃいいけど。
>>769 低レベルマクロに関して言えば既にかなり議論されてて、
それでもなおどちらが相応しいとは言えないという感じなので、
>>755 の意見はそれを踏まえてのものだと思う。
R7RS large 全体に関して言えばもちろん長い時間をかけて検討すべきだよ。
他にもある程度煮詰ってる機能でも本質的な機能じゃないからとかなんとかで
規格に入れるには至ってないものもあったりするので、
そういうのは過去の議論を踏まえて比較的短い検討時間で済むんじゃないかな。
ソケットまわりなんかは POSIX のモデルをそのまま受入れるのなら話は早いんだが、
そういう前提を嫌う人は絶対いるからかなりもめそう。
ソケット、この時点で既にBSD由来のAPIモデルです。
>>769 古いものは捨てて新しくすればいいんだよ。
deprecatedのない仕様は生きてない仕様。
>>772 へー。 そうなのか。
でも、 Scheme としての API (インターフェイス) を決めるとなると、
イベントとかスレッドとかのモデルとも関係してくるんじゃないのかな。
非同期 I/O の枠組みを挟むべきかどうかとか、考えるときりが無いというか、
他の諸々との連携で考えるべきことは多そうに思う。
>>773 >>769 が懸念しているのは、Scheme作者様本人が書かれた文書にある
Schemeコミュニティの伝統的精神が変化しつつあることではないのだろうか?
==== Scheme 過去◇現在◇未来 ====
Schemeコミュニティはとてもフレンドリーです。ほとんど彼らはコンセンサス
で合意してきました。Revised reportの作業をしていたときの委員会の大原則
は、「もし変更が提案された場合、誰かがnoと言ったらそれは入れられない」
ということでした。別の言い方をすると、誰もがそれに同意しないと直さない。
これは言語を小さいものに保ちます。
これとCommon Lispコミュニティと比べてもいいかもしれません。Common Lisp
はフレンドリーではないとも言えるでしょう。コンセンサスで動くのではなかっ
た。5年間私は委員長をしていました。論点の調停をしていました。それは私の
一生でもっとも困難な仕事でした! Common Lispでの原則は、「変更が提案され
るとき、誰かがyesと言うとその機能は言語に入れられていきます!」だから、
Common Lispは大きくなりました。
ttp://www010.upp.so-net.ne.jp/okshirai/scheme-20070402222203.txt
>>775 どうだろう。 Scheme の「規格」はいつもコアとなる「言語」しか決めようとしなかった。
でも、コミュニティとしてはライブラリが無くていいと思ってたわけじゃなくて、
(実際、規格の範囲内で出来ることが限定的すぎて)
srfi なり処理系の拡張なりで勝手にやるよっていう雰囲気だっただけじゃん?
(その文書の当時はまだ srfi は無かったはずだけど)
言語コアについて一段落した今、ライブラリを拡充しようとするのが Scheme の精神に反するとは言えないんじゃないかな。
そのライブラリについて誰もが納得するまで議論を尽すのでなければ Scheme の精神に反することになるだろうけど。
R6RS に批判が集中したのも拙速すぎて議論が尽されてなかったからこそだし。
Steeleは自分がただ一人のまとめ役だったから、 (それを反映してCLtLはSteele単独の著作になってる) Common Lispについてはちょっと大げさに言ってるだけ。 本人はもっと過去の互換性を切り捨てて 設計した方が良かったと今では思っているので。 何でも入れられたってことはない。 lexical scopeのように、反対は大きかった関わらず、他は捨ててものもある。 そもそも初期は委員会じゃないし、 委員会になってからもCLOS関連は実際的なOOPSは何も入れずに、 カーネル言語であるCLOSだけ入れることで決着付けた。
cffiはどの処理系も似たようなものだけど Schemeを逆にCから使うばあいのffiも統一してくれないものか
>>773 そうしてPHP並に互換性の概念のない言語が誕生するんですね。
極論はさておき、Pythonとか見てると弊害が実に良く分かると思う。
利用人口少ない言語であんなことやったらマジ自滅。
あまり大幅に変えるならいっそ別の名前を付けろとよく思う。
>>779 Javaはちゃんとこなしてるよ。
Pythonもメジャーバージョンアップはメリハリ付けてて問題ない。
>>782 >Pythonもメジャーバージョンアップはメリハリ付けてて問題ない。
えー?
ruby並に酷いと思うんだけど。
少なくともJVMとかCLIのVMベースでここまで酷いのないし,CLはCLtLみたしてるし。
Schemeがひどいのは規格外の部分だし(そのせいで酷い目にはあったけど)
すいません、ここでGIMPのscript-fu(基本はR5RS準拠)について質問してもいいですか? ソフトウェア板のGIMPスレは主にソフトの使い方についてなので。 二度手間にならないように質問を書かせてもらいます。 スレ違いならスルーでお願いします。 script-fu では gimp-image-get-name, gimp-layer-get-opacity などの画像の状態を取得する関数があるのですが 返す値が1つであっても必ずリストで返ってくるため car で取り出さないといけません。 このような時にマクロを使って g-image-get-name のような g-* という関数があれば、 それぞれに対応する元のgimp-から始まる関数を呼び出して、 返り値のリスト内の要素が1つであれば、リストではなく中の値だけを返す。 という処理は可能でしょうか? 可能ならどうすればできるのか教えて頂けないでしょうか。
ググって調べてみたら script-fu は TinyScheme ベースなんだね。 GIMP をインストールするのはダルいのでとりあえず TinyScheme で動くように書いてみたけど、大丈夫かな? もしかすると script-fu は古い TinyScheme をベースにしてたり制限されてたりしてて動かないかも? (macro (define-car-only-proc sym) `(define ,(let ((str (symbol->string (cadr sym)))) (if (and (>= (string-length str) 5) (= 5 (do ((i 0 (+ i 1))) ((or (= i 5) (not (char=? (string-ref str i) (string-ref "gimp-" i)))) i)))) (string->symbol (string-append "g-" (substring str 5 (string-length str)))) (string->symbol (string-append "g-" str)))) (lambda arg (car (apply ,(cadr sym) arg))))) これを使って (define-car-only-proc gimp-image-get-name) とすると g-image-get-name が定義されるよ。 元の変数の名前に gimp- という接頭辞が付いていたらそれが g- に付けかえられて、 それ以外の接頭辞だったら元の変数名の頭に g- を追加したものが新しい手続きの名前になるようにした。 もしも Ruby で言うところの method_missing みたいなのを期待しているのなら、それは無理だと思う。
え!?Lispってなんでもできるんじゃないの!?
>>784 こんなのはどうだ?マクロじゃなくて関数だが
(define (g fn . sym)
(let ((lst (apply fn sym)))
(if (= 1 (length lst)) (car lst) lst)))
;; 使い方
(g gimp-image-get-name) ;=> 結果が1要素ならリストじゃなくて中の要素を返す。
(g gimp-layer-get-opacity)
Racket を使っています。 raco planet install コマンドでライブラリをインストールしたのですが、 インストールしたライブラリをプログラムに import する方法がわかりません。 require 構文でなら (require (planet ebellani/cyclic-redundancy-check:1:2)) といった要領で出来るのはわかっているのですが、 R6RS モードの import 構文での相当する記述方法を教えて下さい。 宜しくおねがいします。
>>788 Racketやめて、Gaucheにしなはれ。Shiroさんが丁寧に教えてくれるよ。
790 :
788 :2013/08/01(木) 10:28:28.42
>>789 普段は Gauche を使うことが多いです。
今回は Gauche 用に作ったライブラリを Racket へ移植しようとしているところなんです。
Gauche が優秀なのはよくわかっていますが、万能というわけでもないので。
IRC の方で質問しても racket モードならスムーズだとか言われて、そんなことは知っとんやと小一時間問い詰めたい。
(けど英語が下手くそ過ぎるので出来なかった。)
racket のことはオレはわからんけど(スマヌ)、gauche の足りないところはぜひ書いといてくれ
793 :
788 :2013/08/01(木) 20:05:38.41
794 :
788 :2013/08/01(木) 20:50:10.80
>>791 私が Racket が Gauche より良いと感じている部分はライブラリの多さです。
ライブラリの量については足りないからと言って簡単に増やせるわけでもなく、
地道に蓄積するしか仕方ない話なので、
私自身もまとまった機能が作れたら小さなものでも公開するようにしています。
github に置かれているライブラリ等もありますが、
github には初心者が本を見て写経したコード等もたくさんあって紛れてしまうので、
ライブラリ作者の方や、良いライブラリを見付けた方は WiLiKi にある Gauche:Packages のページに
なるべく書いて頂けるとありがたいです。
>>794 なるほど、ライブラリか。確かに、Racket いろいろ持ってるね。
Racket サイトつらつら見てみたけど、相当な人的リソースが突っこまれてる印象。
2D-plot 周りとか地味に欲しいと思った。
796 :
788 :2013/08/02(金) 00:33:24.20
>>795 そのライブラリを管理するツール類やサポート体制にも違いがありますね。
ライブラリを扱うツールに関してですが、
Gauche では適切にパッケージしたライブラリは gauche-package コマンドひとつで
ダウンロードからインストールまで出来るようになっていますが、
これは configure やら make やらを自動で呼出すというものに過ぎず、
Windows では MinGW/Msys を事前に導入しておく必要があります。
C で書かれたコードが含まれないパッケージであってでもです。
これは Gauche を使いたいだけの人にとってはちょっとしたハードルです。
また、ライブラリの情報が集約されてないので、
依存関係の解決を自動化することも出来ていません。
とは言うものの、これは Gauche の意図的な選択だと思います。
Gauche のライブラリはバインディングが多く、
どうせ gcc とか開発環境は要るんだからもう頼っちゃえよという感じじゃないでしょうか。
Racket みたいに自前でパッケージ管理する機能を持つようになると、
Windows でも Unix 系 OS でも同じように使えて便利ではあるんですが、
OS の機能と衝突して混乱することがあるんですよね。
確か debian のメンテナが Ruby に文句言ってたことがあったように思います。
それぞれにメリット/デメリットがあり、
Racket と Gauche の方針の違いは両立できないでしょう。
私が
>>790 で Gauche のことを「万能というわけでもない」と述べたのは、
Racket が万能ではないのと同様に Gauche もそうだという意味であって、
Gauche が Racket と比べて一方的に足りてないという意味ではないです。
Racket には日本語の情報が足りてない!!
>>785 >>787 回答ありがとうございます。
Rubyの場合はmethod_missing というのを使っているんですね。
そちらも知らなかったので勉強になりました。
はちみつ餃子さんと
>>787 さんのコードを合わせて
-(lambda arg (car (apply ,(cadr sym) arg)))))
+(lambda arg (g apply ,(cadr sym) arg))))
として全部の関数を再定義して見ることにします。
>>785 このif式意味なくね?返り値捨ててるし。
>>798 識別子の頭に gimp- が付いてるかどうかで挙動を分けるのに使ってるし、
機能してると思うけど。
日本語くらいしか自然言語を使えない俺にracketは厳しいかな
>>799 すまんこ
返り値はdefineの第二項なるんだな
802 :
788 :2013/08/02(金) 20:06:47.72
Racket で驚いたことがあります。 deflate が Racket で書かれてるんですね。 ドキュメントを見たら圧縮レベルとかのオプション指定が全くできなくて、 「どうせ zlib のバインディングなんだろ? インターフェイスを付けりゃいいだけなんだから手抜きすぎだろ」 と思ったら手抜きどころかまるっと Racket で書かれててむしろ要らん手間かけてました。 実用よりも Scheme (をベースとした言語) の可能性を突き詰めようとするところに漢気を感じますね。
schemeで擬似的にname space 使おうとするなら関数名を name:space name::space どっちがいいのだろう 型情報にname:typeみたいなの使う処理系みた記憶あるから name::spaceの方がいいような気もするけど name:space使ってる人を見かける回数が多い
schemeで書く漢気があるのは良いけど、オリジナル以下の機能じゃダメな気が
普段何かを作るときにEmacs以外でLisp方言を使ってる人いるの? もしそうだとしたらどの方言のどの処理系でどういうライブラリを使ってどういうふうに開発してるかを参考にしたい
Common Lispの some every に相当するものは Schemeにはないのでしょうか
>>807 R6RS なら exists と for-all かな。
SRFI-1 には any と every がある。
809 :
806 :2013/08/06(火) 13:18:11.58
誰も答えてくれないという事はやっぱり使ってる人はいないのか RubyやPythonの方が扱いやすくてライブラリや情報も豊富だからかな
> Emacs以外でLisp方言使っている これはどういう意味? Emacs以外って、Emacs以外のlisp組み込みツールのこと?
emacs lisp以外のschemeやcommon lispのことです
>>809 とりあえず Github に有った Lisp 系言語のプロジェクトの数を数えてみた。
Emacs Lisp 14052
Clojure 12633
Common Lisp 5041
Scheme 3132
Racket 1709
Arc 89
CLIPS 24
総計で 36680 だから、これだけ全部合わせても Ruby の 404243 に比べれば高々 1 割ではあるものの、充分に多い数だと思うがな。
回答がないのは質問が漠然としすぎだからじゃね。 俺も何を言っていいのかわからん。
>>812 自分がそれで何を作ってるか聞きたかった
あと自分が有用だと思うライブラリとかかな なんか情報が散らばっててよくわからないというか
はちみつ餃子がlispで何を作ったか教えてくれたらもっと嬉しい
身バレするので書けませぬ。
Lispの知識ばかりあるだけで実際になにか作ったというのは全然見ない だからLispは言語としては柔軟でどの言語よりも優れてると言われても 実用的なものは作れないんじゃないかなと思ってる それを払拭してほしくて作ったものを教えてとみんなに聞いたんだけど全然答えてくれない だから3行目が否定されなくてLispで実用的なものは作れないが真になってしまう
Lispでは実用的なものは作れないと信じたいだけです
理論的なものを嫌ってる人ほど頭でっかちだよね
身内に書き込みを冷やかされるだろw
和田本買ってきた パラパラめくってみたけど、2章の図形のライブラリってあるの?
SICP はおれの心の中で生き続ける!
>>806 古典AIをスクリプトとして扱う組み込み機器で使われてるんじゃないの?
あのほら動く掃除機とかCADとか。
>>818 最初はgimpもcadもlispで書かれていた
だから、英語版をそのまま読めって 英語を読める方が、そこらの似たり寄ったりなプログラム言語の文法覚えるよか遥かに重要だから
>>826 絶版かー
講義で買わされたことに感謝しておこ
>>829 就職が決まらずに海外を放浪しようと、海外のProxyサーバーを利用していようと、海外へ留学してようと、仕事で来ていようと、それが何か?
>>831 Amazonなりスラドなり邦訳版って色んな場所で叩かれまくってなかった?
叩かれてたけど俺は普通に読めたからどうでもいい
>>828 gimpのscript-fuは今でもtiny schemeでしょ。
上にそのものの関連質問があるけど。
gimp の scheme のマニュアルとかどこにあるでしょうか 実行環境も含めて解説してるページとかないでしょうか
日本語…
Gimp本体全部を起動しないとダメなのか xcfファイル100個くらいの画像サイズを一気に変更する方法とかあったら知りたい
>>838 スレチだが、irfan viewやimage magikとかならできるかもね
>>826 オリジナルは CC BY-SA 3.0で公開されているから wikisource に写経することが可能では?
CC-BY-SA
SA: Share Alike ? If you alter, transform, or build upon this work, you may distribute the resulting work only under the same or similar license to this one.
>>826 マケプレで値上がりしたら売り飛ばすか。
>>838 ImageMagik+シェルスクリプトで瞬殺だな。
これまでも、「版元品切れ重版未定」の事実上の絶版だったんでしょ?
絶版の場合は著作権とかどうなるんだろうか
よっしゃー みんな(俺以外)で翻訳してウェブにうpしちゃおうぜ
>>843 それじゃ夢がないだろ、そこはlispでなんとかしよう
>>840 なんかよくわかんないんだよなー。
独占翻訳権の契約をしておきならが CC BY-SA 3.0 でも公開してたわけだろ。
デュアルライセンスってことなのかな。
>>849 'transform' に translate を含むか含まないか‥‥でしょうね。
語学は苦手だし独露の翻訳家を尊敬する私としては翻訳者の著作権は尊重されるべき、と
>>840 とは裏腹な想いではありますが。
春樹は「翻訳は極致としての精読」だったかな、そんなことをいってはったこともあるし、これは頑張る価値があるのかもしれません、未だに末尾再帰ですらよくわかっていないらしいし。
Lego マインドストーム の新しいのが来月でるけど GaucheやRacketから使えるようにならないかな 旧版のマインドストームでCommon Lispはあるみたいだけど
>>851 含むに決まってるじゃん。
承知のうえで翻訳してるんだから問題ない。
自分もGPL(GFDLではなかった)の本を翻訳したことがある。
訳本として売ったけど、翻訳後のソースもtexinfoフォーマットで出版社が公開していた。
それでも本が売れて印税は入ってきた。
>>854 独占翻訳権=翻訳権の排他的利用許諾契約、はどうされたのですか?
独占してない。
その時も、ピアソンのシール貼って発売再開となった本もあれば、 そのまま消えた本もあった。
そうだったのか 知らなかった
>>857 ANSI Common Lispとプログラミング言語SCHEMEも絶版か
Lisp処理系作ってるんだけどマクロ展開をどの場面でやろうか悩んでる 仕様的にはevalの時に毎回展開してもいいのかな
むしろマクロ機能を削除した処理系が欲しかったり
仕様を気にするなら仕様を読めとしか…。 俺俺 Lisp を作ろうってのなら好きにやればいいし。
>>866 仕様読むの面倒だから知ってる人いたら教えてほしいなと思って
>>867 自分が言う「Lisp」って何のこと?
Common Lisp ?
>>868 lisp-2でCommon Lispを中心にxlispとかそこら辺
曖昧だけど許して
マクロ展開時に計算する場合あるから、評価の度にマクロ展開されたら嫌だな。 Lisp 族は寛容なのでCL準拠とか名乗らなければ、何でも許容される。
はあ? CLだと毎回展開してるとでも?
うせろ
874 :
870 :2013/08/13(火) 00:09:02.82
>>871 ん?CLの場合に毎回展開している訳じゃない、ってのは当然分かってるよ。誤解を招いたならすまんが。
オレオレ処理系ならどういう仕様でも自由だ、と言いたかった。
うえの方で話題になった、rubyにあるmethod_missingの件、実装してみた。 (存在しない関数を読んだ時に動的に処理する) (defun cars () '(car cadr caddr)) (defun animals () '("dog" "cat" "elephant")) (defun method-missing (name) (let ((fn-str (symbol-name name))) (if (equal (subseq fn-str 0 4) "CAR-") (car (funcall (symbol-function (intern (string-upcase (subseq fn-str 4))))))))) (defmacro undefined-capable (&body body) `(progn ,@(mapcar (lambda (sexp) `(handler-case ,sexp (undefined-function (var) (method-missing (cell-error-name var))))) body))) (undefined-capable (car-cars) (car-animals) ) ;=> "dog" ただこれトップレベルでしか動かない。 (print (car-animals))も動くようにするには再起して すべてのS式を包むしかない?いい方法あるのかな。
>>875 知らない関数の呼出しをフックするという意味で
>>785 では method_missing を引き合いに出したけど、
Ruby の場合はオブジェクトが属するクラス (とそのスーパークラス) がメソッドの集合を持ってて、
CLOS の場合はジェネリック関数がメソッドを束ねるようになってるわけだから、
mthod_missing の相当品を CLOS で言えば no-applicable-method ってことになりそう。
要するに、そこで method-missing って名前を付けてるけどそれってメソッドじゃなくね?という違和感。
いや、名前だけの話であって、どうでもいいと言えばどうでもいいことなんだけどね。
それは置くとして、私は Common Lisp のことはあまり知らないので見当違いかもしれないけど、
関数が見付からないときの処理に割り込む方法がないか HyperSpec を検索した結果、
*DEBUGGER-HOOK* というのを見付けた。 どんなもんかな。
例を見るとなんかそれっぽいことをしてるような…。
http://www.lispworks.com/documentation/HyperSpec/Body/v_debugg.htm
存在しない変数名が現れるとエラーを出す前にいったんごにょごにょしてみるみたいな手法で中置記法を実現してるlisp方言がなかったっけ
>>877 > InterLisp のとった方法はなかなか面白い.たとえば,
>
> (list (+ n count) n*count)
>
> という式の中で n*count が未定義変数だったとしよう.InterLisp はエラーからの
> 回復機能が優れており,エラー処理でいろんな仕事ができる.
以下略
www.nue.org/nue/tao/bitao/s005.html
Lisp Schemeで画像処理する場合の標準的な方法って pngを byte-stringとして読み込んで byte-stringにいろいろ処理するって事でいいの?
evalとかloadとか使わなきゃ未定義の変数なんてコンパイル時に分かるんだから、code walker使ってマクロでやった方がLispっぽいやり方な気がする。 method_missing自体がなんでも実行時にやろうとするRubyに寄ったやり方じゃないか?
何故かプログラムがフリーズしはじめ、原因を探し出すことn時間、 マクロの裏を覗きつつ、要約特定出来ました。 以下を実行するとsbcl、clisp共にフリーズします。 うまくクロージャが作れていないのはなぜなのでしょうか? defparameterの行を消せばうまく動きます。 (defparameter *cont* #'1+) (defun test (*cont* x) (let ((*cont* (lambda (x) (funcall *cont* (* 2 x))))) (funcall *cont* x))) (test *cont* 5)
CLHS: Macro DEFPARAMETER, DEFVAR www.ai.mit.edu/projects/iiip/doc/CommonLISP/HyperSpec/Body/mac_defparametercm_defvar.html を読んだら分かりました。 (defparameter *cont* #'1+) (defun test (*cont* x) (print *cont*) (let ((*cont* (lambda (x) (funcall *cont* (progn (sleep 1) (* 2 (print x))))))) (funcall *cont* x))) (test *cont* 5) 特別扱いされて、スコープがダイナミックになるんですね。 (test *cont* 5)はマクロ展開後に現れるので、 defparameterがダメとなるとletで囲むなりしないと警告を消せないなぁ。
マクロ使うのやめようよ
やだよ。
マクロは最後の手段にしとこうよ
いい方法無いかなと思っていたらいいものがありました。 common-lisp - REPL-Utilitiesでプロトタイピングを高速に - Qiita [キータ] qiita.com/nitro_idiot/items/c8fe3f7136399709d250 LEX LEXはグローバルなレキシカル変数を定義するマクロです。 (lex x (list 1 2 3)) (defun sum-of-x () (reduce #'+ x)) (sum-of-x) ;=> 6 (let ((x (list 1))) (sum-of-x)) ;=> 6
>>883 なんで無限ループになるのかおいらにはわかりません
誰かおしえてください
(defun test (*cont* x) (let ((*cont* (lambda (x1) (print x1) (funcall *cont* (1+ x1))))) (funcall *cont* x)) これでも無限ループになり1,2,3…と無限に数を出力し続ける
多分だけど何が起こっているかというと (defun test (*cont* x) (let ((*cont* (lambda (x1) (print x1) (funcall *cont* (1+ x1))))) (funcall *cont* x))) (defvar *cont* #'1+ x 1)であるとする。 一番下のfuncallで*cont*を呼び出すと、(progn (print x1) (funcall *cont* (1+ x1)))を評価しようとする。 まず(print x1)で数字を出力する、次に*cont*を呼びだそうとする。 しかし、*cont*は動的変数(だっけ?)として宣言されているので、 今の動的な環境で見える*cont*を使う。つまりletで宣言された*cont*と呼び出す。結果として、その呼びだされた*cont*の中でもletで宣言された*cont*が呼ばれ無限ループになる。
すべてのグローバル変数を確認する仕組みか、グローバル変数はlet束縛されないような仕組みを作れということか…
動的な環境というのは、構文的な位置ではなく評価時の位置によって変数の値が変わるということでよいんですよね おいらにもたぶんなんとなく理解できましたありがとう (defvar *f*) (let ((*f* (lambda () (funcall *f*)))) (funcall *f*)) ; => 無限ループ (defun f (*f*) (funcall *f*)) (f (lambda () (funcall *f*))) ; => 無限ループ
ここschemeスレだよね
え?
自分も昔、clスレあるからここはlisp族のschemeスレと、頭の中で勝手に仕分けして、 1レス読まずに勘違い書き込みしたことがある。
折角 Common Lisp スレがあるんだから Common Lisp の話はそっちでやればいいとは思うんだけど、
綺麗に切り分けられるようなことでもないしなぁ。
例えば
>>882-883 だとスペシャル変数 (ダイナミックスコープ) の話だと思って見れば CL 固有ってわけでもないし、
defparameter というオペレータの挙動の話として見れば Common Lisp の話だし。
Schemeってつけるから紛らわしくなるんじゃないかな Lisp方言と表せばいいと思う
Scheme は Lisp ではないと主張する方もいるので…。
SchemeもRubyもPythonもSmallTalkもPerlもLisp方言でいいよもう
どこまで削っても Lisp って言えるかを考えると、最後に残るのはS式だよな。 マクロとか lambda とかが無くてもS式だったらまぁ Lisp かなって思う。 (それが使い物になるかは別として。)
「最後に残るのはS式」派と「最後に残るのはlambda」派の戦いが
マイナーなLisp処理系のソース眺めてたらコントロールスタックというものが出てきたけどなんですかこれ
>>905 ありがとう
コントロールスタックってコールスタックと似たようなものと思っていいのか
処理系の名前は作者の許可がないから言えないけどX68k用でした
VTOLかな
VTOLのはスコープを積んでいく普通の評価用スタックだね /* control stack */ typedef struct _c_stack { CELLP value_env; /* 変数束縛 */ CELLP label_env; /* jump label */ CELLP *s_stack_p; /* s_stack pointer */ unsigned int jmp_env; /* jump address or call_next_method number */ } CSTACK;
Lispインタプリタのmark-and-sweepの実装方法がよくわからない メモリを確保する時にそのアドレスを連結リストに追加する マークの時にGCの時にその連結リストに入ってるセルのマークを全部はずしてからシンボルテーブルやスコープを起点にマークを付けていく スイープは連結リストを順番に見ていってマークが付いてないものを開放していくやり方じゃ駄目なのかな 何故かうまく行かないのはマークの付け方が甘いからだろうか 実行中の局所的なセルの辺りが怪しい気がするけどどうなんだろう
>>910 これ3年前に出たばかりなのにもう新品がないのか
欲しいけど高いしちょっと手が出しにくいな
Amazonには無いけど、ネットで調べられる本屋の在庫はあちこちで残ってる。
>>909 の1~3行目がマークスイープのアルゴリズムと少し違う感じがするけど
どこが違うかわかる人教えてください
外してたらごめん。 SECDマシンの持つスタック4つのうち Cの文字で表されるスタックがコントロールスタックって呼ばれるね。 コンパイルされたコードが入っているスタック。
ちょっと複雑な数式をs式で書くのがめんどう 4*x+3+z*y みたいなのを (+ (* 4 x) 3 (* z y)) に自動変換してくれるマクロやツールないのでしょうか Racketで動くものあると嬉しい
ぐぐればでてくるけど、 そのうち中置記法がめんどうになるから気にしなくてもいい
>>916 そうは言っても中置記法の方が数式の表現として理解しやすいのでどうしようもないと思うが?
特に数値演算多用するようなもの作ってると実感すると思わん?
>>917 リーダーマクロで読ませたりしても分かち書きしないといけないから使いにくいんだよね。
919 :
918 :2013/08/24(土) 14:28:09.38
補足 行列やベクトルをこね回すときはあんまり不便感じないのはこれらを使うと他の言語でも読み辛いからなんだろうとは思う。
>>918 Scheme だと名前の自由度が高くて曖昧さなくトークンを切出せないから仕方ない。
例えば foo+bar と書いてあってもこれ全体でひとつの変数名の可能性があるわけで。
自分で使う分には、変数名に記号は含まないとか、使う演算子の種類は四則演算に限るとか、
都合のいいところで割り切ることも出来るけど、汎用的に設計するのは難しいだろうな。
おれは
>>916 に同意だなぁ。
数式以外の残りは全部、前置なんだから。
数式大量だとカッコが煩雑なのは分かるけど、頑張って中置にしても、コストに見合わない気がする。
中置記法って細かいルールが多いんで実は結構面倒臭い 中置の方が理解しやすいってのはただの慣れ
>>923 そうは言うがな大佐
義務教育からずっとinfixなのは結構辛いと思うぞ
制御構文とかは気にならないけどやっぱり純粋に数式使う時はより長い期間触れたinfixが望ましい気がしないでも無いのだわ
>>921 +はあんまりきにならんけど、名前をハイフンで結ぶので減算記号はどもならんわー
便利なものなら受入れられると思うが SRFI-105 もそんなに評判は良くないしな。 中置が前置より慣れてて受け入れやすいというのはわからんでもないけど、 中置が前置に混ざるという状況はどっちつかずで気色悪いとも思う。
(defun infix-compiler (lst) (cond ((atom lst) (if (symbolp lst) (symbol-value lst) lst)) ((= (length lst) 3) (list (second lst) (infix-compiler (first lst)) (infix-compiler (third lst)))) (t (list (car lst) (mapcar #'infix-compiler (cdr lst)))))) 昔書いた中置記法コンパイラだぜ 4行だぜ (setq exp '((3 - 2) + ((8 + 4) / (8 - 4)))) (infix-compiler exp) ;=> (+ (- 3 2) (/ (+ 8 4) (- 8 4))) ;=> 4
(infix-compiler '(1 + (f x y))) あれ?
スレ再読み込みしてなかった…。
>>227 性病検査は定期的に行ってますか?
本番ありで料金は二万円までが理想なんです。。
>>930 うわー。 偽物出たわー。
このトリップもそろそろ潮時か。
>>932 マジかよ
トリップまではともかく決済関連もとなるとえらいこっちゃ
大問題とかいうレベルでないぞ
>>932 おそろしすぎ
2chに情報渡してなくてよかった
>>931 気づくの早すぎ
お前ただ誤爆しただけじゃねーの
PC を起動している間は自動で定期巡回してるから書込みがあったらすぐに気付くことがまれによくある。
それはschemeで書かれてるの?
いいえ。 でも、 Scheme で書いてもそれほど難しくはなさそうだね。
(setq sexps (loop repeat 1000000 collect (loop repeat 6 collect (random 10)))) (setq nums (loop repeat 1000000 collect (random 1000000))) (defun uniq-num (lst) (time (let ((hash (make-hash-table :size 1000000 :test #'equal))) (dolist (x lst) (setf (gethash x hash 0) t)) (hash-table-count hash)))) (uniq-num sexps) (uniq-num nums) 0.395 seconds of real time :test #'eq num 2.168 seconds of real time :test #'equal num 6.937 seconds of real time :test #'equal str 54.463 seconds of real time :test #'equal sexp
940 :
939 :2013/08/27(火) 18:39:39.89
私は100万個のS式から重複を削除したいです。 remove-duplicateでは処理が終わらずhash-tableを使うことにしました。 上の式を実行すると 54秒で処理を終えることが出来ました。 しかしhash-tableを:test #'eqにしランダムな数値を100万個入れた所0.4秒で終わりました。 比較関数の違いで100倍も違うのか疑問に思い:test #'equalに変えてみた所2.1秒でした。 S式の場合は何故こんなに遅いのだろうと、試しに (setf (gethash (format nil "~a" x) hash) t)としてみると6.9秒で済ますことが出来ました。 もっと早く重複を削除することは出来ないでしょうか?お知恵を拝借させてください。
Common Lisp についてはよく知らないけど、 数値を入れる場合なら比較関数として eq を使うと正しい結果にならないんじゃね?
自然結合する関数があった気がする
高速RDBMSを使うという裏ワザもある 格納の時間を無視するなら、100万でも1秒かからない気がする
適材適所
2chやばいから したらば あたりに移動できないものかな Gaucheのサイトの中に2chのcgi動かしてくれる場所あれば 一番いいのだけど
racket の dict-refならhashもalistも自動切り替えしてくれるよ
>>945 WiLiKi や Chaton があるんだから質問系はそっちに書けばいいじゃん。
ただ、 2ch くらいはっちゃけられる場所は欲しいよな。
ゆるく雑談しながらダベる場所としては IRC もあるぞ。
freenode の #Lisp_Scheme だ。
ずっと過疎っぱなしで寂しいのでみんなも来てくれよな!
948 :
939 :2013/08/28(水) 21:51:16.71
みなさんレスありがとうございます。
この重複削除の時間が10分の1にさえなればプログラム全体に大きな影響を与えられます。
ダーティハック的な手法さえ許容し高速化できないものでしょうか。
>>941 はい、eqはオブジェクト同一性による比較であり同じ数値が違うオブジェクトである可能性がある為eqlを使うべきでした。
>>942 lisp 自然結合 等で検索しても見つけることができませんでした。どのような処理をする関数なのでしょう(lisp内部にDBを作る?)。
949 :
939 :2013/08/28(水) 21:55:00.30
>>943 >格納の時間を無視するなら、100万でも1秒かからない気がする
御免なさい格納の時間とは何を指しているのでしょう。
(setf (gethash x hash) t)) の処理時間の事を示すのであれば
現在の場合も格納を無視した時間は格納時間に比べ微である様に思います。
>>946 racketは型に応じて処理を切り替え、重複削除が高速に行えるということでしょうか。
今回はCLで書いている為残念ながら利用できませんが良いですね!
951 :
939 :2013/08/28(水) 23:59:45.72
さあ。 とりあえず同等のものがあるから言ってみただけ。
>>949 格納の時間は、たぶんデータベースを使うならそのデータベースに登録するのにかかる
時間ということでしょう
まあ、100万レコード登録するとかなり時間かかるんじゃないかと思うけど
S式の部分を、できるならvectorとかにしたらどうかな?
eval と apply の違いがいまいち分かりません
eval - S式を評価する apply - 関数に引数を適用する
「引数に関数を」の間違いだ
evalはS式ならなんでもいい(マクロも展開する) applyは関数しか適用できない
schemeってS式と関数は別物なのだろうか
関数はatomだからS式だよ。 簡単にevalを書ける例の表現ではないけど。
scheme界のニューアイドル、naoiwataをこれからもよろしく! 困ったときは泣いている顔文字でアピールしてくるので、お前らちゃんと助けてやれ
そうか。
R7RSに準拠するつもりでオレオレ処理系作ってます 複素数のsinってどうやるんだっけ?とかwikipedia先生に聞きながらちまちま実装してる今日このごろです で本題なんですが + - * / の可変長引数版は引数を fold すればいいと思うんですが = < <= > >= の可変長引数版を実装するのになんかいい高階関数とかないでしょうか
悩んでるときに「大丈夫?」って声かけられたとして。 相手が男もしくは利用価値のありそうなプログラマの場合は「だいじょぶです(;;)」 相手が女の場合は「大丈夫^^」ってレスする女のこと、Lisperの皆さんはどう思われますか?
男と女、または上位の人間と対等な人間 それらに対する反応をナチュラルに使い分ける腹黒い女は、僕はどうかと思いますね
なんか人としてどうしようもないのがわきはじめたオワタ
>>963 比較関数の場合でも持ち回る値の数は一個でよくて、但し、途中で脱出する場合がある。
Scheme では第一級継続のおかげで大域脱出が簡単に書けるので、こんな風に書ける。
(define (< arg1 . rest)
(call/cc
(lambda(cc)
(fold (lambda(elt acc) (if (<2 acc elt) elt (cc #f))) arg1 rest)
#t)))
ここでは <2 っていうのが二引数版の < ってことね。
この程度のものに継続を捕捉するのが非効率だということであれば、
何かの特別な値が発生したときにその場で脱出するような機能をもった fold を作ればいいと思う。
>>963 処理系はマクロを廃止して仕様をコンパクトにしてダウングレードしたバージョンを作ってくれないでしょうか
969 :
デフォルトの名無しさん :2013/08/31(土) 18:40:52.58
Schemeからマクロ抜いてどうすんの
分岐(if, cond)とシリーズ(begin)と関数作成(lambda)とデータ化(quote)と例外処理(try, with)までは認めよう 他のマクロはいらない set!もいらない もっと純粋さを追及してみてはどうか
letもいらない? lambdaでがんばるのか... 大変そうだ 例外はマクロでなくてもいいかと
もうskiコンビネータ使ってプログラム書けばいいじゃん
妙なカキコがあると思ったら今日は中高生の休み最後の日か
マクロってLisp最後の砦じゃないの
ClojureもCommonLispも単独スレあるしつぎからSchemeスレにしてほしい
macro無くすならfexpr復活させようぜ?w
マクロ無くせというよりも、自作処理系作るならマクロなしバージョンで洗練させてみてはどうかという提案 その方が簡単だし、プログラミングするときに技術的な挑戦が存在する
>>977 技術的な挑戦をしたいのなら、>977自身が挑戦的なオレオレ処理系を作ればいいのではないかと
俺々処理系作ったことのある身から言うとマクロ無いほうが ゴリゴリ決め打ち処理書けるので楽|雑にかける
書いてる内にその自作処理系でコンパイラを書きたくなり、 ブートストラッピング的なことをするときにマクロがないとつらたん。 という理屈でやっぱりマクロが欲しくなるものらしいけどね。 とりあえず必要なところから書いていけばいいんじゃないの。 マクロが要るようなら導入すればいいし、要らないなら後付けでいいじゃん。 うまく後付けできなくて最初から書き直しなんてのもよくあること。
おつかれー
984 :
デフォルトの名無しさん :2013/09/01(日) 19:51:27.12
体調悪いアピールしてもいい?
プログラマ板でしてね
>>986 しょしんしゃなのでプログラマじゃないです