【入門】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/ 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する方法がわかりまでん https://quickref.common-lisp.net/index-per-library.html ここに沢山あるパッケージは,名前から中身を類推するしかないの? このパッケージはテキスト処理で,数値計算でみたいなカテゴリー分類が見たい 実践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> >>669 ありがとうございます! LispBoxが古いせいなのか、C-c C-cが未定義なんですよね C-c C-]も未定義と叱られます >>670 は通って全閉じしてエンターしてくれます Emacs 23.2.1です ここから貰ってきたものです https://common-lisp.net/project/lispbox/ 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 に興味のあるプログラマだろ だからって前提としてる環境で通らない事を書いてたら読者可哀相ではある 実践は少なくとも10年前は本の通りそのまま動いたよ 前提としてる環境は2005年の環境な 翻訳は2008年らしいがとっくに絶版らしい lispboxの代替品はいまならportacleだろうな https://portacle.github.io サバイバルなんとかって同人誌には導入の方法とか書いてないの? HDD買ってきてlinux入れるしかないかなぁ どうせならlibreboot化してみっかなCL関係ないけど 嘘書くなよ‥ ホビー向けlispworksは 64ビット版 750$ 32ビット版 500$ http://www.lispworks.com/buy/prices-1h.html 思う所あって、とりあえず入門しようう・・・と ttp://www.nct9.ne.jp/m_hiroi/clisp/index.html ここ見ながらSBCLをWindowsに入れて始めました。 ・・・うん、流石に数日で制覇は無理だし、当分はリファレンス見ながらじゃないと文法は頭に入らないかな。 ただもっと疑問なのは・・・私はインタプリタがBASIC以来で30年ばかりブランクあるのだけど、LISTやNEWやRENUMみたいなインタプリタへの命令ってどうなってるんでしょ。 定義した関数は実行できるけどコードはもう見れないなんてコトないよね。変数は確認できるけど。 ググって他の入門テキスト当たっても特に記述がないってのはどういうコトなんだ・・・かろうじてLOADがあった程度とか。 見落としてるのかな。 以下のエラー、対処法わかりますか? $ ros install cxxxr/lem すると、 Installing from github cxxxr/lem To load "lem": Load 1 ASDF system: lem ; Loading "lem" ....................[1/3] System 'lem' found. Loading the system.. ; ; caught ERROR: ; READ error during COMPILE-FILE: ; ; The symbol "LOAD-ASD" is not external in the ASDF/INTERFACE package. ; ; Line: 62, Column: 20, File-Position: 2356 ; ; Stream: #<SB-INT:FORM-TRACKING-STREAM などとなり、インストールできません. 分かる人いますでしょうか。 MacOS Catalina 10.15.6 The symbol "LOAD-ASD" is not external in the ASDF/INTERFACE package. asdf よりも、日本人が作った、anyenv を使えないの? 漏れは、Windows 10, WSL, Ubuntu 18.04 で、 ruby 2.6.6, node 12.16.2 を入れた anyenv は多言語向きで、rbenv, nodenv, pyenv, phpenv などを同じ使い方で、統一的に扱える anyenvと比較されるのはroswellだと思うが >>691 ありがとうございます。 次の段階に移りました。 下のように UIOP/OS:~ ばかりがillegal function callとなります。 どうしたら良いでしょうか? Making core for Roswell... building dump:/Users/user/.roswell/impls/x86-64/darwin/sbcl-bin/1.2.11/dump/lem-ncurses.core ; file: /Users/user/.roswell/lisp/quicklisp/dists/quicklisp/software/cffi_0.23.0/toolchain/bundle.lisp ; in: DEFUN BUNDLE-PATHNAME-TYPE ; ((UIOP/OS:OS-UNIX-P) "o") ; ; caught ERROR: ; illegal function call ; ((UIOP/OS:OS-WINDOWS-P) ; (IF (UIOP/OS:FEATUREP '(:OR :MINGW32 :MINGW64)) ; "o" ; "obj")) ; ; caught ERROR: ; illegal function call ; ((UIOP/OS:OS-UNIX-P) "a") ; ; caught ERROR: ; illegal function call anyenv install --list と入力すると、Lisp には対応してなさそう。すまんかった Renv, crenv, denv, erlenv, exenv goenv, hsenv, jenv, luaenv, nodenv phpenv, plenv, pyenv, rbenv, sbtenv scalaenv, swiftenv, tfenv lemはしょっちゅう壊れるから開発に参加できるくらいのスキルないと常用はむり エディタの拡張書いてもAPIの変更ですぐ動かなくなるからエディタ好き以外には時間の無駄 質問失礼します LISPでLinux向けのDAWアプリケーション(seq24のような)小規模なものが作りたいのですが, SchemeとCommonLISPの選択だと後者で間違えないでしょうか? また音系ライブラリの充実度とかも教えていただければ助かります 環境はdebianのsidにemacsとroswellです。 puredate使った方がいいでない?tcp/udpも使えるし、lispでサーバ書けばいいんじゃない 道はnilを生ず、nilはアトムを生じ、アトムはS式を生じ、S式は万物を生ず。なるズルい帯に釣られて初めてLISP買っちまった 初めての人に向けた宣伝文…? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる