CommonLispは無くなっても困らないけどs式使う言語が否定される訳じゃ無いからなー GUIとかI/Oもちっと近代的に再定義できないもんかの>>CommonLisp
なんでClojureはdoted pairなくしたんやろ Symolic expressionはlinked cellが実体やないのか? おかげでcar,cdrもないらしいやないか それでもリスプの仲間かい! レイプの間違いやないか? エロいのうClojure
consセルを次のように定義できるんやな (define (cons car* cdr*) (lambda (bool) (if bool car* cdr*))) で、かー、くだーや (define (car cons-cell) (cons-cell #t)) (define (cdr cons-cell) (cons-cell #f)) わし、勉強したで どや!
>>8 Clojureはcons cellのあり方を変えてもLisp族であれると明確にしたんじゃないの? 実際Lispのdot pairってClojureでvector で2値持つのと何所が違うの? lispworks欲しい 実際emacs slime sbclとどれくらい違うんだろ
>>14 GUI使わないならLispWorksもEmacs+Slimeですよ。 ちなみにGUIつかうならフランツ買うべき > GUI使わないならLispWorksもEmacs+Slimeですよ。 GUI使うよ > ちなみにGUIつかうならフランツ買うべき なんで?
>>16 とりあえずGUIで日本語使わないならLispWorksでも大丈夫だけど、GUI使うときに付属のエディタが多バイト文字対応してない>>LispWorks Franzはそのあたり問題ないのとGUIのユーティリティーが凄い良くできてる。 でもお金無いのでFranzは評価版だけしか使ってないけどな! エディタさえなんとかなるならLispWorks好きなんだけどな! lispworks6からUTF-8で表示で崩れもなく表示もできるし入力もできるよ. common graphicsよりcapiの方が評判良いと思うけど. lispworks7からjvmと連携するらしいよ.
やっぱり日本語がネックか とりあえずfreeのacl使ってみる
>>18 マジか! マジならアップグレードするか #という事を続けてAllegro購入とかわらんくらい突っ込んでるのがなっとくいかねー >>18 jvm連携するくらいならClojreのIDEになってほしい orz Schemeに比べてCommon Lispの利点て何?
ベタベタな手続き型プログラミングがいとも簡単にできるところじゃね?
偽と空リストが分かれてないとかnilのcar,cdrはnilとかそういうところは地味だけど マクロ定義とかでリスト操作するときに便利
あとバリバリに最適化してC並の性能に出来るところも気持ちいい
Common LispがLisp-2であることは、俺にとっては実用上便利だが、 そうは思わない人たちもたくさんいるだろう。
let over lambdaではちょくちょくageてた
common lispって柔軟だけどかゆい所に手が届かない所が多いね 大抵はalexandriaとかkmrclとかcl-ppcreとかsplit-sequenceとか使えばなんとかなるけど ライブラリが散らばるのが気になる alexandriaとかkmrclをベースに自分だけが使う一つの巨大なライブラリを作って足りない部分を追加していく方がいいのかな
名前空間みたいに、分けられる概念は分けるのが正義。Scheme はたぶん間違っている。 その意味では CL も副作用を分けなかったのは失敗だった。
プログラム書いるとオレオレマクロとかオレオレ関数ができてくると思うんだけど、みんなこれどこに置いてるの
sbclでコンパイルに数秒かかってて (incf v) (incf v) ... をn回繰り返す式を を(incf v n)にしたらコンパイルが一瞬で終わるようになった 最適化すごい
最初は今書いてるプログラムソースと同じディレクトリに置いて間を見計らって ~/.sbcl/の中に置いて起動時にloadするようにしてる
>>34 1. オレオレだと思っていてもalexandriaの中を探すと大抵のものはある.それを使う. 2. なければ,オレオレライブラリでもasdfで読めるようにしておく.quickproject使えば手間もかからん. 初期化ファイルで読み込ませるのはbad practice. ローカルプロジェクトはasdの設定とか面倒そうでやってなかったけど quickproject使えば自動で生成されるんだな 前より楽になったしもっと早めに調べておけばよかった
>>37 やっぱそんな感じなんですかね 一つのore-xandriaにいろいろ詰め込んでquicklispのlocal-projectに置いてるだけだったので、整理しようかなと思ってたんですが 参考になりました (defun fn1 (str) (print str)) どなたか教えて下さい。 上の様な関数fn1を最適化、型宣言をして下の様な、 (defun fn2 (str) (declare (optimize (speed 3)(debug 0)(safety 0))) (declare (string str)) (the string (print str))) 関数fn2になりました。 マクロを使って下のfn3の様にしたいのですが 可能でしょうか。教えて下さい。 (defun fn3 (str) (high-speed) (var-string str) (the-print str))
declareをhigh-speedやvar-stringマクロで表すのは無理 コードウォークするか別のアプローチを取るしかない
書き込んだ後で思い出したけどリードマクロならdeclareに展開しても大丈夫だった
(defmacro defun-opt (name args &body body) (let ((vars (mapcar #'cadr args))) `(defun ,name ,vars (declare (optimize (speed 3) (debug 0) (safety 0))) (declare ,@args) ,@body))) (defun-opt fn ((string str)) (the string (print str))) こんなんじゃだめなの?かなりてきとーに書いたけど
>>40 CommonLispだから最適化しなくちゃならないとかマクロ使わなくちゃならないというのはむしろ間違い。 書く手間を減らしたいということなら、変数に最適化設定を入れて#.するってことが多いかな。 quicklispで公開されてるライブラリ入手してdeclareでgrepして読んでみると良いよ。 (defvar *normal-optimize* (optimize (speed 1) (debug 3) (safety 3))) (defvar *full-optimize* (optimize (speed 3) (debug 0) (safety 0))) (defun fn2 (str) (declare #.*full-optimize*) (declare (string str)) (print str) str) 型宣言とか最適化宣言って最初からつけといた方がいい? 後からつけるのは面倒そうだけど最初からつけるのも面倒だし
>>45 コンパイラにチューニングの肝を教える為のシステムだろう? とりあえず動くコード書いてって言うREPL大好きな人なら後からだし、設計から最適化を含む人なら最初から入れるだけじゃないの? あんまり難しく考えるとはげちゃうぞ 最初から入れる方向で設計する方が あとあと抜本的大改造しなくてすみそうな
> あとあと抜本的大改造しなくてすみそうな やっぱり最初から宣言書いといた方が楽かな はげるのは困るし
っていうか 人に聞いて決めるようじゃだめじゃないか? 自分で判断、どう判断しようか、その方針で作っていくうちにその良し悪しを知るのも勉強
40です。 みなさま、ありがとうございます。 特に41さま、42さま、43さま、44さま、 具体例を示していただいて、大変勉強になりました。 また45からの「最初か後か」の議論。 参考にいたします。 ちなみに私は、正解を探る技量が自身に無いと考えていて ひと通り書いて速度が気になれば「後から」改変する 方法でやっています。 これだと、とりあえず必要な目先の事だけに集中できて コードのスッキリ感が保てると思うので。
cl-ppcreってparse-stringして正規表現をS式にしたあと それを使って文字列比較のクロージャを作ってるように見えるんだけど dfaのコードが見当たらない 文字列比較のクロージャを使うやり方では有限状態機械はいらないのかな
clojureとcommon lispとschemeのどれを学んだら良いか悩んでいます。 common lispが気になっているのですが、 モダンLispといわれるclojureの方がJVM言語ということもあって現実的に利用が容易な気もしていますし、 schemeはシンプルということで学びやすいのかなとも思います。 主観でも良いのでおすすめや優位性を教えていただけないでしょうか。よろしくお願いします。
>>53 ここはcommon lispのスレなのでおすすめは決まっているようなものですがclojureです。 ユーザーが親切。 Schemeがシンプルっていうのは正しいけど誤解でもある。 コミュニティで合意できた部分だけが仕様としてまとまったので仕様だけを見るなら綺麗で単純だけど、 決着がついてない論争は膨大にあって、処理系ごとに方針の違いが大きかったりする。 きちんと理解しようとすると、思ったよりは容易でない。 でも、まあ、 Common Lisp よりは楽かな。 Clojure は JVM が先にあって Lisp 的な外観をくっつけたものなので、 言語としての構造は Lisp 的テイストよりも Java 的テイストに寄ってると思う。 いろいろと Lisp っぽくないので Lisp についての理解を深めたいなら あまり向いてないかもしれない。 現実路線というのはその通りだと思う。 Common Lisp は良くも悪くも Lisp 代表って感じ。
>>53 使って学ぶならClojureがおすすめ 入門書は孔雀が表紙の本がGaucheの人が訳してて読みやすいし分かりやすい ここCLスレだけど >>53 お勧めは、common lisp schemeはlisp矯正ギブスみたいなところがあって、他言語やってた人にはいい気がするけど、 何かアプリを作ろうとすると、ライブラリがなくて面倒だったり、処理系依存が増えたりする。 clojureはjavaのライブラリを呼び出せるので、手軽にアプリが作りやすい。まそのおかげで、GUIアプリを作るのがやり易い。 その一方で、JVMの縛りを受ける。 armのlinuxで使おうとしたら、armのJVMがあんまりよくないのか、やたらと重かった。 なんだかんだで、common lispはいいバランスだと思う。 あとlisp族初めてなら、emacsとか入力支援のある環境を使った方がいいよ。 >>53 お勧めはClojure、ちくせうCLスレなのに!!!! Webアプリとかは特に CommonLispでお気楽極楽する事もできるけど、準備が大変。(GUIやるにはFFIで根性入れるかお高い処理系買うとか) Clojureはこの点をJVMに依存することで過去の資産を使えるのが利点。 Schemeは僕は好きじゃ無いので説明に困るからお勧めしない。 なお、WebアプリをCommonLispで作るとmade with alien technologyを実感できてコレがたまらん abclとかいうjvm上で動くcommon lisp処理系もあるよ
Clojure人気すぎワロタ お前らが考えるCommon LISPの実用に足りないこと、 これさえあれば実用できるのになー(チラッチラッ って思うことって何?
コルーチンを実現するためにcl-contでpythonのyieldと同じ機能付けたら マクロ展開後の式が大きすぎるみたいなこと言われたとき
>>53 大人気のclojureに水を指すようだが、あれは first-class continuationsをサポートしていない。初めてリスプ系の勉強するのにはやめておいたほうがいい。初めてのLisp系の勉強には俺はSchemeを勧める。 テキストはThe Little Schemerを勧める。理由は 1. collector( continuation )もやるし 2. Y-combinatorもつくるし 3. Scheme上でScheme Interpreterもつくるからだ。 ただ、あくまでS式(Symbolic expression)を扱うので、例えばリストが内部的にどういうデータ構造なのか?は別書でやることになる。 car-cdr部を持つ単位(cons Cell)を次のようにclosureとして表現して見せてるくらいだ。 (define cons (lambda (u v) (lambda (t) (if t u v)))) (define car (lambda (cell) (cell #t))) (define cdr (lambda (cell) (cell #f))) ;applications (define a (cons 1 2)) (car a) -〉 1 (cdr a ) -〉 2 実用アプリをは基礎を学んでからCLででもClojureででも書けばいいんでないかい。 おれの個人的意見。 >>53 scheme は scheme を実装して勉強する言語、と言っていいと思う。実装に興味があるならお勧めできる。特に gauche あたりの実装は素晴らしく綺麗で、面白い。 Common Lisp は何かを作るためのパワフルな道具。使えるようになって損はない。力を付ければ、低レベル層から高レベル層まで扱えるのが強み。ただやや古臭いところも。 Clojure は Lisp の皮を被ったちょっと違う何か、かもしれない。モダーンですごく考えられているし、どんどん進歩していて楽しい。コミュニティも活発。 まあ一つをやったら他のことはできない、なんてことはない。どれも面白いから、どんどん手を出すといいと思う。 >>53 >>62 の補足 The Little Schemerでは徹底して再帰的定義でやる。なのでwhileとかでの非再帰的定期は出てこない。非再帰的的定義など(きっと)頭の良いチンパンジーでさえできるようなものはいちいち扱わない! また、fibonacci数を求めるなどを再帰的に定義すると非再帰的定義に比べてとても処理速が遅くなることがあるが、末尾再帰の書き方も出てくるので 非再帰定義に同等の速度を再帰的定義では発揮するやり方も学べる。 具体的にはcollecterを使った再帰的定義で末尾再帰が実現される例が出てくる。 この辺りもこのテキストを勧める理由た。ただし!意外に難しいかもしれない。最近、書き込みがあったがこのテキストがわからん、あきらめたと。 どうにもチンプンカンプンなら関連しそうな概念や例についめネットなどで予備調査しながらやるといいと思う。教えてくれる人がいればそれが一番だけどね。 「何?、継続がわからん? あのな、いいか、女とセックスしたい時にな、女を脱がしてからセックスするだろ?まず脱がしてからセックスすることを継続だ。 それにつきる。」 >>53 Schemeはいい言語だけど、何かをやろうとするとちょっとめんどいことが多いかな 完全な主観で言えばCommon Lispが好きだけど、 何かやりたいことがあってそれを実現したいのならClojureが一番楽だとは思う lisp方言としてはarcが好きだけど処理系がなあ
アクセス禁止にされてしまいレスが遅くなって申し訳ありません。 実はland of lispとプログラミングClojureはとりあえず読んだことはあります。(内容は正直曖昧に理解しているところもありますが。) みなさんのお話を聞いたうえで、今特定の仕事に追われているわけでもないですし、common lispを勉強していこうと思います。 何かをするために言語を学びたいというのももちろんありますが, それ以上にlispという概念についての理解を深めたかったことと, いわゆる`lisper`への憧れから, もっとも満足できそうなのはcommon lispかなと判断しました。 皆さんご意見いただき有難うございました。
最近思うんだけど、Lispの利点で重要だけどあまり宣伝されてないのはrepl。 書いたコードを即時に動かして結果やデータを見つつ、徐々に大きくしていくスタイルは脳汁どばどば出る。 LispマシンやCLIM系のインスペクタやデバッガも、このスタイルのためにあるように思える。
リスプの概念をスマートに認識できるのはスキームだけどな ま、いいけど バイバイ
>>71 REPL が重要なのは同意。でも、REPL はもっと進化していいと思う。SLIME でもまだ不満だ。 例えばだけど、プロファイリング結果をグラフでREPLとは別のウィンドウに表示し続けるとか。アレグロにはあったけどCLOSのクラス階層を表示してくれるとか。 >>74 LightTableってエディタでclojureいぢると少し近い感じになるかも CLだとやっぱりFranzとか欲しくなる 小売りで買えないから学習用の奴しか触ったこと無いけどたしかに脳汁が出そう 昔の Lisp の開発環境って使ったことは無いんだけど、スクリーンショットだとか動画とか見ると、 今でいう JavaScript を Chrome の開発環境で使ってるみたいな感じで、かなりリッチなんだな。 slime なんてめじゃないぞ。 どうして退化してしまったのか…。
>>74 現状ライブラリとして広く共有されてるかは別としてそれなら簡単に作れると思うけどね クラスブラウザなら素朴なのがslimeにもあるよ(require 'slime-xref-browser) M-x slime-browse-classes これもCLOS入門で試しに作ることが多い replが重要なんじゃなくて対話性が重要ってことなんじゃないのかな そして他の言語にかなりキャッチアップされてるから,いまとなっては大した特長でもない slime-browse-classes初めて知った クラスの継承関係を表示するだけでも便利だけどスロットとか出ないの?
>>80 シンボルの上でC-c C-d dすれば良いんじゃねw いずれにせよ柔軟性や透明性など、自由度が段違いですのでカスタマイズするのも自作するのも簡単だろう >>81 その方法なんで気付かなかったんだろ ありがとう slimeでさえ使い込なせてないのにそれより多機能な>>71 があっても豚に真珠だな 早く豚から海豚くらいになりたい うぉー、LightTable かっけー!サンクス! いろいろいじってみる。 >>78 すまん、おれの説明が悪かった。 クラスブラウザは単なる例で、もっとLispの特徴を活かした開発支援のアイディアはあると思っているんだよ。 それがあることで生産性がぐっと上がるような。 具体例が出せないが、多分一つの方向は、コードから得られる統計的データを生かすものだと思う。 みんな そんなにreplとクラスブラウザが好きなら Smalltalkにしちゃいなよ
Smalltalkと同程度に、インタラクティブに、イテレーティブに、アジャイルに、GUIを含めて開発できるということだな
Smalltalk はもう何年も前に死んでるじゃないか
clojureから流れてきたものだけど、CLer的にはloopってどういうものだと認識されてる? 同じlispではあるけど、CommonLispは関数型であろうとしてるように感じないんだよね 効率のためなのかわかりやすさのためなのか、ローカルでさえあれば再代入まみれの副作用まみれっていうように感じる loopも結局使い方によっては関数型の繰り返しっぽいっちゃぽいんだけど、どう使うにしろlispっぽくはないよね? そのへんどう思われてるのか気になる。気軽に使っていいものなの?
CommonLispはマルチパラダイム言語であって、別に関数型であろうとしているわけではない Lispは歴史的な理由で関数型と勘違いされているが、手続的にもかけるし関数的にも書けるしOO的にも書ける 状態が増えると保守性もろもろが落ちるのは真なので、そこらへん意識しつつ、適材適所で書けばいい
>>90 >>91 マルチパラダイムってのは確かに書いてあったけど、利用者側はなるべく関数型っぽく書こうとするべきなのかなと思っていた Scalaとかだとマルチパラダイムだけどなるべく関数型でかくことが推奨されてるイメージがある なんでも関数型っぽく書くのではなく、わかりやすく書きやすく目的にあったように書きましょうというのがCLの正しいスタイルなのかな? つまり状況に適していると判断できればloopをつかうことをためらう正当な理由はないってことか。 性能もdo系統や末尾再帰と比べて申し分ないようだし 出来るだけ関数型で書くかはコーディングスタイルの話じゃないの
概ねそんな感じでいいと思うけど、結局はどんな書き方も許されているので利用者が適宜判断する以外ないってだけかなあ CommonLispとしての正しいスタイルというものはたぶんない
Lisp族は利用者が対象に最適と考える記述を書きやすくしている 他の言語は言語作成者が最適と考える記述を書きやすくしている
mapcarは知ってるけど他のmap系は知らないので hyperspecを眺めていたら疑問に思ったので質問します。 結果を返さないし反映もされないmapcは どんな有用性があるのでしょうか。 おそらく私の無知なのでしょうが mapcの存在する意味、使いどころが解りません。 どなたか説明出来ませんか。
>>96 97のとおり副作用目的で使う 用途としてはdolistと同じだがmapcはそれより昔からある 他の言語でいうとRubyのmapとeach、Schemeのmapとfor-eachのような関係 dolistがあるので存在意義が薄れた (dolist (obj lst) (f obj)) の場合は (mapc #'f lst) に出来て簡潔
CL はマルチパラダイムなのは認めるけど、最近のパラダイムを取り込めてなくないか? 誰か haskell の型システムを完璧にCLに取り込むべきだ。(liskell は死んだっぽいし)
S式で書かれたMLコードを、静的な型チェックかけたあとでLISPに変換する ML2CLとか誰か作ってくれ
cons cellのアドレスとそのconscellのcarのアドレスは別物ですよね?
>>104 基本的には別物だけど immidiate value の場合はそうでもないというか、 ちょっと説明しづらいけど変則的なことが起こりうるよ。 整数がいくつか入ったリストがあってそれで リストが(1 2 3)なら"1-2-3"という文字列を作りたい (format nil "~{~A-~}" '(1 2 3))なら"1-2-3-"になってしまう なんか良い方法無いかな
(format nil "~{~a~^-~}" '(1 2 3))でどうでしょう?
>>105 immediate valueって何が言いたいの? * (let ((cons '#0=(#0# . nil))) (eq cons (car cons))) T これのこと? これはimmediate value って言わなくね? >>110 105が言いたいのは tagged pointer のことじゃないの? 質問です (defun hoge () (fuga (loop for x to 100 collect x))) みたいな関数があるとして、この関数を呼び出すたびに (loop for x to 100 collect x) が評価されますよね もしそれが重い処理で、実行時に定数として扱いたい場合はどうすべきでしょうか 自分の思いつく最良の解決方法は次のようなマクロを使う方法です (defmacro pre-eval (body) `',(eval body)) (defun hoge () (fuga (pre-eval (loop for x to 100 collect x)))) もっと良い方法があるような気がするんですが、ご指南お願いします
>>113 ありがとうございます リードマクロは盲点でした 内包表記をS式で表そうとしたら 結局、loopみたいな文法になるような気がして loopは他の言語の内包表記のような感覚で使ってるよ
sbcl 1.2.5ってスペシャル変数にバグある? なんかどうにもおかしい部分があるんだけど
>>116 再現コードがないからどこがおかしいのかわからない明日も会社なのに眠れないし最低の気分だよ 今起きて確認したら (let ((x y)) (declare (special x))) とするところを (declare (special x)) (let ((x y)) ) としてただけだった 安心して寝てくれ>>117 ∧∧ ヽ(・ω・)/ ズコー \(.\ ノ 、ハ,,、  ̄
マクロのマクロのデバッグ辛すぎ なんで同じ式を生成してるのに片方だけエラー出るんだ
マクロを生成するマクロのデバッグがむずいのはだいたい下のどれか ・展開で副作用がある糞マクロだから ・100行以上ある糞マクロだから ・分割できるのに1passでなんでもやろうとする糞マクロだから ・`(, ,@)式の扱い方を知らない糞野郎だから ・リスト操作のいろはを知らない糞野郎だから ・マクロのデバッグ方法を知らない糞野郎だから
>>120 の原因は結局マクロを使ってる部分の式が間違ってただけだったんだけどね ・使用箇所で意味が変わる不衛生な糞マクロだから ← New!
eval-whenの使い方がいまいちわからない てかマクロの展開とコンパイル・実行の関わりがいまいちわからない
>>127 割と理詰めで、必要性を理解できるところだよ なんかC++の闇みたいだな C言語をマルチパラダイムに使えるようにいろいろ突っ込んだのがC++で、 lisp族に同様に色々突っ込んだのがCommon Lispみたいな
そういう声はたまに聞くけどなんで誰も行動しないの?
スクラッチでCommonLispを書けるやつがある程度いないと駄目だから。 改善案とか出すだけのやつやちょっとカスタマイズするようなやつが沢山いても根本的な変化は起きない。 変化してる言語は言語好きの処理系屋が集まって年中議論したり機能追加してる。 ユーザーが高度にカスタマイズできるせいで大抵の要求は実現できるから局所最適解にはまって進化がとまるのはあるかもな。
> スクラッチでCommonLispを書けるやつがある程度いないと駄目だから。 common lisp処理系作れるっていうこと? Cで挑戦したことはあるけどパッケージ一通り実装したりリードマクロ付けたあたりまでは やったんだけどCLOSやコンディションの実装はあまりの大きさに挫折したわ
>>136 おいらはformatだけで挫折する自信あるぜ formatはlispで書けるからいいとしてその下のwriteが大きすぎる
3imp 読んで継続実装したところで諦めた。CLじゃないけど。 面白かったので Lisp in Small Pieces 買おうか迷ってるんだけど持ってる人いる?内容どうか聞きたい。
3imp 読んで継続実装したところで諦めた。CLじゃないけど。 面白かったので Lisp in Small Pieces 買おうか迷ってるんだけど持ってる人いる?内容どうか聞きたい。
On Lispを読んでいるのですが、関数型インターフェースのところで 各関数の呼び出しは、その呼び出し自身が支配するオブジェクトを 安全に書き換えることができる という記述がああります この、呼び出し自身が支配するオブジェクトとはどのようなことなのでしょうか? 続く文章で、関数呼び出しの返り値として受けとるオブジェクトは支配する -> 書き換えても良い(安全に) 引数として渡されるオブジェクトは支配しない ->書き換えてはいけない(でも既に渡しちゃっているんでは?) ということなのでしょうか?
静的に狭い場所で管理された副作用は速度の為に許容するって意味じゃね ところでブートスクラップでlisp to cコンパイラを作ろうとしてるんだけど compile関数を実装するときに渡されたシンボルか関数からCのコードを生成するときに function-lambda-expressionで関数の本体部分を取得すればいいのかな kclのコード見てもcompile-fileとかはあったけどcompile関数は見つからなかったのはなんでだろう
横文字には弱いみたい 要約するとcompileに渡された値からどうやって関数の引数やら本体部分を得るかを知りたいわけです
>>141 http://www.asahi-net.or.jp/ ~kc7k-nd/onlispjhtml/functionalProgramming.html 他の誰のものでもないオブジェクトという表現からいえば、まさに安全に書き換えることができるという意味で言ってるのだと思う つまり、関数呼び出し自身が支配するオブジェクト⇔関数呼び出し時に安全に書き換えられるオブジェクト なので、後段の部分の理解もそういうことで大体いいのでは 既に渡してるというところで引っかかってるみたいだけど、ここの話は読む限り関数的な書き方のLispの慣習なので、 要は受け取った引数を関数内部で勝手に書き換えるのはLispの関数的な書き方の慣習上よくないとされてるからやめろってだけの話なぜ慣習の話が出てくるのかといえば、どのオブジェクトが支配的であるか、つまり安全に書き換えられるかというのは書く人間が決めることだから で、一般的なLispの慣習では引数は支配的でないけど、呼び出しの返り値は支配的とされているよ、という話 この慣習を守れば多くの場合純粋関数的な書き方と同等のローカル性を得られるけど、その節の後半部分はそうでない場合もあることを解説してる 教えてくれ Emacs23.3 (On windows) に slime 入れたんだ .emacs にはこんな感じで書いた (setq inferior-lisp-program "sbcl") (add-to-list 'load-path "~/.emacs.d/site-lisp/slime") (require 'slime-autoloads) (slime-setup) で、まあ動くことには動く でもなんでか以前clispで使ったときはあった起動時アニメーションがないんだ なんで?
This `cl-labels' requires `lexical-binding' to be non-nil ntemacs23で出たエラーですが 原因は何でどうすれば解決しますか?
146 = 148なのか? エスパーだけどslimeのことならemacs24にすれば良いじゃね? しかし質問のしかた最悪だな
>146 = 148なのか? ちがいますよ >エスパーだけどslimeのことならemacs24にすれば良いじゃね? ありがとうございます >しかし質問のしかた最悪だな ごめんなさい
質問です 素人知識ながらコードの高速化を行っているのですが、例えば次のコードをdisassembleします(sbclを使ってます) (defun my-eq (a b) (declare (optimize (speed 3) (safety 0))) (eq a b)) ; disassembly for MY-EQ ; Size: 21 bytes ; 0CAE251A: 39FA CMP EDX, EDI ; no-arg-parsing entry point ; 1C: 740A JEQ L1 ; 1E: BA0B001001 MOV EDX, 17825803 ; 23: L0: 8BE5 MOV ESP, EBP ; 25: F8 CLC ; 26: 5D POP EBP ; 27: C3 RET ; 28: L1: BA27001001 MOV EDX, 17825831 ; 2D: EBF4 JMP L0 すると高速化においてよろしくないとされる条件分岐命令(JEQ)が出力されます このようなJEQは本当に高速化の脅威になりますか? また、取り除くことはできますか?
>>151 eq速くして全体が速くなったというのを寡聞にして聞かない 何作ってるの? >>152 将棋のAIを作ってます インライン展開してない状態でプロファイルを取ったとき eqを使う単純な関数で時間がかかっており、>>151 のような状態に気づきました 単なる比較で分岐命令が生成されることに違和感があり質問しました ちなみに今プロファイルを取りなおしたところそんなに時間もかかっておらず、なんだったのかって感じです インライン展開すると関数コールが省略できるってのもあるし、 大きなジャンプを避ければメモリローカリティが維持されてデータ (プログラム) がキャッシュに乗って速度に貢献することもある。 キャッシュってのは侮れない要素なんだけど、正直言って実際に試してみないとどう効いてくるのかさっぱりわからない。 プロファイラでもそういう差は見え難いしな。 予想にこだわらずに色々と試してみるのが吉。 その内に勘が働くようになるよ。
gcl使ってたらhandler-case,ignore-errosが無いことに気付いた やっぱりansi準拠じゃないとansin出来んな
define-hogeマクロを定義するマクロはどういう名前にすればいいんだろ define-define-hogeとかしか思い付かないけど不恰好だし
allegro clの無償版って普段のlispプログラミングにどれくらい使えるかな 制限はヒープ領域だけみたいだけどヒープ領域が60Mbってどれくらいの制限がいまいちわからんな
>>161 正直、あまり常用したいとは思わない 何をするにも、試用版かなんかのダイアログが出てきたと思う allegro購入予定でなければ、cclとかsbclとか使った方がいいと思う やっぱりただで使わせる気は無いのか 気分転換に環境変えてみようと思ったけど残念
loopマクロのトークンはキーワードにするのはどういう意味があるんだ
>>164 パッケージの名前空間を汚さないため、だと思う。キーワードを使わないと、thenとかuptoとかのシンボルがそのパッケージに作られちゃう。 lispのプログラムってホントにデータなんだ、と驚いた記憶がある。 なにがインターンされるかなんて気にして書いてる人なんかいないよ、お兄ちゃん! :then :upto だとエディタのハイライトで読みやすくなるからだよ。 それが読みやすくなければ、then uptoと書けば良いよ!
外部から参照されるシンボルでもない限りファイルをコンパイルしたファイルからはシンボルは勝手に消えるからライブラリ作るやつはそんな細かいこと気にしてないだろ… 無用のシンボルをインターンしたくなくてdefpackageで#:hogeって書くやつはいるがキーワードパッケージとcl-userのシンボルは消しにくいからまあ理解もできるが、それもコンパイルすれば消えるし
loopマクロのuptoとかがキーワードでも動く、ってのは ちゃんと仕様になってるのかな。 おれはへえキーワードでもいいんだ、と知ってからはずっとキーワード派。 無駄なシンボルがインターンされているなんて、おれの美意識としては嫌。 他人に強要はしない。
仕様で規定されてるかどうかはloopの項目に記載があるから違法か合法かは読めばわかるな。 無駄なシンボルがインターンされるという意味では、キーワードパッケージにインターンされる方が グローバルに汚染される分、ローカルパッケージ汚染より質が悪い筈。 矛盾したこだわり…。
CLHSより引用。 loop keyword n. Trad. a symbol that is a specially recognized part of the syntax of an extended loop form. Such symbols are recognized by their name (using string=), not by their identity; as such, they may be in any package. A loop keyword is not a keyword.
>>171 矛盾はしてなくない? 皆が:uptoを使えば、キーワードパッケージだけにそのシンボルができるんだから。 キーワードパッケージはloopに限らずぐちゃぐちゃと変なシンボルが登録されるけどそれは仕方ないこと。 世界の汚さを一手に引き受ける、それがキーワードパッケージの役割だと思ってる。 構造体やクラスの名前からスロットを取得する方法ってある?
class-slots てメソッドがあるよ。構造体に使えたかは忘れた
carとfuncallの違いはなんですか? と聞いてるようなものなんだが
>>179 ええとね 単語のスペルと長さがちがうかなぁ それとevalはevaluateの省略だね eval is short for evaluate この板のいくつかの場所で言われてるけど その人ちょっとおかしいんだよ 真に受けない方がいい
いえこの人がおかしいのは知ってますし真に受けるつもりもありません ただ思えばそれらの違いを言葉にできるほどの認識がなかったので
あのう、きちっとしたテキストを一冊読んだほうがいいよ
(eval `(funcall ,f ,@args))と(apply f args)が同じっていいたいのかね? ようわからんけど…
evalはシンボルのリストを読み込んでその内容を実行する。 applyは既に評価されて定義された関数を適用すること。
eval だけでいいのに何でapplyが重視されてるんだ?、と思ったら、SICPを読もう
>>179 commonLispの板でeval applyといえば特定の実装の話になるから lisp scheme板に話をふった方が良いよ そういう話好きなやついるから emacsのslimeについて質問です slime-autodoc-mode slime-autodoc-space うざいので無効にしたいのですが どうにかならないですか
adw-chartingって(ql:quickload :adw-charting)しただけじゃ 使えないんでしょうか
>>193 エスパーだけど、サブシステムに分かれてるから (ql:quickload :adw-charting-vecto) しないとサンプルが動かないという意味ではそうなのでは 試した手順とマニュアル読んで分からなかった箇所を具体的に書いたら? (adw-charting:with-pie-chart (300 200) (adw-charting:add-slice "A" 5.0d0) (adw-charting:add-slice "B" 2.0d0) (adw-charting:save-file "minimal-pie-chart.png")) は配布状態で動いたよ >>194 動きましたありがとうございます quicklispの使い方をわかってなかったので exampleをコピペしただけでadw-charting:をつけてませんでした 嬉しいのでチラシの裏書きます The Little Schemer二回読了!! 勉強になった 次は「初めての人のためのLisp」を読もうと思い購入済みでもあるのだけれども予定変更 The Seasoned SchemerというThe Little Scemerの続編でthe natures of computingの理解を目ざすものがあったのでそれにした。 それ終えたら「初めての」かLand of LispかOn Lispやろ 本来の目的ClusureでAndroid用の好みのワンベインOutlineプロセッサつくるためにLisp系はじめたけど楽しいからそれはさておき基礎の基礎に深く分け入っていきます
再帰で考えてしまって動的計画法が使いこなせない! 全マス埋めていく感覚が、全ノード探索と分かってはいるんだが…
Serial Experiments LainではLispのコードのシーンがあるらしい D-WaveのOSがCommonLispってマジ?
>>198 このソースを書き写した覚えがあるなと思って、 ハードディスクを漁ったら見つかった。 この部分の前後のソースも写してあったけど、 前の部分のソースが明らかにライフゲームの生死判定だった。 見れた 配列をbit単位で操作するのは効果あるのかな
>>207 1991年だからメモリ贅沢に使うのに躊躇したんじゃなかろか? 一バイトは金のひとすくい しません、させません、ビットの無駄使い おかげでビルも立ちました
>>210 stackoverflowに質問を書く前に問題を解決でき オープンソースにせずとも問題を解決出来る高い生産性が 有るって事だなw 言語も人も。 オープンソースにせずとも問題を解決出来る、って意味分らないね
Rational Fortran 初代プログラミング作法(programming tools)のやつね。
LET OVER LAMBDAを読んでいるのですが しょっぱなで出てくるマクロdefmacro/g!が動きません。 (defmacro defmacro/g! (name args &rest body) (let ((syms (remove-duplicates (remove-if-not #'g!-symbol-p (flatten body))))) `(defmacro ,name ,args (let ,(mapcar (lambda (s) `(,s (gensym ,(subseq (symbol-name s) 2)))) syms) ,@body)))) (macroexpand-1 '(defmacro/g! nif (expr pos zero neg) `(let ((,g!result ,expr)) (cond ((plusp ,g!result) ,pos) ((zerop ,g!result) ,zero) (t ,neg))))) ;=>(DEFMACRO NIF (EXPR POS ZERO NEG) (LET () `(LET ((,G!RESULT .. (flatten '`(let ,g!result))が (SB-INT:QUASIQUOTE LET ,G!RESULT)になるので ,g!resultがremove-if-notを通り抜けられないのが理由でしょうか。 sbcl1.2.7です。動かす方法はありますか?
(defun g!-symbol-p (s) (and (symbolp s) (> (length (symbol-name s)) 2) (string= (symbol-name s) "G!" :start1 0 :end1 2)))
コードコピペしたらちゃんと動いたけど flattenが間違ってんじゃないかな
試しにwindows版のsbcl1.2.7入れてやってみたが 確かに動かないな、これ windows版ccl1.10ではちゃんと動いた こういうことってあるんだな
clisp+alexandria:flattenでやってみたけど動くよ
debianのsbcl1.0.57.0ではちゃんと動く 今度は普段ccl1.10で使ってるslimeでsbcl1.2.7動かしてみたが やっぱり動かん
Common Lisp 素人です. SSL って cl+ssl が標準的なんですかね? 以下のコードが動かないんですが, これはうちの環境が悪いんでしょうか? ``` (ql:quickload :usocket) (ql:quickload :cl+ssl) (let* ((sock (usocket:socket-connect "imap.gmail.com" 993 :protocol :stream :timeout 60)) (sock-stream (cl+ssl:make-ssl-client-stream (usocket:socket-stream sock)))) (unwind-protect (progn (format sock-stream "? CAPABILITY")) (usocket:socket-close sock))) ``` Debugger: ``` There is no applicable method for the generic function #<STANDARD-GENERIC-FUNCTION STREAM-WRITE-STRING (3)> when called with arguments (#<CL+SSL::SSL-STREAM for #<FD-STREAM for "socket 192.168.1.60:46384, peer: 64.233.187.109:993" {1005B13083}>> "? CAPABILITY" 0 NIL). [Condition of type SIMPLE-ERROR] ``` cl+ssl の streams.lisp では stream-write-byte についてしか defmethod してないけど, 普通はこれで動くもんなんです?
SBCLのバッククォートは構造体に変換されるようになったから LET OVER LAMBDAにあるような、バッククォートを含むコードの flattenによるコードウォークはSBCLだと動かなくなったって事か。 ダメじゃんSBCL〜 こんなバッククォートの仕様、CLTL2満たしてるのか?
解決したので報告です. :external-format を指定して flexi-streams を使えば良いようです. ``` (let* ((sock (usocket:socket-connect "imap.gmail.com" 993 :protocol :stream :timeout 60)) (sock-stream (cl+ssl:make-ssl-client-stream (usocket:socket-stream sock) :external-format '(:latin-1 :eol-style :crlf)))) (unwind-protect (progn (listen sock-stream) (format *standard-output* "~%~a~%" (read-line sock-stream nil)) (force-output *standard-output*) (format sock-stream "? CAPABILITY~%") (force-output sock-stream) (listen sock-stream) (format *standard-output* "~%~a~%" (read-line sock-stream nil)) (force-output *standard-output*) ) (usocket:socket-close sock))) ``` => ``` * OK Gimap ready for requests from xxx.xxx.xxx.xxx hogehoge * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN ```
(変数 値)のリストと式が与えられた状態で、変数を値に束縛した環境で式を評価したいのですが、良い方法がわかりません 現状では次のように実装しています (let ((bindings '((a 1) (b 2))) (form '(+ a b))) (eval `(let ,bindings ,form))) 実際にはformに対してbindingsを変えたものが何度も呼ばれます また、formは複雑なものも想定します 他にいい方法はありますでしょうか?
(let ((bindings '((a 1) (b 2))) (form '(+ a b))) (progv (mapcar #'car bindings) (mapcar #'cadr bindings) (eval form))) とかかなあ もしくはformを関数にしてしまうのがいいのかな (let ((bindings '((a 1) (b 2))) (form '(+ a b))) (let ((thunk (coerce `(lambda () ,form) 'function))) (progv (mapcar #'car bindings) (mapcar #'cadr bindings) (funcall thunk)))) bindingだけ変えて何度も走らせるなら多分効率もいいと思う(確かめたわけじゃないけど) インタプリタかなにか作ってるの? 👀
>>232 progvで動的変数が作られるのは知りませんでした formの関数化も良さそうですね mapcarによるコンシングはデータ構造を工夫してなくせそうです だいぶパフォーマンスが改善されそうです。ありがとうございます ある言語のサブセットを作ってます >>235 comon lisp よりも scheme の方がよさそーだ‥ 235です。 >>235 それはなぜですか。 もしよければ、意見を聞きたいです。 >>237 え、わたし(235)のこと。それともリンク先を書いた人のこと。 私自身は ローカルなら他から呼べなくて安全といえるけど、 1つの定義が大きくなってあまり好きじゃないんです。 極端に言えば、 (1つ目の処理 ...) (2つ目の処理 ...) (3つ目の処理 ...) と、書いていって最終的に (3つ目の〜 (2つ目の〜 (1つ目の〜 ...))) と、するのが好きなのですが 好き嫌いを超えた優劣や善悪があるのでしょうか。 元スレで作った人に聞けばいいのでは… たぶん単純に名前空間が関数と変数で分かれてるってだけの話だと思うけど
初歩的な質問ですいません。 CommonLispをCentos6にインストールできないんですが 単純にyum 〜では駄目なんですか?
sudo yum install sbcl.x86_64 じゃだめなん?
Eclipse Common Lisp がオープンソース化された話があるみたいだけど、 これって 32 bit Windows でも動く? 公式には 64 bit しかチェックしてないみたいに書いてあるけど。
これはさすがにヤバイだろww 【神回】美人ニコ生主mAriAがFME切り忘れで公開オナニー!?【電マ】 VIDEO こんにちわ、これってどういう場面で使うんでしょうか?? 関わりがないってことは特に知る必要ないんでしょうか?
>>244 だまされるお前が悪い。 クソ動画見てオナニーしてろ >>246 うわ!もろに犯罪者の発想だな 「騙される方が悪い」 おまえの人生を彷彿とさせるな 犯罪人生上等君 clispって5年もバージョンアップないんだね もう終わりか
つい最近、lisp始めたんですけど、 日本語入れると、PARSE-NAMESTRING: syntax error in filename と出るのですが、どのようにしたら、 日本語のディレクトリって作成できますか?
>>250 処理系によって違ってくるから何を使ってるか教えて >>251 詳しくは知らないんだけど、 common lispで format関数使って日本語と文字列を結合しようとするとそのエラーが出ます。 windowsのclispでcl-opencvって使えますか?
今日からLisp始めた阿呆です。本当に初歩的な質問をしたいのですが、よろしいでしょうか。 わたしは 太郎 です。 趣味は 2ちゃんねる です。 Lisp初心者 です。 というファイルを (((#\わ #\た #\し #\は) (#\太 #\郎) (#\で #\す #\。)) ((#\趣 #\味 #\は) (#\2 #\ち #\ゃ #\ん #\ね #\る) (#\で #\す #\。)) ((#\L #\i #\s #\p #\初 #\心 #\者) (#\で #\す #\。))) このようなリストを吐き出す関数を書きたいのですが、本当に知ろうとゆえ、困ってます。 一応書いてみたのが以下のものです。 (defun test-parse (fname) (with-open-file (in fname :direction :input) (let (tmp (w ()) (l ()) (s ())) (loop for tmp = (read-char in nil) while tmp do (cond ((eql tmp #\Space) (push (reverse w) l) (setf w nil)) ((eql tmp #\Newline) (push (reverse w) l) (setf w nil) (push (reverse l) s) (setf l nil)) (t (push tmp w)) )) (push (reverse w) l) (push (reverse l) s) (reverse s)))) どうすれば、かっこいいLisperになれますか。 説教してください。頓首。
かっこいいかは知らんけど、split-sequenceを使うと、 (defun omanko (src) (mapcar (lambda (s) (mapcar (lambda (x) (coerce x 'list)) (split-sequence #\Space s))) (split-sequence #\Newline src))) (omanko "わたしは 太郎 です。 趣味は 2ちゃんねる です。 Lisp初心者 です。") ↓CLISPでの結果 (((#\HIRAGANA_LETTER_WA #\HIRAGANA_LETTER_TA #\HIRAGANA_LETTER_SI #\HIRAGANA_LETTER_HA) (#\U592A #\U90CE) (#\HIRAGANA_LETTER_DE #\HIRAGANA_LETTER_SU #\IDEOGRAPHIC_FULL_STOP)) ((#\U8DA3 #\U5473 #\HIRAGANA_LETTER_HA) (#\FULLWIDTH_DIGIT_TWO #\HIRAGANA_LETTER_TI #\HIRAGANA_LETTER_SMALL_YA #\HIRAGANA_LETTER_N #\HIRAGANA_LETTER_NE #\HIRAGANA_LETTER_RU) (#\HIRAGANA_LETTER_DE #\HIRAGANA_LETTER_SU #\IDEOGRAPHIC_FULL_STOP)) ((#\L #\i #\s #\p #\U521D #\U5FC3 #\U8005) (#\HIRAGANA_LETTER_DE #\HIRAGANA_LETTER_SU #\IDEOGRAPHIC_FULL_STOP)))
>>255 おおお。ありがとうございます。 split-sequenceなんてのがあるのですね。 勉強になりました。 いろいろ参考書を買ったけど、 PAIPで禁欲的にやるのが一番いいような気がしている。 おすすめの書籍とか読む順番とかあったら教えてくれませんか。 お願いいたします。
あるサイトに (reduce #'+ '(1 2 3)) ;=> 7 6じゃないのですか?
>>258 そのサイトの管理者なりに教えてあげればいいじゃない 最近はcl freaks に出ている人達を中心にcommon lispが元気ある感じするよね
lispworks proかったった。 買ったからには勉強せねば。 実はまだlispなんにも知らん。
ならリスプの統合環境と言っていいか、そこは怪しいが zxzzyあたりからやりゃ良いのに と思う俺様 ま、いいけどな
(defun fact (n) (cond ((=n 0) 1) (t (* (fact (1 - n)) n )))) で *** - SYSTEM::%EXPAND-FORM: invalid form (1 - N) The following restarts are available: ABORT :R1 Abort debug loop ABORT :R2 Abort debug loop ABORT :R3 Abort debug loop ABORT :R4 Abort debug loop ABORT :R5 Abort debug loop ABORT :R6 Abort debug loop ABORT :R7 Abort debug loop ABORT :R8 Abort debug loop ABORT :R9 Abort main loop とエラーがでます。どうしてなのでしょう?教えてください。 お願いします。
スペースが入ってなかったり入っていたり (defun fact (n) (cond ((= n 0) 1) (t (* (fact (1- n)) n))))
>>267 ありがとうございます。ずいぶん難しいなあと思いました。 コードを整えるためにスペース入れたらエラーなので。 規則はあるのでしょうか? >>268 - や * や = も英数字と同じ扱い。 分けるものがなければつながるというだけ。 =n とあればそれは =n という名前と認識されるし、 1- は 1- という名前。 >>269 さん 教えていただいてありがとうございます。 質問をしてよかったと思いました。教えていただいたものを 知りませんでした。 関数には引数に1-をいれるというオプションのようなものが付く という仕様になっているということがわかりました。 では >>270 > 関数には引数に1-をいれるというオプションのようなものが付く 高階関数のことを言ってるのかな。 そのあたりはどうせ避けて通れないので、 学んでいるうちにわかってくるよ。 >>270 1- って関数名ですよ? クォートされていないリストは 一つ目の要素が関数名、以後が引数として評価されます。 例 (1- n) 1- は関数名、nは引数 (注:関数1- は引数から1引いた数を返す関数) 参考;クォートされてるリスト例 '(* 2 3 ) (quote (* 2 3)) 解説 (* 2 3 )はクォートされているので関数として評価されない あなたの初めの書き方 (1 - n) だと関数名は1で、- と n の2つの引数をもつことになる(正確に言えば、引数- と 引数n に 関数1を適用する、となります) すると関数1は未定義だよと言われちゃいますね 同様に (=n 0)だと 関数名はn= で引数は0となります。 ここでも関数=nは未定義といわれちゃいます C言語のフリーフォーマットとはことなり、LispではスペースがS式での要素の区切り(デリミッター)になります。 スペースで分ければ2つの要素になるし スペースを消して繋げればひとつの要素になってしまいます。 ちなみに(=n 0)が正しい適用かどうかは関数定義されてるかどうかによります。もし (defun =n (x ) (zerop x)) と定義されていれば (=n 0) => t ですね windowsでclispとquicklispでcffiを触ってみようと思ったんですが (cffi:define-foreign-library test (:windows "test.dll") (t (:default "test"))) (cffi:use-foreign-library test) で、testが開けません パスは正しいし他の言語からもリンクできるライブラリですが、 何処がおかしいのでしょうか?
>>271 32bitだからそんなにしないよ。 今とりあえず、いじくりまわぢてる。 自己レスですが、CLISPで散々いろいろ試したけどどうにもならなかったので SBCLに変えてみたらまともに動くようになりましたので報告
xyzzy上でで良ければ reference.xmlから reference.txtや reference.chm使って補完できるよ 足りない関数名ややシンボル名は静的補完ファイルに登録するか、reference.*に追加するか
>>278 ,279 ひょっとして >277当てか? 後出しになってしまって申し訳ない cygwin clisp と Linux clisp を使っています SLIMEの方はそれぞれ NTEmacs と Linuxのaptitude で入る方のemacs だから aptitude apt-cyg svn git wget などで落としてインストールし zsh上で pydoc ... 等と同様に呼び出したい >>280 >>277 のリンク先(HyperSpec)のことなら、ダウンロードはLispWorksのサイトのこのページから。 http://www.lispworks.com/documentation/common-lisp.html "This HTML document may, subject to certain conditions, be downloaded for use at other locations." という段落の "downloaded" が、HyperSpecのHTMLファイル群を固めたTar書庫へのリンク。 ローカルに置いたHyperSpecを「zsh上で pydoc ... 等と同様に」参照できるコマンドは多分無いと思うけど、 EmacsのSLIMEからブラウザで開くことは出来る(シンボルの上で C-c C-d h)。 https://common-lisp.net/project/slime/doc/html/Documentation.html 設定はこんな感じ(展開したHyperSpecディレクトリをホームディレクトリに置いた場合): ;; HyperSpecのディレクトリ(URL形式)。 (setq common-lisp-hyperspec-root (concat "file://" (expand-file-name "~/HyperSpec/"))) ;; HyperSpecを `eww' (Emacs 24.4 以降に内蔵のウェブブラウザ) で開く設定。 ;; (それ以外のURLはデフォルトのブラウザで開く) (setq browse-url-browser-function `((,(concat "^" common-lisp-hyperspec-root) . eww-browse-url) ("." . browse-url-default-browser))) >>281 なるほど ありがとう これでもう大丈夫になりました localリファレンス用のzshコマンドのために書いた #!/usr/bin/env python3 import urllib.request import re import os import subprocess import sys # USAGE: this-script.py or this-script.py [Symbol] ref_dir = os.environ["HOME"] + "/lib/HyperSpec/" ref_top_dir = ref_dir + "/Front/X_AllSym.htm" if len(sys.argv) == 1: to_Symbol_list = "w3m " + ref_top_dir subprocess.call(to_Symbol_list, shell=True) elif len(sys.argv) == 2: top_as_html = "file://" + ref_top_dir with urllib.request.urlopen(top_as_html) as res: html = res.read() is_Symbol = 'Body/.+?#' + sys.argv[1] + '"' url_suffix = re.sub("#.*", "", "".join(re.findall(is_Symbol, html.decode()))) if url_suffix: do_w3m = "w3m " + ref_dir + url_suffix subprocess.call(do_w3m, shell=True) else: print("The symbol was not found.") else: print("Please input 0 or 1 Symbol of Lisp.")
話題になってないけど、 コンスセル原器が廃止されるらしいぞ
コンス原器とか言ってるのはもちろんネタだからな、わかってると思うけど メートルの定義が科学的なものに置き換えられるから、そのパロディだからな?
原器は力が溢れている。 元気だから。 なんちゃってーー
ネタだったのか どういうものなんだろうと唸りながら考えていた俺
グレアムの魔道書からではなく ホフスタッターのメタマジックゲームのlispの章を読んで lispやりたいと思ったプログラミング初心者だけど、 emacsでmaterialというカラーテーマにして フォントをRicty Diminished の斜体にしてから 全画面でlispのコードの見たらとても美しい言葉に見えた 美しいとそれだけでまた見たくなるから 学習意欲を保つためにはよいと思った。
>>273 ありがとうございます。今はじめて>>273 さんの書き込みを読みました。 しばらく時間が経ったのでclispのことを忘れてしまいました。 ぼちぼち回復するようにがんばります。 >>292 コードの美しさを感じ取れるといいコードが書けるようになるよ コードは書くよりも読むほうが、うんと多いから >>286 スレ違いなツッコミだがメートル原器はずっと前に基準でなくなっている 最近の話題はキログラムの方だな >>294 「land of lisp」という本にhaskellいいみたいなこと書いてあったけど、 haskellってどうなのかな common lispとhakellもやったことがあることがある人からしたら。 lispの括弧と前置記法って一貫している感じがして好き。 Schemeだとtyped racketとか型つけるのが流行っぽいけどcommon lispも似た感じになってたりします?
Haskellは時々仕様が変わるから安心して使えない
>>299 うーん、ちょっと使ってみたいけど、 後からワケが分からなくなりそうで不安 llvmはフリーなソフトウェアの敵 みたいなことをハッカー界隈の偉い人が言ってなかったっけ?
llvmやjavaなどのgpl教団に狙われやすいcl Schemeはそんなことないのに
単純な質問なのですが、CommonLispにはリードマクロっていう構文解析機を自分で作れるてきな機能がありますが これってなんで廃れたのでしょうか?正直最強の機能だと感じたのですが ただ、触った感じ ・定義しないといけない事が多すぎて、自分好みのカスタマイズが時間がかかる。 ・同じ意味だけど構文解析失敗したら最後に成功したところまで戻ってくれないのでコレジャナイ感がすごい。 ・みんながみんなカスタマイズを好きにやって文化的に統合できなくなった このあたりが問題かなって感じているのですが、実際Lispコミュニティーにいる人たちのご意見が欲しいです。 OnLispとかLet over Lamnbdaとかやりおえてのままの感想なので
【 オンラインTCGエディター 】 >>1 ,>>307 デュエル・マスターズ的な非電源TCGの 《 オンライン化ツクール系ソフト 》 制作の企画。 例えば、ガチンコ・ジャッジを直ぐにでも導入できる機能を持っておりながら、 当面それを扱わず単純化させておいて、事後的に導入拡張する際に当該システムを ブロック構造の組み合わせで後付け挿入できるように予めシステム化してあるソフト(エディター)。 既存の非電源TCGを劣らずに再現できるならば大概のニーズに応えられる筈。 デュエマ、ヴァンガ、ウィクロス、ポケカ、デジモン、ゼクス、モンコレ、旧ガンダム・ウォー、ライブオン、ディメンション・ゼロ、シャーマン・キング、カードヒーローなど のシステムを完全再現できるように設計するけど、他に此のTCGの此のシステムは再現希望とか有ったら書け。 マジック:ザ・ギャザリングの全システムを完全に再現するのは無理だから、此れだけは必用だ!って部分のみリクエストしろ。 個vs個、多数乱戦、チームvsチーム、個vsチームを実現し、P2P通信対戦プラグイン有り。 設計思想は 《 RPGツクール 》 が良いかな? 他に、優れたエディター有ったら挙げてみろ。 個人や企業などのベンダーが提示する開発費(見積もり)で折り合えば、発注する。 ↓ エディター群から基本コンセプトを絞り込む(もちろんオリジナルで優れた新ネタが有れば導入する)。 ↓ 遊戯王OCGに関しては、タッグフォース、ADS、デュエルオンラインを発注先ベンダーに研究させる。 バトスピ、ヴァンガ、デュエマなど発売済みゲームソフトが存在してるTCGはベンダーに研究させる。 ↓ 各社TCGを再現するテストプレイ ⇒ 更に改良や修正 + コード記述の仕様書(設計書)を作成。 ↓ 機能制限した下位版を制作しても原則として発売せず + 上位版デュエリ−グ用でサーバー稼動。 ↑ 下位版を仮に発売した場合の改造および商用利用には、別途で当社との契約が必要。 さ〜て、インド人ベンダーと日本人の翻訳担当PGを見つけよっと!ww http://wc2014.2ch.net/test/read.cgi/entrance2/1450555747/-20 Pypiみたいに誰でもパッケージ登録出来るリポジトリが欲しい
>>306 そもそも頻繁に使うようなものでもないし、廃れるという表現は違和感ありますな。 使う人は使っているけど、他人に迷惑をかけるかもしれないので、使用する際は注意して自己責任でやってくれと。 >>309 実用Common Lisp Kindle版も半額だなあ 翔泳社のKindle本が半額セールなんだとか bordeaux-threadsを使って標準出力に"hello" と出力しようとして (bt:make-thread #'(lambda () (sleep 2) (princ "hello"))) としてみたけど、何も出力されなくて、 (bt:make-thread #'(lambda () (sleep 2) (princ "hello" #.*standard-output*))) としたら、出力されました。 どうして*standard-output* で出力できず、 #.*standard-output*を使うと出力されるのでしょうか?
*standard-output* がスペシャル変数だから、クロージャに参照を閉じ込められないせい。 スペシャル変数は、いわゆる動的スコープになる。
>>314 なるほどー。そういうことですか。 それで、#.を使うのですね。 ありがとうございます! 実践common lisp みたいな本を書くリスパーが少ないのはなぜなのでしょうか? リスパーは common lisp をあまり広めたくないということなのでしょうか?
実践common lisp みたいな本を買う人が少ないから
Lispってちょっと勉強でつつく人は多いがガッツリやる人は少ないからね。
>>318 にわかLisperの存在が一番Lisp族言語のユーザに迷惑なんだよねぇ orz haskelとかjs界隈もそうみたいだけど。 良いも悪いも全部ひっくるめてLisp(あるいは言語X)で何かを作ることがすきな人にとっては大迷惑。 にわかが居ないのなんて、死んだ分野だけだよ。 成果出してればノイズは気にならないが、どんな迷惑が有るの?
>>319 山は裾野が広くないと高くはなれんぞ お前は挫折したLisperの屍の上に登れ >>320 scheme派 vs CommonLisp派の罵り合いにpythonとruby好きが横からドロップキックで乱入みたいなblogとかmlとか 黒板人の話とかにわかどうしだけじゃないのが頭痛いと思う 議論の体でそれぞれのメリット/デメリットを天秤に乗せてるだけで、 罵り合いといというわけではないと思うんだが。 ディベートですらない、茶番だろ。
Maximaが使えるcl以上の存在はあるのか? 他言語の数式処理は微妙なのしかない
sbcl にて,TCP ソケットを使ってプロセス間通信するライブラリを 使えるようなりました.これによりバイト列までを送ることは出来るようになったのですが, S 式をどうやって送ればよいか分かりません. S 式や lambda 式をバイト列にエンコード(?)する方法などはあるのでしょうか?
>>327 S式を丸ごと文字列で投げても良くない? 追加: 最近Webサーバの仕事してるんだけど、JSONとかClojureのリテラル表記(datomicの処理)でやりとりするからS式をバイナリ通信(JSONに対応するならBSON)にする意義が出る場面って凄い少ないんだよね
>>328 さんくす. そっか.データのリストなら (format nil ...) で文字列にすればできますね. その線でまずはやってみます. ただ,それだと関数が送れないですね. FUNCTION-LAMBDA-EXPRESSION の出力とかを送るのかな―. 関数は環境がぞろぞろとくっついてるから、シリアライズは容易でない。 動作中のイメージをまるごと移送するのなら出来なくもないと思うけど……、そんなことがやりたいのか?
Windows環境でClozure CLのホームディレクトリは%USERPROFILE%なのでEmacsの起動バッチで %USERPROFILE%と%HOME%を独自に設定して起動してSlimeを使うとHyperSpecが引けなくなってしまう 何か回避策無いですかね〜。超不便だわ
ChromeじゃなくてIEを標準ブラウザにしたら動いたw
browse-url-generic-programでChromeのフルパス指定してやって一見落着じゃ LispよりEmacsのがハードル高いわ
離れすぎているからどこが同じでどこが違うとかいうのはいちいち列挙できへんわ。 Haskell っぽい部分だってそりゃあるだろうし、場合によっては Haskell 風のコードをそのまま持ち込めることだってある。 でも、やっぱり全然違うわ。
Haskellでmaxima以上に便利な数式処理ソフトあります?
バッチの中だけでも%USERPROFILE%を変えるのは副作用が大きすぎて駄目じゃ。 全然、一見落着じゃないやんけ orz
なぜか関数型ってくくり方でまとめられるときがあるけどまあ全然違うわな。
Windowsでスタンドアローンアプリ化するとコンソールアプリになるけど コンソールウインドウ消す方法はないの? GUI画面のとき邪魔
SBCLにはGUIオプションがあった。 他のには無いっぽいな。 このスレには人が居ないんか?
こうなりゃ昔めんどうみた平手の造酒んとこでも行くか
初心者でLisp全然まだ分かってなくて、本を読みながら色々実験しているんだけど、 socketで使ってunicodeのデータをやり取りしようとしたら、どうしても文字化けしちゃって困った。 :external-formatとかいろいろ試したけどダメだった。 結局、flexi-streamsってライブラリ使ったらなんとかなったんだけど、こんなことでも外部のライブラリに頼らないといけないの? それとも僕がアホなだけなのかしら?もっといい方法あるのかな。lispworksがおかしいだけか? でも、プログラミング自体初心者なのにやりたいことは実現できちゃったのはビックリ。 replで実験しながらできるのがいいね。
>>345 文字コードがらみは純粋なdata streamとは別の領域なんで汎用言語全部が持ってる病の一種なのでどもならんのですよ。 slime必須な開発環境がネックかもね まあLispBoxまんま使えば良いけど
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、 BitTorrentがオープンソースで開発されています 言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか? Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします https://twitter.com/Lyrise_al ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw The Covenant Project 概要 Covenantは、純粋P2Pのファイル共有ソフトです 目的 インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します 特徴 Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW) 接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です DHTにはKademlia + コネクションプールを使用します UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります) 検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません ; closによるオブジェクト指向を勉強している最中だけど、Javaやc++と違って、プライベートな変数や関数とかないの? そうなると、あまり弄って欲しくない変数とかを弄るような危ないコードとか書けちゃうけど、それはプログラマーの裁量に任されているの?
closは実行時になんでも弄れる仕組みになっているので隠してもしょうがない その代わりJavaやC++とは比較にならないほど動的 お勉強するなら遅延バインディングなどに代表される動的さを学ぶのが有益 (定義時に存在しないクラスのスロットをごにょごにょするなど)
EmacsにはCLOSエミュのeieioがあるけどそれだとプライベートメンバーが作れる 当然eieioの場合はインスタンスは配列だから無理矢理いじろうとすれば可能だけど うっかり触る事は出来なくなる (slot-valueでアクセス出来なくなるとかsetfで書き込めないとか)
>>357 ちゃんと機能してるよ :reader :accessor 経由だとどこでもアクセス出来る それらを定義しないで slot-value 経由でアクセスすると 定義された class 用の defmedhod 内じゃないとエラーになる >>358 は間違えた slot-value 経由でも defmethod 内ならどんな class 用のでもアクセス出来ちゃってた… >>357 のリンク先の通りだった もしかしたら次のバージョンなら直ってるのかもしれない Common Lispの規格を進化させようと日本人が頑張ってるサイトがあった気がしたけど全く見つからない 教えてくれ
身も蓋もないけど コモン規格なんだから 枯れてた方が良いんじゃねーの
この機能が足りないって思ったら ライブラリ提供すればいいんだよ 規格を変えるってのは よほど説得力がないと難しい
Common Lispのこの関数はこうすべきだったとか色々書いてて面白かったが ふと思い出してまた見たくなったけどググっても全然出てこなくて余計に見たくなってる… もう少し探してみるよ slideshareだったかな…
CommonLisp好きだけど未だに関数をfuncallで呼ばないとイケナイ名前空間の扱いだけは理解できない。 なんで分けたんだろうって解説どこかにないかな?
>>366 物事をカテゴライズして名前空間分けたいってニーズは別に変じゃない。 そういうの他の言語でもあるよね。 察するに言語設計者自信がその時偶々欲しかったのが入っちゃうんじないかな? 動詞と名詞を兼ねる単語が多すぎる英語にそもそもの問題があるやも list然りmap然り
質問だけどAllegro CLで実行ファイルを作成するとサイズはどれぐらいになる? SBCLだと40MB超えるけどAllegro CLだとどうなるか気になったので
よく見たらAllegroで実行ファイルを作成出来るのはEnterprise版以上だった そもそもEnterprise版を使った人がいなさそうだな…
それは、「お前ら貧乏人ばかりだな」と言ってるのと同じだな。
>>372 いや、流石にAllegro Enterprise を個人で買うのは滅多居ないだろw つかオンライン販売も小売りもとりあえずsalesへメールからってくらいだし、そもそも買ってる人自体特定業種のプロだけじゃねぇの? 数理システムだと社内で使ってるんじゃないの 中の人はこのスレ見てないか
Professionalだと6万ぐらいだから個人でも買えなくもないけど Enterpriseはいくらすんだろ? 数十万はしそうだけど仕事で使うんなら払える額でもあるな
>>375 まじ6万?! Lispworksより安いような。 >>376 Professinal版って32ビット版しかないかじゃないか? LispWorksの実行ファイル書き出しは最小で6.5-7.5MBぐらいからみたいだからかなりいいな けど64bit版がfor Hobby Usersとか書いてるくせに$1,500とか高いし…
ECL使った事ないけど実行ファイルを作成したら普通にC言語で作ったぐらいのサイズになるんだろうね あと似たようなのにClaspがあるけど埋め込みするには今後はこっちが主流になるかな
Common Lispの処理系がわざとバグを入れてmaximaが動かなくなるように仕向けてるようなのを見つけたのだけど Abclとclispはgnome3と同じ状態になってる?
maximaは主に古い仕様のcommonlispで動く 処理系が古い仕様のサポートをやめることをmaxima切り捨ての陰謀とするなら そうなんじゃないの maximaが合せるのが筋だろ
互換性を保てないならcommonなんて名乗らないでほしい
sourceforgeが死んでてMaximaのサイトにアクセス出来んぞ… SBCLのサイトにもアクセス出来ないしCL界隈はsourceforgeに依存してるとこが多いな
フリーソフト作る目的でAllegro CLのAcademic版のEnterprise版買った方いませんか? 非商用目的で64bit版の実行ファイルを作れるとなると、Enterprise版でAcademic版を買うのがよいのかなと。 (そもそも、条件にマッチしてるかわかってないですが) Academic版ならEnterpriseでも意外にお手頃価格で買えたりしないかな? そういえば、Allegro CLの日本代理店って撤退したんですかね? HPが消えてるのか、アクセスできないですね。
>>388 Allegroはなぁ、ネタに値段書いていない銀座の寿司屋のイメージが 何千桁もあるbignumを適当な所に小数点を打ったり10桁毎にスペースを入れたり 100桁毎に改行して表示したいけど、formatでやる方法があったら教えてくれ
>> 390 ない. 調べるよりプログラム書いた方がはやい.loopマクロで5行位で書ける. どうしてもformatつかうなら自分で書いてformatの~/で呼べば?
>>390 (format t "~,,' ,10:D" 222232244629420445529739893461909967206666939096499764990979600) 222 2322446294 2044552973 9893461909 9672066669 3909649976 4990979600 > 2.3.1 ~D ― Decimal > arg の消費: 1個 > パラメータ: ~ mincol , padchar , commachar , comma-interval D (中略) > ` : ’ で修飾すると,下から comma-interval 桁ごとに commachar で指定された文字で数字を区切る ( comma-interval のデフォルトは3, commachar のデフォルトは ` , ’ ) . http://super.para.media.kyoto-u.ac.jp/ ~tasuku/format-func.html 上の例だと commachar は空白、comma-interval は 10、他のパラメータは無し 文字をパラメータにする場合その文字の頭に単引用符 ' を付けて表す 改行もOK (format t "~,,' ,1:D" 123) 1 2 3 返答どうも! >>391 formatのドキュメント見ても無さそうだったから聞いてみたけど、やっぱりないんだね… 素直にloopでやることにする >>392 そうか、カンマをスペースにすれば10桁区切りは出来るのか 100桁目を改行に出来れば最高だが、あまり大きくないbignumならこれで十分か とりあえずありがとう 学習用にC++で書いた楕円曲線暗号のデバッグの時にBignum何度も目視したの思い出してちと鬱が入るなぁ
日本人コモンリスパーで有名な人って誰? 竹内センセーと苫米地ハカセ以外で!
竹内センセーと苫米地ハカセは国際コモンリスパーとしての認知度は低いヨ もちろんtakの竹内センセーは知られているけどコモンリスパーじゃないネ トマベチ? ダレ? fukamachi ,kuroda は広く知られているヨ
何がまずいのかわからん。 誰か教えて。 (defun f (x) (* 2 x)) (defun g (y z) (y z)) (g f 3) *** - SYSTEM::READ-EVAL-PRINT: variable F has no value The following restarts are available: USE-VALUE :R1 Input a value to be used instead of F. STORE-VALUE :R2 Input a new value for F. ABORT :R3 Abort main loop
Scheme 系だと (define (f x) (* x 2)) (define (g y z) (y z)) (g f 3) 6 って書けるんだね。
関数型のブームは来てるけど HaskellとかScalaに押されてない?
GNU makeやgdbにguileがリンクされるようになったよ もう少しの辛抱や
Common Lispはマルチパラダイムの言語だ goto(go)すら存在する
>>405 goはマッカーシーのlispからあるけどお。すらってなにい? >>406 Common LispのスレでCommon Lispと言って何か問題あるか? >>366 Steeleが互換性考えて別にしたけど やっぱり一緒にしとけばよかったーと後に述懐していた その代わりCommon Lispはlistとかstringという変数名を定義出来る Schemeの場合lstとかlsって変数名にせざるを得ない あとapplyの方が使用頻度が高い気がするがSchemeでも普通に使うわけだから funcallを使うのは一貫性があるとも言える
今となっては後の祭りだし慣れないしとあるが、lisp-1にするなら最初の関数名をもっと考えた方が良かったような。 listじゃなくてmklistとかさ。
0や""はtrueなのに'()だけがfalseになるのが美しくないからだろう C言語の0みたいに特定の値が自動的にfalseになるのは古い言語だからだな
いずれの仕様であっても特に美しいとは思わんな。 決め事でしか無いように思う。
デフォルトコンストラクタと等しい値はすべてfalseにしてしまえ。
ふと、このスレを見つけたので質問します。 「Land of Lisp」を参考に、CLISPでCommonLisp勉強してるんですが、LEPL じゃなくてLispのコードをエディタで書いて一度に実行させるなんて ことはできるんでしょうか? 出来るなら方法を教えてください。参考サイトなどでも構いません。
>>417 の書き込みの訂正 LEPLじゃなくてREPLです。 うちはSBCLだけど、たぶんloadでできる $ cat hoge.lisp (defun twice (f x) (funcall f (funcall f x))) (defun dbl (x) (* x 2)) $ sbcl This is SBCL 1.3.6, an implementation of ANSI Common Lisp. (略) * (load "hoge") T * (twice #'dbl 3) 12
>>419 おおおお 出来ました!!! サンプルプログラムまで書いていただきありがとうございます。 Lispを初めて日が浅いのですが、とても分かりやすかったです。 clisp の場合は clisp a.lisp という風にファイル名を指定するだけでも実行できるよ この場合REPLとは異なり、特に何もしなくても自動的に終了する sbcl には同様のことをする --script オプションがある
>>421 なるほど、そういう方法もあるんですね。参考になります。 多分emacsでSLIME使うのが一番捗る。ある程度やって、もっと環境良くしたいと思ったら導入してみるといい ファイルに書きなぐって一部だけ評価するとかできる
(defparameter param #\a) を生成するマクロ (defmacro ch! (ch) `(defparameter param #\,ch)) が、動かないのはなぜでしょうか? 教えて下さい。
>>425 面白い。426のいうとおり リードマクロがマクロの展開より先に展開されるのがうまく動かない理由。 (defmacro ch! (ch) (read-from-string (format nil 424です。 >>426 ご返答ありがとうございます。 「入力マクロを何と心得ておる」 リードマクロの事でしたら不勉強でした。 1文字づつ地を這う様なカスタマイズに思えて lispっぽさが感じられず読む気が無くなるんです。 >>427 書きかけの続きを ぜひ読みたいです。おねがいします。 macbookのOSX10.6で iterm上のvimで選択したS式をscreenを介して もう一つのitermで動くsbcl(又はclisp)に評価、 出力させるのを目標にしています。 なにか知っている事があればよろしくおねがいします。 独り言だが ClojureとClozure CLってべつものなのか Clozure CLはjava関係ないのね
conditinのerrorクラスにformat-controlとformat-argumentがないのは何んでなんでしょうか? simple-conditinとかにはあるのに
生まれて初めてLISPをやってみようと思い、CygwinのCLISPを入れて見たのだが、プログラムを保存する方法が特にないのは驚いた。 dribbleでインタプリタのコマンドライン履歴を保存するか、(EXT:SAVEINITMEM)でインタプリタのメモリイメージを保存するくらいしかできないみたい。 あるいは事前にテキストで書いておくか。 他のLISP処理系もこんなものなの? ヒューレットパッカードRPL言語を少しだけ使ったことがあるけど、あっちは保存がちゃんと考えられていた。
>>437 えっ ちょっと待って 今ラジカセ用意するから...間違えてLOADって打たないでね >>436 RPLだと関数も変数も必ずファイルとして存在する。 RPLの祖先のForthも同じかもしれない。 ほしいのは、emacs+slime環境? あるいはaclとかlispworks
REPL環境じゃなくて内蔵エディタみたいなのを期待してたんだろう 確かにメモ帳程度のでも内蔵されてれば便利だとは思う 特に初学者の人とか。いきなりEmacsは敷居が高い
>>442 emacs環境だとLispよりもemacsの勉強になってしまうからなあ >>442 >>443 同意、最初からEmacsは難しすぎる LispよりEmacsの方が難しいくらい >>442 emacsのlispってemacsのカスタマイズ用途なのでは? アプリ作成用のlispがまだあるのかどうかは知らないが >>447 その情報のソースってどこかにある? CLISP自体かなり前から更新されてなかったから終わったと言っても今更感があるけど… >>449 長年更新していないので、オワタ可能性は高くね? Lispの仕事ってまだあるのだろうか? 古いシステムの保守程度?
どっかの会社で、common lispでやっているところがあったはず 完全に廃れた感じはしないな
Lispと言えば、研究用途かWebサーバーで使うようなイメージしかないわ
お前の抱えるイメージなんかに誰か興味を持つと思ったのか?
>>456 でも実際に何に使われているんだ? 研究専用言語だと思っていたのだが。 >>456 みたいなBOTに使われているという実例 LispはUNIX以外で実用的に使うのは無理なのかねえ?
lemのgithubのページでインストールにros install cxxxr/lemしろと書いてあって roswell使うのは分かるけどroswellってどっからインストールしてんの? cxxxr/lemという引数を見る限りgithubからインストールしてるような気がするけど
roswellどのサーバーにアクセスするとか一切ドキュメントに書いてない こんな糞アプリ使えるかよ
ここで聞いてももう駄目 githubのissueかtwitterかredditのr/lisp_jaかja.stackoverflowのlispタグのどれかが良い
>>404 言語組み込み解禁で誰かがluaに変えると予想 わかる人いたら教えて下さい。 iterm2でrepl(sbcl)を最初から起動させようと replというプロファイルを作り .bachrcに if [ "$ITERM_PROFILE" = "repl" ]; then sbcl fi と書くと、たしかにsbclを実行するのですが 以下のメッセージが出て起動しません。 fatal error encountered in SBCL pid 3042: can't find core file at /usr/local/lib/sbcl//sbcl.core どうしたら良いのでしょうか。 ちなみに再度sbclと入力するといつも通り起動します。
コマンドで呼んでいるsbclとスクリプトで呼び出しているsbclが違うんじゃないか? パスを確認すると良いとおもう sbcl --core コアのパス/sbcl.core と明示しても解決するかもしれない
Common lispからpythonの特にnumpy関係のライブラリ使う方法ないのでしょうか?
>>474 なんでcommonlispからソレが必要になるのかがまずわからんがrationalでは扱えないくらいでかい桁数の浮動小数値なの? Pythonだとpandasとかにある関数がないからpythonをffiで呼べないとclでdeel learningきついなあ Sparse matrix計算も出来ないみたいだし
Cのプログラムがcuda使うと100倍速くなるのに cl-cudaマクロがせいぜい7倍ぐらいしか速くならないのは何故?
>>477 行列のかけ算とかだとopenblas(マルチコアCPU)とcublas(CUDA、GPU一枚)で俺の環境だと7倍程度の差しかないし、多分比較対象のCプログラムの書き方が相当まずいだけだと思う >>476 密行列はLLA、MGL-MATがopenblas/MKL/cuBLASのラッパーになってる。 疎行列なら現状ラッパーが多分ないのでCFFIでcuSPARSEへのバインディングを書こう。 全結合のディープラーニングならMGLでCommon Lispのみでできる。 PythonのClojureライクなLisp方言ならHy(hylang)がある。 Pythonのライブラリが直接使いたいならこれを使えばいい。 初心者です ハマってしまったので助けて下さい! ファイルを読み込んで a=abcのような行を (defparameter *a* 'abc)のようにするマクロなのですが (readconfig "filename") だとうまくいくのですが (readconfig (concatenate 'string "file" "name"))のように呼び出しても引数が評価されずにそのまま渡ってしまいます。 (defmacro readconfig (filename) `(progn ,@(loop for i in (with-open-file (s filename :direction :input :external-format :utf-8) (loop :for line := (read-line s nil) :while line :collect line)) collect (let* ((l (split-sequence:split-sequence #\= i)) (a (read-from-string (concatenate 'string "*" (car l) "*"))) (b (second l))) `(defparameter ,a (read-from-string ,b))))))
>>480 macroexpand で展開してみた? >>482 concatenateの方はエラーがでます 普通に文字列を渡せばうまくいくのですが >>480 どうしてマクロにしたの?初心者だから? >>484 関数の中で(eval `(defparameter ,変数 ,シンボル))とすると変数がありませんというエラーがでてきて 普通にdefparameterしようとしても変数定義はされないのでマクロでやるしかないと思いました。 (eval `(defparameter ,変数 ,文字列))だとうまくいきますね 問題が解決できました evalはあまり使っちゃいけない的なことが言われてたと思うので なんとなく気が引けてマクロを使っちゃった感じです 初心者の質問に付き合ってくださりありがとうございました!
OpenCVの超解像計算プログラムは cpuとgpuで100倍近く速度に差があるよ
typed racketみたいな型推論をcommon lispでする方法ないのでしょうか?
>>488 common lispのコンパイラでも型推論くらいするの知ってるか? それがどう駄目なのか,どうしたいのかをまず書けよ. sbclのtheのdescribeに相当する機能がtyped racketだとreplからしか使えないような意地悪されてるのでcommon lispでもそうかと思った
>>490 > sbclのtheのdescribe が意味するところが分からない. Common lispでcのプログラムコード読み込んで 関数宣言一覧取り出して、ヘッダーファイル生成するような パーサージェネレーターのサンプルコードどこかないでしょうか c言語の解析するサンプルコードなら他のでも良いです
誰か知っていれば教えてほしいのですが LispWorks 7.0 のmacOS版って日本語表示や日本語入力問題なく できるようになっていますか? LispWorks 6.1 Personalを使っているのですが日本語入力すると??に文字が 変わってしまうみたいなので。
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方 役に立つかもしれません グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』 HSR58
ところでlabelsって関数の名前の由来って何? しっくりこない
>>477 そもそもCLはインタプリタだからGPU使っても7倍程度しか速度出ないのは当たり前だろ。 >>500 clはコンパイラ言語だよ.仕様上インタプリタ実装も許容されているだけ こないだ迄Windows10の64bit版ではDEPの絡みで動かないと思ってた、SBCL版のMaximaが、 今試してみたらあっさり動いてしまいました。 sf.netに置いてあったインストーラでインストールした直後はCLISP版しか駄目だった 筈なんですが…。 うちではWindows10 Homeを使ってますが、皆様の処ではどうでしょうか?
SBCL自体を別途インストールしたのが効いてるのかも知れないなぁ…。
Lispってwebフレームワークありますか? 一通りの機能のあるブログを作ったり出来るような
質問です。 Lispで書かれたLisp処理系はありますか?
roswellについての質問なんですが ros init ファイル名 としたときできるファイルの中身の (progn ;;init forms (ros:ensure-asdf) ;;#+quicklisp (ql:quickload '() :silent t) ) って何ですか? (ros:ensure-asdf)特にこれ
>>509 そんな事俺に聞かれても知るわけないやろ頭おかしいんか? Common LispからC言語のモジュールを呼ぶ方法は簡単に見つかるのですが C言語からCommon Lispプログラムを実行する方法が見つかりません。 GaucheならC言語からインタープリタを起動できるみたいなのですがCommonLispにはないのでしょうか?
Lispでグラフィカルにステップ実行できる方法ってEmacsでSLIMEやるしかないですか? LispのためだけにEmacs覚えるのは勘弁してほしいので VimでSlimv入れてやってみましたがGDBのようなステップ実行しか出来ませんでした。
すみません、勘違いでした。 edebugのように現在実行している行がわかるステッパ?が利用したいのですが edebug以外にないでしょうか?
Lispでドルマークって特別な意味ありますかね?正規表現とかナシで
Land of Lisp、文字が小さくて読めない…(´;ω;`)
だれかChocorateyにRoswell追加してクレメンス
Windows版Roswellでinstallコマンド出来ている方はいますか? sbcl-binのような末尾にbinがついて、ビルドが不要なものはインストールできるのですが それ以外だと、msys2の有無にかかわらず~/.roswell以下にmsys2がインストールされて それが全くまともに動作せず何もインストールできません。
最近Lispを勉強し始めた超初心者です。 関数型言語も初めてです。 末尾再帰の最適化をするとコンパイラがループにしてくれるので効率がいい、の説明が腑に落ちません。 再帰は読むのも書くのもループより高コストだと思いますが、 その結果がループ並みに早くなる、では何のために再帰にするのかわかりません。 なにか他にメリットが有るのでしょうか。
>>524 関数呼出しっていうのは、一般的なコンピュータの中でどのような 動作をするかというとその実態はジャンプとスタック操作でしかない。 再帰であろうとループであろうと中ではただジャンプしてるだけだよ。 (実際にはリソースの管理とかが一体化してるのでそう単純でもないんだけど。) 再帰というのがスタック操作をするループであると捉えるか、 ループというのがスタック操作を省略できる再帰であると捉えるのかは 別の側面から見ているというだけで同じことを言ってる。 どっちを軸するかという説明の仕方の違いってだけ。 >>524 が聞きたいのは、それを再帰として書くことの利点だと思う。 読み書きのコストは慣れの問題で、分野によっては再帰で書くほうが慣れてるんだよ。 関数型言語の界隈は数学寄りの人が多いんだけど、数学は再帰で書くことが多いんだ。 関数呼んでるだけだから、ループ用の特別な構文がいらないってのもある。 これはどっちかっていうと言語の規格とかそっち側の都合だけど。 あ〜、そっか。 Common Lisp 的にはそこまで積極的に何もかも (明示的に) 再帰で書くスタイルを推奨しているわけではないし、 ループ的に書く方が読みやすければそう書いてもいいんだが、 他の言語に比べれば再帰を理解している必要は有るので、 チュートリアルの類では過剰に再帰を推してる感じがするかも。
ループはiの様なループ変数が必要だけど、これは変数への破壊的代入または再代入になる 関数型プログラミングはそれを嫌う 末尾呼び出しの最適化を前提に書けば破壊的代入無しにループが書ける
526 にも書いてるけど、変数の破壊的代入と再帰と末尾呼び出しの最適化はそれぞれ別々のものだと思うけどね (let ((i 10) (closures nil)) (labels ((iter () (if (zerop i) nil (progn (push (lambda () i) closures) (decf i) (iter))))) (iter) (mapcar #'funcall closures))) ⇒ (0 0 0 0 0 0 0 0 0 0) (let ((i 10) (closures nil)) (dotimes (i i) (let ((i i)) (push (lambda () i) closures))) (mapcar #'funcall closures)) ⇒ (9 8 7 6 5 4 3 2 1 0)
>>530 上と下が随分違うコードで比較して何が言いたいのかよく分からん… 上のコードは (let ((i 10)) (labels ((iter (n closures) (if (zerop n) closures (iter (1- n) (cons (lambda () i) closures))))) (mapcar #'funcall (iter i nil)))) ⇒ (10 10 10 10 10 10 10 10 10 10) と書けば破壊的代入を避けてループが書ける closuresも破壊的代入してたけど、Common Lispだと簡単にそういうコードを書いてしまう 結局破壊的代入無しにループ書くには再起呼び出しが必須と言うだけだ 再起呼び出しは簡単にスタックオーバーフローするから末尾呼び出しの最適化は前提でしょ すげぇ歴史がある言語のわりに全然ドキュメントもライブラリもないっすね…
ドキュメントがまだないのはまだ始ってないから。 もう少し待て。いつか必ずブームがくるから。
lisp勉強中だが他言語しばらく触った後lispに戻ってくるとコード見るだけで笑えてくる
Juliaって何かと思ったら新しい言語か JuliaもそうだけどASTのレベルを構築出来るマクロをLisp-like macroって言うのは違うだろうと思う Lispのマクロはコードの見た目を変更するという至極単純で唯一無二のものだからな
> Lispのマクロはコードの見た目を変更するという至極単純で唯一無二のものだからな って言うのは違うだろうと思う
LISP 的なマクロというのは 「プログラムはリストであり、リスト操作によってプログラムを変形する」 と私は捉えているので、前提となる「プログラムはリスト」の部分がないと やっぱりちょっと LISP 的とは言えないかな〜とは思う。 ただ、各言語の構文木の表現がリストと言えるかどうかはかなり微妙だし、 Scheme のように明らかに LISP 系の言語でもそのマクロ機構 (syntax-rules) がリスト操作 と呼べる範疇なのかどうかは人によって感覚が違うかもしれないというのもわかるので、 ふんわりと捉えてあげてもいいんじゃないかと。
Lispってカッコだらけで視認性悪いのに何で最後に)))))って閉じるコーディングスタイルがスタンダードっぽいの? (some (some ) ) こうやってネストと閉じカッコを対応させておけば閉じ忘れしにくくて視認性も良いと思うのだが
Lisperはカッコを見ずにインデントを見る カッコだけの行が有るとかえって分かりにくくなる EmacsならRainbowDelemitter使うとカッコの輝度が下がって目障りでもなくなる
slime の C-c C-] とか一気に全部かっこを閉じるコマンドを使うから、閉じ忘れとか気にしないなあ
XMLのタグみたいなもんだな。XMLがそれを理由に廃れたことも含めて。
>>547 > カッコだけの行が有るとかえって分かりにくくなる 完全にカッコ見とるやんw カッコつけんなエアプw >>550 カッコだけの行が有るとインデントが分かりにくくなるという意味だが、わざわざ書かないと分からんか? (a)))) の部分のaだけ頻繁にコメントする時は不便に感じる ↓ (a) ))) にしていいよね?
わかる。 (hoge (fuga (piyo))) ; ここにコメント書くと、式全体を閉じるということに書いてる気がする (hoge (fuga (piyo) ; こう書くと、 (piyo) 式にだけコメント書いてる気がする ))
>>553 Emacsだと(a)))で(a)だけ選択してM-;すると自動でカッコがよけて (a) )) になるから、そういう状況にはしょっちゅうなる C系の言語から来ると最初は閉じ括弧の行がないのが気になるかもしれないが すぐ慣れてむしろ邪魔になるゾ というか今どきのスクリプト言語みんなそうじゃないか
かっこの話題になるとわらわら湧いてくる陸リスパーさん達w
>>559 なんや急に本物て?偽物の自覚でもあったんかおまえw にわか認定したい奴が沸いてんのかね Lisperなんてカッコに嫌悪感がなければそんなに労せずなれると思うけどね
>>562 そのセリフはせめてリスパーになってから言ったらどおや?陸リスパーさんw 陸リスパーの定義を述べよ。 リスパーの定義を述べよ。
>>563 陸リスパーはリスパーじゃないらしいが、意味が分からんw 取り敢えず知能指数が75程度かね defmacroだとdestructuring bind?が使えて (defmacro test ((a b &optional c) d) (print (list a b c d)) nil) (test (1 2) 4) => (1 2 NIL 4) みたいに書けるけど、&optionalや&keyの後に書こうとしてもSBCLだとdefmacroを評価した時点でエラーになる &restの後ろには一応書けるっぽい 必須引数と&restの所には書けるけど、&optionalと&keyの所には書けないという認識で良いのか? もし&optionalの所に書けるなら書き方を教えてくれ
>>574 この記事見たらちゃんと書けることが分かった 自分が前に試した時は何か書き方を間違っていたようだ 取り敢えずモヤモヤが晴れたんで助かりました コードを C や perl や Lisp や python に書き換えて速度比べていたんですが perl に速度負けしたのは、ちゃんと Lisp 書けるようになれば逆転できますかね? 処理系は CCL Version 1.11.5/v1.11.5 (WindowsX8632) perl に負けるのは悔しいんですよ
早い まだリファクタリングしてないのにこの速さ ありがとうございます。ここまで scbl が速いとは 0.331 C 0.616 scbl 0.749 perl 0.943 CCL 2.912 python
CとPerlが2倍程度しか違わないとかどんなコードか気になる 普通二桁違ってもおかしくない
最適化コンパイルしているか疑問 もっと早くなる気がする
gcc でも gcc -Ofast -march=native でも このコードは早さ変らなかった Cをもっと早く走らせる書きかたはあると思う しかしながら当面の目標は、Lispなどで 早く走るコードに仕上げることだ
squeakやpharoみたいな完全フリーなIDEってないの?
Emacs+Slimeで困ってないとかそういうのじゃなくて
IDEを強調するならフリーなやつは存在しないんじゃない 有償ならLispWorksとかあるけど
squeakやpharoはフリーなのにLispはなんで誰もフリーで作らないの?
じゃあ世界中のLispプログラマは丘リスパーなの?
だからEmacs+slimeで事足りてるって言ってんだろ 頭悪いの?
マジアスペなのか何かのギャグで言ってるのかわかんないよw それはわかってるし、そんなことは訊いてないんですけどw
漏れには ID:9d3EeJ1d がアスペに観える
質問はこれね、答えはyes/noしかありません おk? 583 自分:デフォルトの名無しさん[] 投稿日:2019/09/21(土) 00:38:07.12 ID:xRjuzSxf squeakやpharoみたいな完全フリーなIDEってないの? 584 自分:デフォルトの名無しさん[sage] 投稿日:2019/09/21(土) 00:44:47.91 ID:9d3EeJ1d [1/4] Emacs+Slimeで困ってないとかそういうのじゃなくて
64bitのときって引数6個まではスタック使わずにレジスタ渡しなんだな
非LISPマシン(≒汎用CPU)上でのLISP処理系でCDRコーディングが流行らないのって何で?
CDRコーディングはメモリを節約するためのものだけど、今時そんな事する必要がないからだろ
結局早く走らせようとすると面倒なコードにしかならなかった思い出
CDRコーディングでメモリ参照の局所性などは向上するのでむしろ現代のCPUで効果があるという話もある CommonLispの場合,リストはイミュータブルでないので書き換えが発生すると間接参照に置き換わるためどこまで旨味があるかだが
たかがリストの参照に条件分岐が必要になるから、むしろ現代のCPUには速度的に致命的なペナルティが有る Lispはリストの使い勝手が良いからつい何でも使い勝ちだけど、ある程度以上の可変長のデータには可変長配列を使うべきだろう
先生質問です!モダーンな言語に慣れた身としては、括弧よりもシンボルが大文字なことが気になります! SQLと一緒で、なんだか怒られているような、コードに怒りの感情がくっついているような感触がします!
クラス名とインスタンス名がどっちも先頭小文字文化で区別がつかないことや カプセル化を事実上放棄していることについても触れてあげてね
>>604 カプセル化を放棄してるってどう言う事? プライベート変数の事言ってるなら可能だろ setf 万能な感じだけど オブジェクトの外からsetfしたら書きかえられたり なんてことはないよな?
cl4py で ~/.roswell/local-projects のパッケージ読む方法がわからないです 内部的には sbcl --script をpythonから実行しているので, これと同じことを ros runでできれば良いはず
~/.roswell/local-projects ~/.quicklisp/local-projects ~/quicklisp/local-projects 全部統一したい.おすすめの設定はありませんでしょうか?
Dex:get でURL エンコードは自分で変換するしかないのでしょうか http postでHmacなる暗号化かけてpostする方法がわかりまでん
実践CLが適価で出ていたので次に読もうということでポチりました それを引き取りに行きましたところ ふらーっと棚を見たらPAIPとLOLとガウディ本が適価で置いてありやがりまして 全部いっちゃいました>< まだGentle Guideの最初の方読んでるところだとういうのに…どうすんだこれ
>>620 なんだこれw こんなものが有ったのか これを最後までこなせばマジでLispマスターかもな 知らんけどw オレがLispマスターになるために、誰かHyperspecを読みやすい日本語に翻訳してくれませんか
はじめてなら先に Erlang やれ Elixir じゃなくて Erlang な
そういうわけでGNUのEmacs Lispプログラミング入門読み始めたのだ
>>601 基本はイミュータブルって事にしておいて、書き換えなきゃならなくなった時は 都度ミュータブルに変更(≒実際にはミュータブルに見える)とかは無し? コピーオンライトっていうもっと簡単な用語があった orz
quicklispの動作確認のためのhollow worldしかない単純なパッケージってないのでしょうか?
>>587 smalltalkは良くも悪くもIDE込みの言語だからな。 >>631 「動作確認」が何を意味するのか微妙だけど・・ Quicklisp client が入っているかどうかだけなら、REPL で (ql:client-version) とか打って "2019-02-16" とか返ってくるのかを見ればよさそう。 Pattern matchで一番使われているのはoptimaなんです? 速度なくて良いので、もっと実装が単純なの探してます それからquicklispにonlispのコードまとまってるパッケージないですか
実装が単純ってのを基準にライブラリ選定するやついるか? quicklispに教材は集積されてないんじゃないの.知らんけど
コモンリスプの最初の教科書として『これがLispだ』を読み始めた 最初の方で、読み進むためのツールとして「pp」というマクロが紹介されてるんだけど SBCLで動かなくて困ってます 2バージョン紹介されてるんだけど、どこをどうしたら動きますか? CL-USER> (defmacro pp (fun) (list 'pprint (list 'quote (append (list 'defun fun) (cdr (symbol-function fun)))))) CL-USER> (defmacro pp (fun) (list 'quote (list 'defun fun (cadr (symbol-function fun)) (caddr (caddr (symbol-function fun)))))) ワーニングのメッセージもコピペしたほうが良いですか?
on lispのコードはポール・グレアムのサイトから落とせるよ
Macro expandの結果がslimeだと #1= みたいのなくて、全部代入されて展開されるのに コマンドラインからだと、ところどころ出てくる この代入みたいなの出てこないような設定出来ないのでしょうか
>>636 ここを (symbol-function fun) こうすると動きます (function-lambda-expression (symbol-function fun)) >>638 *print-circle* を nil にするといいはず (setf *print-circle* nil) …動いたは動いたけど、目的の動作ではないような… 関数定義のプリティプリントをするマクロなんですが…
>>642 残念ながら、必ずしも function-lambda-expression で「関数定義」を得られるとは限りません。 nil を返す場合もあると言語仕様で定められています: > The primary value, lambda-expression, is function's defining lambda expression, or nil if the information is not available. http://www.lispworks.com/documentation/HyperSpec/Body/f_fn_lam.htm SBCLの場合、ユーザー定義関数なら期待する結果になるようですが、 組込関数に対しては nil を返す実装がほとんどのようです(手元の処理系はすべて nil を返してきました)。 clhsの読み方がわかんないんだけどpprintは代用にならないのかな
>>529 ループで書くと変数への再代入が必要になるから〜 って関数型言語推しの文脈でよく言うけど それが言うほど問題になる場面ってどれ位あるかね? それにRubyのeachとかイテレータだと ループ変数は隠蔽されててあまり使わないし ますますそんな実害はない気がしてくる >>542 Lispのプログラム自体もリストでしかないから 処理とデータの区別が必要なくて メタプログラミングがしやすいって理屈は分かってる 問題はメタプロの生産性が本当にメチャクチャ高いかどうか? Lisp信者(というか教祖の)ポールグレアムとかはそう言ってるけど ライブラリやドキュメントの充実の方が生産性上げる気がしてる >>545 そうすると行数が増えるのがイヤなんだろうと思う 最後にカッコが重なるのはオレもイヤだが >>576 今どきもう処理速度より 人間が読み書きする速度の方が重要だろ? でそれはPythonの方が早そうな気がするけど >>583 >>587 Emacsってフリーソフトの草分けじゃん? エディタだけどIDEに近いんじゃないの? 欲しい機能はLispで自力実装するになるけど >>603 個人的にはOOPやろうとすると A.bにならないことが気になるわ >>632 SmalltalkはあのIDEを使うために 言語も学ぶみたいな感じだからな >>647 > ライブラリやドキュメントの充実の方が生産性上げる気がしてる ドンキ行けばなんでも売ってるから買えば済むけどそれは生産性高いのか ドキュメントの充実とかいうのも所詮Qiitaにコピペできる手順が書いてあるかどうかだろ > 問題はメタプロの生産性が本当にメチャクチャ高いかどうか? 最近のわかりやすい事例でいうとライブラリやドキュメントが充実してないような量子コンピューティングでlisp使われてるわな d-waveやrigetti ゼロスタートでの生産性高いから採用されてんじゃないの 昔からlispはそういうところで使われてきたんだよな (list 1 2 3) = '( 1 2 3) ?
>>653 >ドンキ行けばなんでも売ってるから >買えば済むけどそれは生産性高いのか どうでもいいけど PHPってドンキみたいな雰囲気だよな 実践common lispの古本買ったのですが LispBox落としてきて本に載ってるEmacs?Slime?わかんないけどショートカットキー試したら ほとんど通らなくて絶望してる 前の持ち主はそこまででこの本捨てたみたい (ここまではラインマーカーあり、手あと付きまくりで汚れてる 水滴の落ちた跡があるけど、泣いたのかもしれない)
なるほど C言語の本でもポインタの説明が間違ってて詰むパターンか
かわいそうに K&R本も難読で苦労した人も多かろう
ポインタの話を出して「それに比べたらお前の絶望なんて大したこと無い」ってか Cはドメジャー言語、Lispはマイナー言語だぞ
実践common lispってそんなHow To本だったっけ?pathnameのはなしをよんでうげっとなったような記憶が。
>>661 lisp はマイナーなんかじゃなく、神話ですよ 読者も書籍も少ないという意味では同じ意味だろアスペ野郎
lisp初心者とプログラミング初心者のどっちなんだってやつ多いよな pythonおすすめ
冒頭Emacsの使い方から書いてある、環境も提供してる hello worldから書いてある プログラミング初心者が手を出しても全くおかしくない本だと思うけどね
LispBoxですが カッコ全閉じ C-c C-q → undefined 関数コンパイル C-c C-c → [Condition of type SIMPLE-ERROR] →戻るとリターンで評価が効かなくなってる 関数コンパイル M-x slime-compile-defun → 通る どうすれば?
>>666 全くの初心者でも無いです 大学ではEmacsでレポートを書いていたし、Schemeの本も読みました 再帰は多少慣れています >>667 C-c C-c で slime-compile-defun は lisp-mode での割り当てです。 *slime-repl* バッファでは slime-interrupt が C-c C-c に割り当てられています。 C-c C-q は大分前になくなったようです。 今はカッコ全閉じは C-c C-] これも lisp-mode での割り当てで、*slime-repl* バッファでは使えません。 もちろん設定すれば別ですが: ;; SLIMEのREPLバッファでも C-c C-] でカッコ全閉じ (eval-after-load "slime-repl" `(define-key slime-repl-mode-map (kbd "C-c C-]") #'slime-close-all-parens-in-sexp)) なおREPLでは Ctrl+Enter で「カッコ全閉じして評価」ができます: CL-USER> (list(list(list ;ここで Ctrl+Enter すると ↓ CL-USER> (list(list(list))) ((NIL)) CL-USER>
Lisp Cabinetも入れててこっちはslime2009-10-15でちょっと古いのか *slime-repl sbcl*でC-c C-]が未定義と言われます
>>672 >>669 の言う通り、 *slime-repl sbcl* では C-c C-] は定義されておらず、使いたければ 669 と同じ手当てがいる。 SLIME 2.24 (May 2019) でも slime-repl には C-c C-] は定義されていないみたい。 .lisp ファイルを開いた時の slime-mode には定義されてるけど。 >>669 の「設定」はいったん忘れてください。 lispboxはemacsのユーザー設定を読込むようになっていないので意味のない提案でした。 とにかく、拡張子が .lisp のファイルを作ってそこで試してみて。 そこでなら C-c C-] も C-c C-c も使えるはずです。 閉じ括弧は自動入力に頼るべきだし、実際閉じ括弧を入力する事は皆無だ
実践common lispは序章に common lisp に興味があるすべての人に向けたもの とは書いてあるがプログラミング初心者にも向くとは書いてない python,java 他の言語と比較した解説が多い ターゲットは lisp に興味のあるプログラマだろ
だからって前提としてる環境で通らない事を書いてたら読者可哀相ではある
サバイバルなんとかって同人誌には導入の方法とか書いてないの?
HDD買ってきてlinux入れるしかないかなぁ どうせならlibreboot化してみっかなCL関係ないけど