2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

【入門】Common Lisp その11【質問よろず】

1 :デフォルトの名無しさん:2014/09/21(日) 22:49:21.73 ID:FJokPHUt.net
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/

968 :デフォルトの名無しさん:2021/05/23(日) 14:54:18.11 ID:jMJ3NfPq.net
実践Common Lispにはnon-consingを意味すると書いてあるな

969 :デフォルトの名無しさん:2021/05/28(金) 00:46:31.60 ID:EJmsk1LE.net
クロージャー?判ってなさそうなミスして困った
https://pastebin.com/MmYWsxce

CL-USER> (answer-status)
(B . 0) (R . 0) (G . 0) (Y . 0) (P . 2) (W . 0)
(B . 1) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 1)
(B . 0) (R . 0) (G . 0) (Y . 2) (P . 0) (W . 0)
(B . 1) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 1)
NIL
CL-USER> (answer-status)
(B . 0) (R . 0) (G . 0) (Y . 0) (P . 4) (W . 0)
(B . 2) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 2)
(B . 0) (R . 0) (G . 0) (Y . 4) (P . 0) (W . 0)
(B . 2) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 2)
NIL
CL-USER> (answer-status)
(B . 0) (R . 0) (G . 0) (Y . 0) (P . 6) (W . 0)
(B . 3) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 3)
(B . 0) (R . 0) (G . 0) (Y . 6) (P . 0) (W . 0)
(B . 3) (R . 0) (G . 0) (Y . 0) (P . 0) (W . 3)
NIL

関数呼ぶ時に counters が初期化されずに値をキープするので
呼ぶ度に増えてしまう
どう定義すればリセットされるのだろうか?

970 :デフォルトの名無しさん:2021/05/28(金) 02:28:07.56 ID:yF2ZDltE.net
なんでcounterをdefparameterで定義してるの?

971 :デフォルトの名無しさん:2021/05/28(金) 03:05:24.01 ID:mAlT95oI.net
copy-tree 使うとか
https://pastebin.com/69r3fbZH

972 :デフォルトの名無しさん:2021/05/28(金) 08:27:58.85 ID:EJmsk1LE.net
>>970
実践 Common Lisp に
>この2つのフォーの違いは
>DEFPARAMETER は評価されるたに常に初期値を代入し、
と書いてあったから
2回目移行の関数呼び出しの時に初期値代入してくれることを期待していた

>>971
thanks
copy-tree 始めて見た

973 :デフォルトの名無しさん:2021/05/28(金) 10:06:56.31 ID:9zUWEJUi.net
>>972
よくわかってないけど、defunの中のdefparameter はただのletじゃだめなの?
トップレベルとそうでない場所でのdefparameter は挙動が違うと思う

974 :デフォルトの名無しさん:2021/05/28(金) 13:02:59.14 ID:3GRY8xg9.net
リテラルオブジェクトを破壊的に変更した結果が未定義だからだね

975 :デフォルトの名無しさん:2021/05/28(金) 20:43:19.98 ID:Kys4wuAq.net
assoc cdr nth越しにfるアクセサ志向プログラミングが気になる
いや悪いと思わんよsetfパワーはclの売りだし
ただなかなか見たことないので感心?した

976 :デフォルトの名無しさん:2021/05/28(金) 22:27:22.42 ID:EJmsk1LE.net
>>973
全然 let でいいですね
今回スコープ広くしなくていいし

>>975
コンソールで対話型のもの書くのにLispがエラー時に変数見れたり色々やりやすかった記憶があったので
ひさびさに Lispを選んだ
うる覚えなのでスタイルが面妖なことになってるかもしれないw

977 :デフォルトの名無しさん:2021/05/28(金) 23:07:39.31 ID:J0jB9cZZ.net
グラフ探索でモノを見つけたら帰りがけに空リストへcar/cdrをpushしていくのはやったことあるな
(#'car #'car #'cdr ...)で表現したアドレスと値が帰ってくる(以下#'等省略)
値を処理したら(compose '(car car cdr...))でアクセス関数を生成してsetfで更新

なんで俺はそのノードへの参照を直接返さず無駄にリスト返したのか、と書いてて疑問に思ったけど思い出したわ
そのノードの周りをn階層刈ったり、途中の階層から相対アクセスしたかったんだ
(compose '(cons curried-butlast-n '(car car cdr ...)))
的な感じで

何れにせよcar/cdrがsetfableな恩恵だね

978 :デフォルトの名無しさん:2021/05/28(金) 23:14:25.26 ID:J0jB9cZZ.net
リードした時点でcadaddadadaaaar自動生成みたいなしょうもないマクロをpaul grahamだったかで見た事あるけど、もしかしてこれ使えるかも?

a/dを文字列ででも返して、それを関数として使いたい時だけcとrで挟んでinternする感じで

979 :デフォルトの名無しさん:2021/05/28(金) 23:53:54.41 ID:Kys4wuAq.net
効率は悪そうだけどとてもlispらしい
placeだけダイナミック変数に確保したとしても、誰から指されてるか(親)は経路を何らかの方法で保存してないと原理的に辿れない
(複数から指されている可能性もあるので)

順にスタック片付けずに一気に脱出したいところだけど、帰りにpushする為に必要なんだな

逆に次にアクセスするノードへのアクセサをpushする方法が考えられるけど、これなら見つかり次第アキュムレータ末尾再帰かthrow 'top/catchで帰れる
外れノードから戻る時にアクセサをpopするコストも負うけど…

とりあえず効率は無視して、外れノードから一段降りる時にアクセサをpopするのではなく、returnを積んでしまえば、探索のログとしてデバッグに役立ちそう

car cdrに加え、returnまで合成した関数がちゃんとsetfableかまではちょっと自信がない

980 :デフォルトの名無しさん:2021/05/28(金) 23:54:39.92 ID:Ti7fgoex.net
毎回二連投するやつ

981 :デフォルトの名無しさん:2021/05/29(土) 13:06:29.81 ID:/6seeUxq.net
リスト上でreturnと直前の呼び出しを対消滅させて最適化するイメージは湧くが意外と面倒くさそう
returnが連続するケースにカウンタが要る
括弧のパースでよくやるロジックだけど

982 :デフォルトの名無しさん:2021/06/17(木) 12:59:58.49 ID:WewK95Ed.net
CommonLispで小さなCLIプログラムを書く

Writing Small CLI Programs in Common Lisp / Steve Losh
https://stevelosh.com/blog/2021/03/small-common-lisp-cli-programs/#s1-requirements

983 :デフォルトの名無しさん:2021/06/17(木) 21:38:50.24 ID:PVkxN2pW.net
>>982
CLISPさいつよ

984 :デフォルトの名無しさん:2021/06/22(火) 14:58:15.67 ID:9PZ+AdPA.net
「Common Lisp」って、市販の書籍を読んでも歴史や文法等の事は書いてあっても、
REPLで試せるだけで、コンパイルして実行可能ファイルを作る方法が不明だな。

ネットを調べてもコンパイルして実行ファイルを作成する情報が見つからない。
運良く見つかっても、商用系のコンパイラを使った場合の話だったりする事が多々有る。

985 :デフォルトの名無しさん:2021/06/22(火) 15:10:53.11 ID:YfWe7YWP.net
SBCLって有料七日
https://common-lisp.net/project/ecl/
https://stackoverflow.com/questions/11036070/lisp-binary-size
https://stackoverflow.com/questions/913671/are-there-lisp-native-code-compilers
https://stackoverflow.com/questions/14171849/compiling-common-lisp-to-an-executable
https://qiita.com/kedama17/items/6cdbb0e163aafcf8d339
https://takeokunn.xyz/blog/post/common-lisp-generate-executable-file
https://lispcookbook.github.io/cl-cookbook/scripting.html
https://ja.stackoverflow.com/questions/22493

986 :デフォルトの名無しさん:2021/06/22(火) 15:18:09.43 ID:HykST2y2.net
これが間違ったことを書いてツッコミを貰う式問題解決法ですか

987 :デフォルトの名無しさん:2021/06/22(火) 15:39:51.87 ID:pmPJw99A.net
処理系のマニュアルを見なさい

988 :デフォルトの名無しさん:2021/06/22(火) 15:45:43.42 ID:pmPJw99A.net
規格で決まってないし、そもそもバイナリに固めて配布する需要がそんなに無い

989 :デフォルトの名無しさん:2021/06/22(火) 15:53:42.26 ID:9PZ+AdPA.net
>>988

save-lisp-and-die

これって、規格に含まれてないの?

バイナリに固めて配布する気はない、
自分で書いたLispプログラムを実行ファイル形式にしたいだけだ。

990 :デフォルトの名無しさん:2021/06/22(火) 16:00:31.34 ID:9PZ+AdPA.net
解っている人にしか理解不可能な会話をされたら、

新参者はちんぷんかんぷんですね。

991 :デフォルトの名無しさん:2021/06/22(火) 16:58:54.16 ID:r0WButOj.net
SBCLではデフォルトで固めて実行ファイルを作れるが、サイズが最低でも40MBほどになる
SBCLビルド持にオプションを追加すると、圧縮した実行ファイルを作れる
それだと10MB程度になるから、まぁ現実的なサイズかなと
ちなみに圧縮されてても一瞬で起動するからデメリットは全く無い

992 :デフォルトの名無しさん:2021/06/22(火) 17:01:38.90 ID:pmPJw99A.net
save-lisp-and-dieはsbcl系だろうか、sb-ext:とかそんなパッケージプレフィックス付いてない?
eclだとsaveinitmemだとかその辺はてんでバラバラ

自分の環境で素早くロードして実行したいのならそれでベストだと思うよ、メモリをダンプしたのをそのまま読み込むだけだから

ただし全部入りだから、ファイルサイズに気を付けてね

993 :デフォルトの名無しさん:2021/06/22(火) 22:34:00.44 ID:9PZ+AdPA.net
>>985

わざわざ有り難うございます。
リンク先を参照して勉強します。

994 :デフォルトの名無しさん:2021/06/22(火) 22:44:48.17 ID:9PZ+AdPA.net
>>992

コンパイラ毎に、バラバラだったんですね、
コンパイルして生成されるファイルは巨大ですね。

995 :デフォルトの名無しさん:2021/06/23(水) 00:56:32.49 ID:fcCuTY0O.net
Common Lisperの7割以上が使ってると思われるSBCLの実行ファイルの作成に関して、具体的に書いた俺のレスは無視かよw
まともに聞く気が無いならもう来んなよ

996 :デフォルトの名無しさん:2021/06/23(水) 01:02:46.63 ID:p7QOUBen.net
老婆心だけど、プログラム事にコアイメージを量産するんじゃないぞ(違ったらごめん)
ライブラリや書いたコードの最適化コンパイル、実行時でなくてよい計算を済ませて、スクリプトを食わせる

997 :デフォルトの名無しさん:2021/06/23(水) 01:57:21.85 ID:p7QOUBen.net
sbclなら常に関数をコンパイルしながら走るので、動的に関数生成するそこそこ規模ならお釣りが来るよ
実行時入力を与えて走らせればイメージが最適化されるので、そこをまたダンプ
熟成と呼んでる

パッケージマネージャ用に主なアーキテクチャ向けビルド作ってるけど、デバッガやrepl削るとffi関連のアップデートで泣く

998 :デフォルトの名無しさん:2021/06/23(水) 02:01:06.89 ID:p7QOUBen.net
cl界隈はソース配布で自動ビルドがなかなか混沌としてるからな

999 :デフォルトの名無しさん:2021/06/23(水) 02:38:16.31 ID:bhqsYps4.net
こんな時間になってしまった。おやすみなさい。

1000 :デフォルトの名無しさん:2021/06/23(水) 04:19:32.99 ID:GGzsHju7.net
このスレ7年たつらしいけどLisp Schemeスレ一本に合流にして単独スレいらんのではないか
「いいものの本質は、いかなる時代においても変わらない」byパワーズのパワーズってなんなん?

1001 :デフォルトの名無しさん:2021/06/23(水) 13:25:52.20 ID:6jEPjWCz.net
emacs lisp の方が実用化には成功しているのかも知れないぬ

1002 :デフォルトの名無しさん:2021/06/23(水) 19:50:01.92 ID:bhqsYps4.net
次スレはまだかな、

1003 :デフォルトの名無しさん:2021/06/23(水) 20:30:38.58 ID:bhqsYps4.net
SBCL等のCommon-Lispでプログラムを作る際に、

ファイル若しくは画面にデバッグログを出力出来るライブラリの様なは無いのかな。

ググったり、Githubの中を探してたら、Log4CLってのを見つた。

1004 :デフォルトの名無しさん:2021/06/23(水) 20:45:03.00 ID:bhqsYps4.net
いま、検索したら日本語で詳しく紹介してるブログを見つけました。
他にもロギングライブラリらしきものが存在するらしい。

1005 :デフォルトの名無しさん:2021/06/26(土) 19:10:53.28 ID:SGwHfoMZ.net
transcriptって無かったっけ
そういうのじゃだめか

1006 :デフォルトの名無しさん:2021/06/26(土) 20:58:40.91 ID:3dvp5buX.net
>>1005
dribble
正直開発時にログライブラリなんかいらんREPLある

1007 :デフォルトの名無しさん:2021/06/27(日) 13:56:15.17 ID:VKjGOwn5.net
>>1006

REPL上でログ出力しても結構使えますよ。
ログレベルが選べるのが良いですね。

1008 :デフォルトの名無しさん:2021/06/27(日) 16:36:57.14 ID:KSONo++L.net
ロガーとslimeが連携でもしてくれるのなら有用だと思うがそうじゃないならたいして使えるものではないな
コンパイラの警告,trace,breakはロガーライブラリを導入しなくても標準で使えるし,slimeと連携もする

1009 :デフォルトの名無しさん:2021/06/29(火) 12:36:19.72 ID:aO3q0Gho.net
cdr

【入門】Common Lisp その12【質問よろず】
https://mevius.5ch.net/test/read.cgi/tech/1624937701/

1010 :デフォルトの名無しさん:2021/06/29(火) 18:57:39.59 ID:LZLMU7Fi.net
>>1003
単に*debug/trace/error/standard...-output*へ自前のストリームをsetfすると画面への出力が食われるのかな?自前のreplはどう?色付けたり楽しいよ

(loop (funcall print-tee (funcall (eval (funcall read))))

print-teeで好きな標準ストリームをread-lineし、好きなところに書き込む
試してないので雰囲気だけ…(処理系のreplは裏で色々やってるので、それを元に改造するべき

1011 :デフォルトの名無しさん:2021/06/29(火) 22:07:45.60 ID:vAeooDjH.net
>>1009


1012 :デフォルトの名無しさん:2021/06/30(水) 18:24:48.68 ID:PhKPzjXz.net
 一時期SBCL入れて入門していました。
 取り敢えずチュートリアルサイトを途中までこなして、ふと(BASICで言う)ステートメントをダイレクト実行しかしていない事に気が付く。
 しかもlistとかのダイレクトコマンド専門命令の説明がない。
 ググって見付けたサイト覗いても、その辺りの説明がない。

 いくら生まれが古くても、ここまで生き残った言語なら運用に不足がある訳ないのだけれど・・・。

1013 :デフォルトの名無しさん:2021/06/30(水) 19:57:21.11 ID:F+OSm5Af.net
>>1012
>  ステートメントをダイレクト実行しかしていない
これはreplでしかつかってないということなんだろうけど、
>  しかもlistとかのダイレクトコマンド専門命令
これはなんのことなんだろう。

1014 :デフォルトの名無しさん:2021/06/30(水) 22:58:32.99 ID:uA4oH22P.net
BASICがアマチュアプログラミングの標準だったのはかれこれ40年前ですよ・・・
LISPが古いのとは別次元で時代錯誤・・・

1015 :デフォルトの名無しさん:2021/07/01(木) 10:41:54.54 ID:8VUowwb0.net
https://ameblo.jp/manofthaman/entry-12682504719.html

1016 :デフォルトの名無しさん:2021/07/01(木) 10:42:20.83 ID:8VUowwb0.net
https://twitter.com/hashtag/%E7%BF%92%E8%BF%91%E5%B9%B3%E6%AD%BB%E3%81%AD
(deleted an unsolicited ad)

1017 :2ch.net投稿限界:Over 1000 Thread
2ch.netからのレス数が1000に到達しました。

総レス数 1017
303 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★