【入門】Common Lisp その11【質問よろず】
■ このスレッドは過去ログ倉庫に格納されています
Lisp Schemeスレでは恥ずかしくて聞けないようなことを質問したり、 Lisp Schemeスレの話題は高度すぎて気後れする人が話しあったり。 それ以外でもCommon Lispについての話題なら歓迎します。 ま、ゆっくりやりましょう。 「いいものの本質は、いかなる時代においても変わらない」byパワーズ ■前スレ 【入門】Common Lisp その10【質問よろず】 http://peace.2ch.net/test/read.cgi/tech/1361341876/ ■Wiki http://wiki.fdiary.net/lisp/ (id:guest pass:cl) http://cl.cddddr.org/ http://tips.lisp-users.org/common-lisp/ >>757 言語ヲタしてると最終的にフリーダムなlispに行き着くのだよ >>758 ゲームに組み込むには、ゲーム自体がC(C++)で作られてるから、0ベースじゃないとワケわからなくなる まあそれは仕方ないんでね Fortranはデフォルトがそうなだけでインデックス範囲は負も含めて指定できるし好きにしたらいいよ むしろcへ組み込む用途で問題なのはcと互換性のある型や呼び出し規約、メモリ配列使ってるかどうかだろ clにcffiがあるように、Fortranもcと互換の型も使えるようになったし、cでは速度が足りない数値計算ライブラリの多くは比較的書きやすいcをグルー言語にするのが主流 Guy Steeleはほんと天才だと思うわ cltl2はバイブル、嫌々使われてた古代言語Fortranを魔改造してHPC界を独占 Java?知らない子ですね… >>762 762みたいなひとはcltl2でGuy Steeleが考えた部分がどれだけあるとおもってるの? すべて考えたとおもっている?それとも1割くらい? rationale的な事や不採用になったよ注釈とか見る限り結構標準に関わってるんじゃないの セカンドオーサーになってるschemeよりは割合少ないと思うけど、なんか読み物的なのないんかね? 随分昔の話題掘り返してなんだけど>>551 readable lispってのいい感じだと思うけどどうよ https://sourceforge.net/p/readable/wiki/Common-lisp-tutorial/ まあインデントに関してはelseとかシンボル埋めないと慣れた人でないと読みにくいかな、オレオレなら構わんが 関数記法とinfixのサブセット添える程度なら初見で分かる 妙なシンタックスにしてまでlisp書く意味ないやんあほなん R Studioから、Common Lisp(SBCL)のREPLを使えるように出来ないのかな? 一番バグが少なくなる言語は何だろうと思って検索してたんだけど Lispのバグ発生率はどんな感じ? >>768 COBOLとか言われたら逆にどうすんのか知りたいw ありすぎるけどtraceとmacroexpandパワーでデバッグは楽なので気にすんな disassembleやfunction-lambda-expressionやsource-location系もたぶん処理系依存?(大体あると思うけど) ちょっとしか触ってないがschemeはインスペクタが統一されてない感じ?がある 形式的に見つけられるバグは絶対許さない言語はML系だろうな、ocamlとか traceとmacroexpandパワーでデバッグが楽ちんだとおもったときが一回もない う、うむ… lisp2dotおすすめ 慣れると変な繋がり方してるのぱっと見でわかるようになる quicklispって必要?quicklisp必要になったことないんだけど >>775 他言語だと好き勝手に投稿されてるマネージャが主だけど、qlはちゃんとメンテ精選してる人が居るのでありがたいよ トップライブラリならちゃんと開発が回ってるからいいけど、準有名程度くらいだとオリジナルの更新数年無し、個人フォークが何十もあって、どれ使えばいいか&何が違うかよくわからんやろ ただインストーラとしてはすごい便利なんだけど、qlコマンドは殆ど呼んでないな あちこち要らないとこ読みに行って起動に10秒かかる(よね?) セットアップでrcに追加される"quicklisp/setup.lisp"を消して、勝手に起動しないようにすると快適 (require 'asdf)で置き換えてqlのディレクトリをパスに加え、(asdf:load-system 'sysname) 等で読み込めば一瞬だし、当然バックエンドのasdfのapiの方が粒度が細い、再コンパイルも防げる ffi等含め静的にlispイメージをダンプして普段使いするよりずっと便利 月例更新と各プラットフォーム&処理系のグリッドビルドテストまでしてるのに、肝心のqlクライアントの最新版が8年前更新のゴミクズなのはなんでなん 教えてエライ人 最近CLで書かれたカッコいいアプリとかありますか? 最近書かれたというか、最近のCASのバックエンドはほぼほぼmaximaだったりする 歴史こそ古いが、急にフリーCASシェアNo1(たぶん…)になったので PythonでもCASをやってるけど、Pythonで一番高機能&人気あるSageMathの高度な部分はほぼmaximaラッパで、ブロブである必要が無い部分はサブセットのSymPyに投げる構成(あと少しのmagma maxima自体はalgol風に書くんだけど、algol度で言えばPythonに劣るし、もちろんlispでも書けるけどちょっとワークアラウンドが面倒… lemをインストールしたのにコマンドラインから認識しない… roswellは入ってて動いてるんだけど >>696 を見て自分にはlemは無理そうなので止めときます lispで書けるvimがあれば最高なのになあと思ってたらlemが出たけどまだ時期が早い 応援だけしてる lemはgithubに登録されたのが2015/8/5だから、結構時間は経ってるな まださわりだがClozureCLなかなかいいな objcのインターフェース持ってる関係でtcl/tkで面倒なことしなくてもいいし スタンドアロンも作れる とりあえずslimeで使えるようにしてぼちぼちやってみるわ packageをアクセサが簡潔な構造体として使ってるけど、他人が使ってるの見たことない なんか不都合あるのかな? (make-package :cyan) (setf cyan::r 0 cyan::g (sq 13) cyan::b (sq 15)) cyan::g ; => 169 みたいな感じで 最後の行以外は(defun make-color (name r g b)…)みたいなに包んでコンストラクタに(あと怒られないようrgbをdefvarしたり初期値入れたり) チェーン式記法だと補完が効くのが便利かと思ってる (make-color :magenta ...) (defun inc-chroma (col) ...) (setf :vivid-cyan (inc-chroma :cyan)) みたいにパッケ渡して返って来た新パッケをbindしたり make-package(のラッパ)にgensym渡して無名インスタンスをバコバコ作ったり 実は文法の変なdefstructが嫌いなだけだったり… 暗黙のアクセサ作ってくれて、それ故に人のコードも暗黙の了解で読めるのはありがたいけど パフォーマンスは気にしてない でも多分*package*から見えるパッケはgcされないはずだから(見えてるからそうだよね?) 入力受けて吐いてすぐ終了のプログラム以外ではちゃんとdelete-packageする必要がありそう 携帯で適当に書いたから、今見直しておかしいとこいっぱいあるけどその辺は見逃して下さい :cyanは自己評価だからsetfできないとか、(symbol-package :cyan)とかで通ったっけ いやいやそもそも:cyanはkeywordに住んでるので、string designatorとして適切であっても、symbol-*に渡す時はシンボル'cyanですね 対話的に使ってる時は便利だけど、白紙から書くと間違いまくってるのがこの手法の怪しさを証明してるかも… > なんか不都合あるのかな? 議論する価値ない手法だとおもうけどさ 他人とコードをシェアしないで一人でかくのはいいんでないか? パッケージはhash-tableで実装されているから構造体よかhash-tableが便利いうてるのと大差ないわな perlのパッケージ調査してみれば? >>793 その辺はわきまえるよ 処理系の実装まで思い至らなかったので、記法だけを見てハッシュとしての特性を考えて無かった 標準のhashはネストしたときトリッキーなので、qlからaccessライブラリやマクロを駆使した中置アクセサが提供されてるけど、何もuseしないパッケージを使えば素直で性能も出そうだね 特にaccessはjsonとか読む用で、疎なテンソルの扱いとか考えてないし 早速ベンチしてみる、ありがとう! うーん、、パッケージに属する変数との違いが分からない シンボルのp-listのほうがなんぼかましだろな (setf (symbol-plist 'cyan) '(r 0 g (sq 13) b (sq 15))) (setf (get 'cyan 'r) 42) (symbol-plist 'cyan) (r 42 g (sq 13) b (sq 15)) 再帰的にパッケージ作ってはimport でホームに設定してるけど…やっぱり筋が悪かったですごめんなさい 一応軌跡だけ デフォルト値はエラーをhandler-bindで捕まえる cl-userの(list-all-package)が汚れるからcl-userから先頭以外はuninternして、でも参照は保持して…と hs見たらdelete-packageやuninternしてもアクセスは許されるがpathologicalなのでチェックは行わないとか書いてる 怪しからん事になってきた >>796 lisp5らしい方法ですね propertyスロットに入れたのに、value slotにアクセスしようとしていつも怒られるからあんまりやらないけど… 情報付けたいけどvalueスロットが既に埋まってて、それがライブラリ由来で手を入れたくない時とかの非常口として稀に役に立つ sbclではcl-userからのfind/list-all-packageに引っかからなくても普通に生きてるみたい どれくらいplist(用のセル)が使われてるんだろうかと(do-external/all-symbols (s :clとか色々) (when s (print s)))してみたらinternalには意外に使われてた まあ殆どデバッグ用のタグのようだが The Lisperati1000 Is a Cyberdeck Terminal Dedicated to Lisp Programming Dr. Conrad Barski wanted a small, portable device for coding Lisp on the go and built the Lisperati1000 cyberdeck terminal for the job. The Lisperati1000 is a very compact device based on the Raspberry Pi Zero W single-board computer. Its most striking feature is the 8.8” LCD display, which has an ultra-wide aspect ratio with a resolution of 1920x480. たのしそう なんですげー細長いのかすらもよく分からんが androidだとeclのreplがあるけど残念UIで殆ど触ってない 外付けBluetoothキーボード安いの買ってみるかな ポン叩くとnilが生じ、クルッと( )で囲んだり、ピンチで←(こ う)→引き伸ばしたり、そこへ(flick me)をフリックで放り込んだり(こ (flick me)う)したいです 例えはプログフォームなことを忘れてたら ここを(kar | kadar...)こうシュッと分裂(kar ) ( kadar...)させてシュッと((kar ) ( kadar...))こうする感じで よろしくおねがいします paredit/vim使ってるけど脳内操作感はこんなんだな vimでジェスチャーは難しそう? :nnomap <left-mouse> ,@(スプライス/paredit)みたいのはタブレで桐南るんだろ? マウスなら左右中×シングルダブクリの6パターン使えるが play storeに転がってるvimの投げやりなポート触る限り、矩形選択が使えそう? 範囲だけで動きが追えないが キーボードフリーvimなんて、と思ったけどふと試した音声入力が結構戦える事に気づいた(約物とauto-capさえ切れば) 修飾キーあんまり使わないからだね :、escよく使う大文字修飾コマンド、モード切替あたりはリマップする必要があるが (par、)renでいこう hyperspecの発音記号の項目が輝く時がやっと来たのか hsもcltl2も大体読んで細かいとこ気になってきたらansi/isoも読むべき? 60$とえらく高いし製版の評判ボロクソだけど ANSIに持ち込んで版権付く直前のドラフトがansi-cl.psでググって出てくるけどどのくらい違うんだろ、並べて読まないとhsとは違いが分からんが… 処理系作成者以外が参照する準公式文書でフリーなのは以上3つで尽きてるよね? もし買った熱心な方いたらお願いします 紙のスキャンでocrすらしてない名ばかりpdf、スキャンが斜めってて端の方の文書が欠けてると聞くと、むしろ怖いもの見たさが湧く c/c++のように違法アップロードが見当たらないのはclの民度が高いのか、もっと高額だからか、それとも単に需要がないからなのか… 情報元にドラフトと内容の違いはないというのも書いてあったよな >>809 そうなの、ありがとう じゃあ古代のマニュアルでも読んでた方がむしろcons/prosを学べそうだな 無理矢理なPDF版よりも、むしろ紙の仕様書が欲しい AmazonのPODで売ってくれたら絶対買う 紙の持ってるとほんといいね 寝ながらcltl2の余白に書き込みまくってる、枕にも丁度よい amazon中古送料込み450円なんでためらいもない 誰か教えてください CLOSで デストラクタ的な事をするにはどうしたらいいんでしょうか? (defmethod delete ((o myclass)) ~disconnect DB connection とか colse socket とか~ ) (let ((obj (make-instance 'myclass))) ... ) 参照が残っていなければ勝手に (delete obj) がコールされるのが理想です 少しググっても「放っておけばガーベッジコレクトされるのに何を心配する必要があるんだ?(英語) 」 みたいなのばかり引っかかってどうにも分かりませんでした 参照がないことを検知できないので disconnectやらcloseやらは明示で呼ぶしかない ありがとうございます それが Lispスタイルなのですね、少しづつ慣れていこうと思います 単に接続を確実に閉じたいだけなら、with-open-file みたいなマクロ書くけど CLOSかぁ c++にとらわれすぎc++の用語で検索するからヒットがないだけでlisp raiiで検索すると沢山でてくるよ リソース管理だから816の回答が定石 Pythonはpaulがベタ褒めしてから20年くらい追ってるけど、元はblock(不採用)として提案され、先例上げるのが通例なのに言及もなかったはずなので直接は関係ないんじゃないかな? pepでよく言及されるのは確かだが 今だと構文マクロは却下されそうだな、面白そうなのに ふつうの言語はASTを内部表現に採用してると思うが、Pythonは標準関数で抽出&evalを許してるのが特異で面白い lispインタプリタ書きなどしなくとも、ノードのラベルをリストのcarと入れ替えるだけの数行のコードでフルパワーlispになる >>820 うーん、ちょっと信じられん、Python の内部表現ぐちゃぐちゃじゃなかったっけ コードで示せる? CCLでdexadorが使えなくて困ってるのだけどもしかしてビルド失敗してるのかな SBCLなら通るのだけどCCLだとこんなエラーになる ttps://i.imgur.com/uCzQQTm.png lispの問題解決はそもそもよくわかってないのでどうしたらいいものやら >>823 connection refused って出てるあたりよく分からないなあ。 俺が手元のMacで試すと成功したのでより分からない。 いっそのこと HTTP クライアント変えて Drakma 使うとか。 (ql:quickload "drakma") (drakma:http-request "https://ja.wikipedia.org/wiki/Common_Lisp" ;) >>797 propertyはおもむろにsetfしても怒られないので対話使用に便利 というのはさておき怒られない理由が気になる letでそのシンボルを束縛しててもグローバルのシンボルのplist見に行くよね? 単に気にもかけられない機能だからとか? ああletで束縛するのはplistという名前のvalueであって、getf 'plist 'propって書けば当然シンボルとしてのplistを見に行くわな 自己解決 するとpletって概念が頭に浮かぶんだけど、どう実装できるだろう? ちょっと思いつかない >>825 Drakmaも同様にだめでした 今の所どこから手をつけたらいいかわからないけど地道に調べます ccl使ってないからわからないけど、ipv6とか出てるのが気になる 最近Lispというものを知ったのですが、皆さんはなぜこの言語を使っているのですか? 遊び甲斐がある、たぶんFORTHと並んで最も面白い言語から しかし仕事はない 間接的に地力固めにはなってる気はする lisperを集めてもみんな船頭になりたがる人種だから川渡れないよなあ 伝説的なプロジェクトは大体少人数ってのが裏付けている、気がする CCLの再ビルドをしていて気づきましたがcan’t findが大量に出てますねえ・・ ccl -n >(rebuild-ccl :clean t) Can't find #P"ccl:library;lispequ.dx64fsl.newest" so requiring "ccl:library;lispequ.lisp" instead Can't find #P"ccl:bin;hash.dx64fsl.newest" so requiring "ccl:lib;hash.lisp" instead Can't find #P"ccl:bin;backquote.dx64fsl.newest" so requiring "ccl:lib;backquote.lisp" instead Can't find #P"ccl:bin;level-2.dx64fsl.newest" so requiring "ccl:lib;level-2.lisp" instead ..... この後にも大量に出てますが対象のlispファイルは存在しているようなので 見にいくようにすればいいのではないかと思いますがやり方がわかりません どなたか教えていただければ助かります CCL本体のmake自体は特に何も出ていませんでした。 うちはsbclなんであれだがSBCL_HOMEみないな名前の環境変数は.../lib/sbclをちゃんと指してるか? ttps://github.com/Clozure/ccl/releases ここを見る限りは必要ないみたいです ほとんどは参照に成功しているようでLoadingとCommpilingが繰り返されてますね さっきから調べてますがちょっとこれ手に負えないですわ・・ そもそもどういう環境なのか書いて欲しい エスパーするにも限度があるぞ すみません high sierra 10.13.6 です 経験なさすぎて手に負えません 先輩方お願いします 趣味悪いやつがどこまでエスパーできるか試してるようにしかみえん・・ どうやってインストールしたん CCLのバージョンは なんでCCLの再ビルドしたん ttps://github.com/Clozure/ccl/releases ここにある通りです CCL 1.12がlatestのはずです git clone https://github.com/Clozure/ccl.git ccl-dev curl -L -O https://github.com/Clozure/ccl/releases/download/v1.12/darwinx86.tar.gz cd ccl-dev tar xf ../darwinx86.tar.gz なおここから先のCCL本体のビルドはやってもやらなくても結果は同じでした cd lisp-kernel/darwinx8664 make clean make ln -s */ccl-dev/dx86c164 ccl は適宜やってます 単にCCLはビルド以外の提供がなかったからビルドしただけで他意はないんです lisper だけにエスパーは得意でございます お後がよろしいようで… つか、なんかcclのページに何か不安なこと書いてるね Unfortunately, on Windows and macOS Catalina, (rebuild-ccl :full t) will not work. >>844 たまたまうちの環境も High Sierra だけど CCL は roswel で導入したのを使ってる (他に sbcl と abcl-bin を入れてる) 確かに ccl-bin でしか提供されてないけど気にならないので再ビルドする気にはならんね > Can't find #P"ccl:library;lispequ.dx64fsl.newest" so requiring "ccl:library;lispequ.lisp" instead > ... この箇所ってエラーではないと思うよ コンパイル済みの "ccl:library;lispequ.dx64fsl.newest" が見つからんので 代わりに "ccl:library;lispequ.lisp" を探すわ (そしてコンパイルするわ) ってだけのメッセージでしょ (translate-logical-pathname "ccl:library;lispequ.lisp") の場所にファイルがあれば何も問題ないはず >>846 なるほど実は(rebuild-ccl :clean t)は必要なかったんですかね 気を取り直してCCL本体はmakeせずrebuildも打たない形にしてみたんですが やっぱりdexadorは同じところで止まるようです しかしCCLで動いている方もいるようなので(>>825 ) こうなるとますますわかりません 何か設定がおかしいのか、足りないのか・・ とりあえず現状で:F 1から:F10まで追ってみたんですが SSLっぽい引数が全部NILってことに気づいてSSLをしくっている可能性を考えました internet-familyはIPv6/IPv4に対応しているような感じは受けますがそこはまずおいておいて IPv4を返しているwww.niconico.jpをgetさせたらkilled: 9でCCL自体落ちました (続き) こうなるとdexadorがCCLに対応していない可能性があると思い ttps://github.com/fukamachi/dexador ここを見ると特に対応情報とかはないようですがサンプルから ? (dex:get "http://lisp.org/" ;) "<HTML> <HEAD> <title>John McCarthy, 1927-2011</title> ・・・中略・・・・ <a href=¥"http://www-formal.stanford.edu/jmc/¥ ;">John McCarthy's Home Page</a><br> <a href=¥"http://news.stanford.edu/news/2011/october/john-mccarthy-obit-102511.html¥ ;">Obituary</a> </BODY> </HTML> " 200 #<HASH-TABLE :TEST EQUAL size 10/60 #x302002997A5D> #<QURI.URI.HTTP:URI-HTTPS https://lisp.org/> ; #<SSL-STREAM for #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/11) #x30200299FA3D>> ? んー?落ちてきますねえ・・ https://lisp.org/ に変えても落ちてきます。 dexadorに頼っていいのかどうかわからなくなってきました >>847 のリンクを間違えました 誤 IPv4を返しているwww.niconico.jpをgetさせたらkilled: 9でCCL自体落ちました 正 IPv4を返しているwww.nicovideo.jpをgetさせたらkilled: 9でCCL自体落ちました >>847 High Sierra + CCL 環境で問題なくgetできてるよ quicklisp周りのアップデートしたら直るんじゃないかな 環境構築めんどくせえからxyzzyかPortacleでいいや lisp.orgなる良いドメイン確保してるの初めて知った… stanfordのjmcのhpへのリンクがあるだけ? (いまお外でスマホブラウザftpできない) ubuntsu で普通にaptでsbcl落とせたはず、ccl は知らんけど 850のコメントが正しいと思う、usocket が壊れてるとかかな やってみました ? (ql:update-client) The most up-to-date client, version 2021-02-13, is already installed. T ? (ql:update-all-dists) 1 dist to check. You already have the latest version of "quicklisp": 2021-02-28. NIL 特に何も変わらないようです・・ ccl自体はquicklispの管理には入っていないと思うのですがこれを組み込むべきと言うことでしょうか? >>854 あと考えられるのは quicklisp/.. . .. /cl+ssl-20210228-git/src/reload.lisp で libcrypto.dylib, libssl.dylib をロードしようとしていて システム標準ライブラリに付いてるコメントが怪しい ( MacPorts/Homebrew etc. の dylib を優先的に探索している) "libcrypto.dylib" ;; default system libcrypto, which may have insufficient crypto "libssl.dylib" ;; default system libssl, which may have insufficient crypto 「これだと暗号化が不十分かも」という事は、 https 通信で問題起こす可能性があるということ そこで拒否られる ( connection refused ) かどうかはサーバーのバージョンと設定次第なんじゃないかと なので 自力 make install か homebrew とかで を最新の openssl をインストールしたら直るかもよ それと dexador/drakma はサーバーがLocation属性で示したリダイレクト先(大抵は https://... ) 見に行くようなので httpなら大丈夫だった, httpでも拒否られた ってのはアテにならない気がする ああ、qlはssl対応してないんだっけな(遠い目) 永久にβ版 >>854 あと rebuild-ccl についてなんだが https://github.com/Clozure/ccl/releases を見ると Windowsや macOS Catalina だと (rebuild-ccl :full t) はうまくいかないかも Xcode 11 (Mojave) の一部バージョンだと make も通らんかもとあるが 我々の環境 Xcode 10.1 (High Sierra) では大丈夫なはず ;; git 版 rebuild-ccl ;; ccl-dev❦:./dx86cl64 --no-init ? (rebuild-ccl :full t) . . ... . . ;Building lisp-kernel ... ;Kernel built successfully. できた ;; roswell 版 rebuild-ccl ;; ~❦:ros install ccl-bin {まだ入れてなければ} ~❦:ros +Q +R run { +Q: quicklisp無し, +R: "--no-init" に相当 } ? (rebuild-ccl :full t) . . ... . . できた ~❦:ros run {普通に起動} ? (ql:quickload :dexador) ? (dex:get "https://lisp.org" ;) . . ... . . とりあえず問題無さそう 素のCCLとの性能差は体感では分からなかった >>855 libcryptoとlibsslは自分でビルドしたのを/usr/local/libに置いてます そんなに古いわけじゃないとは思うんですが早速更新して見ます SSL関係はCLの標準ライブラリとして持ってるものだと思ってました・・ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる