X



【入門】Common Lisp その11【質問よろず】
レス数が1000を超えています。これ以上書き込みはできません。
0502デフォルトの名無しさん2018/07/04(水) 22:29:25.87ID:gFgZc5FG
V3Z
0504デフォルトの名無しさん2018/07/13(金) 17:19:54.02ID:EPDxLdrK
こないだ迄Windows10の64bit版ではDEPの絡みで動かないと思ってた、SBCL版のMaximaが、
今試してみたらあっさり動いてしまいました。
sf.netに置いてあったインストーラでインストールした直後はCLISP版しか駄目だった
筈なんですが…。

うちではWindows10 Homeを使ってますが、皆様の処ではどうでしょうか?
05055042018/07/13(金) 17:28:05.78ID:EPDxLdrK
SBCL自体を別途インストールしたのが効いてるのかも知れないなぁ…。
0506デフォルトの名無しさん2018/09/11(火) 03:59:06.82ID:u3nXUIwD
Lispってwebフレームワークありますか?
一通りの機能のあるブログを作ったり出来るような
0507デフォルトの名無しさん2018/10/03(水) 18:50:06.50ID:1GTVcIse
質問です。

Lispで書かれたLisp処理系はありますか?
0509デフォルトの名無しさん2018/11/14(水) 08:37:19.93ID:gqSz/09F
roswellについての質問なんですが

ros init ファイル名

としたときできるファイルの中身の

(progn ;;init forms
(ros:ensure-asdf)
;;#+quicklisp (ql:quickload '() :silent t)
)

って何ですか?
(ros:ensure-asdf)特にこれ
0510デフォルトの名無しさん2018/11/17(土) 00:21:41.91ID:eQWBxdMf
>>509
そんな事俺に聞かれても知るわけないやろ頭おかしいんか?
0512デフォルトの名無しさん2019/01/08(火) 13:36:34.22ID:n4V6aMpj
Common LispからC言語のモジュールを呼ぶ方法は簡単に見つかるのですが
C言語からCommon Lispプログラムを実行する方法が見つかりません。
GaucheならC言語からインタープリタを起動できるみたいなのですがCommonLispにはないのでしょうか?
0513デフォルトの名無しさん2019/01/08(火) 18:04:16.67ID:kGjsEUq7
>>512

ただ別プロセスで処理系を起こして、そこの repl で評価できればいい・・というだけなら、 fork と exec で済むかも。

CからLisp関数を直接呼んだり、C関数でLispオブジェクトを直接扱うとかするのは、がっつり処理系依存だけど出来ることは出来る。
たぶんこの目的なら ECL が一番簡単だと思う。それっぽい例もあるし:
https://gitlab.com/embeddable-common-lisp/ecl/tree/develop/examples/embed

SBCL や Allegro CL でも出来るみたいだけど、かなり大変。
というのも、C関数が動いてる間にLisp処理系のGCが走ると死ぬ・・とか諸々あるので。一応リンクだけ:
http://www.sbcl.org/manual/#Calling-Lisp-From-C
https://franz.com/support/documentation/10.1/doc/foreign-functions.htm#lisp-from-c-1
0514デフォルトの名無しさん2019/01/13(日) 15:30:06.78ID:awaCdOlx
Lispでグラフィカルにステップ実行できる方法ってEmacsでSLIMEやるしかないですか?
LispのためだけにEmacs覚えるのは勘弁してほしいので
VimでSlimv入れてやってみましたがGDBのようなステップ実行しか出来ませんでした。
05165142019/01/15(火) 10:41:56.87ID:EvpJOxTU
すみません、勘違いでした。
edebugのように現在実行している行がわかるステッパ?が利用したいのですが
edebug以外にないでしょうか?
0518デフォルトの名無しさん2019/01/17(木) 06:22:05.82ID:W9irOPq+
Lispでドルマークって特別な意味ありますかね?正規表現とかナシで
0523デフォルトの名無しさん2019/01/19(土) 23:31:04.73ID:xfMx41aW
Windows版Roswellでinstallコマンド出来ている方はいますか?
sbcl-binのような末尾にbinがついて、ビルドが不要なものはインストールできるのですが
それ以外だと、msys2の有無にかかわらず~/.roswell以下にmsys2がインストールされて
それが全くまともに動作せず何もインストールできません。
0524デフォルトの名無しさん2019/01/20(日) 15:17:16.36ID:S2xiCEld
最近Lispを勉強し始めた超初心者です。
関数型言語も初めてです。

末尾再帰の最適化をするとコンパイラがループにしてくれるので効率がいい、の説明が腑に落ちません。
再帰は読むのも書くのもループより高コストだと思いますが、
その結果がループ並みに早くなる、では何のために再帰にするのかわかりません。

なにか他にメリットが有るのでしょうか。
0526はちみつ餃子 ◆8X2XSCHEME 2019/01/20(日) 21:45:08.14ID:/TyOXJfP
>>524
関数呼出しっていうのは、一般的なコンピュータの中でどのような
動作をするかというとその実態はジャンプとスタック操作でしかない。
再帰であろうとループであろうと中ではただジャンプしてるだけだよ。
(実際にはリソースの管理とかが一体化してるのでそう単純でもないんだけど。)

再帰というのがスタック操作をするループであると捉えるか、
ループというのがスタック操作を省略できる再帰であると捉えるのかは
別の側面から見ているというだけで同じことを言ってる。

どっちを軸するかという説明の仕方の違いってだけ。
0527デフォルトの名無しさん2019/01/20(日) 23:30:23.13ID:m7XAF6Qj
>>524 が聞きたいのは、それを再帰として書くことの利点だと思う。

読み書きのコストは慣れの問題で、分野によっては再帰で書くほうが慣れてるんだよ。
関数型言語の界隈は数学寄りの人が多いんだけど、数学は再帰で書くことが多いんだ。

関数呼んでるだけだから、ループ用の特別な構文がいらないってのもある。
これはどっちかっていうと言語の規格とかそっち側の都合だけど。
0528はちみつ餃子 ◆8X2XSCHEME 2019/01/21(月) 00:09:20.61ID:seIeK7lJ
あ〜、そっか。
Common Lisp 的にはそこまで積極的に何もかも (明示的に) 再帰で書くスタイルを推奨しているわけではないし、
ループ的に書く方が読みやすければそう書いてもいいんだが、
他の言語に比べれば再帰を理解している必要は有るので、
チュートリアルの類では過剰に再帰を推してる感じがするかも。
0529デフォルトの名無しさん2019/01/21(月) 08:36:01.54ID:n4GEno5f
ループはiの様なループ変数が必要だけど、これは変数への破壊的代入または再代入になる
関数型プログラミングはそれを嫌う
末尾呼び出しの最適化を前提に書けば破壊的代入無しにループが書ける
0530デフォルトの名無しさん2019/01/22(火) 03:37:24.22ID:rqabYXWq
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)
0531デフォルトの名無しさん2019/01/22(火) 18:44:06.81ID:61UMm30F
>>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だと簡単にそういうコードを書いてしまう
結局破壊的代入無しにループ書くには再起呼び出しが必須と言うだけだ
再起呼び出しは簡単にスタックオーバーフローするから末尾呼び出しの最適化は前提でしょ
0532デフォルトの名無しさん2019/01/23(水) 01:49:56.83ID:2DvRHl1Y
すげぇ歴史がある言語のわりに全然ドキュメントもライブラリもないっすね…
0533デフォルトの名無しさん2019/01/23(水) 15:13:20.89ID:I7vJASel
Forthをdisるのはやめれ
0534デフォルトの名無しさん2019/01/23(水) 16:46:55.68ID:HL71aJyT
ドキュメントがまだないのはまだ始ってないから。

もう少し待て。いつか必ずブームがくるから。
0535デフォルトの名無しさん2019/01/23(水) 18:13:57.77ID:iEoy0Btk
lisp勉強中だが他言語しばらく触った後lispに戻ってくるとコード見るだけで笑えてくる
0538デフォルトの名無しさん2019/01/24(木) 10:47:39.00ID:TePOwsZ1
Juliaってかっこいいですか?
0540デフォルトの名無しさん2019/01/25(金) 14:34:14.18ID:07wWn8gG
Juliaって何かと思ったら新しい言語か
JuliaもそうだけどASTのレベルを構築出来るマクロをLisp-like macroって言うのは違うだろうと思う
Lispのマクロはコードの見た目を変更するという至極単純で唯一無二のものだからな
0541デフォルトの名無しさん2019/01/26(土) 01:26:25.34ID:bl37ikQs
> Lispのマクロはコードの見た目を変更するという至極単純で唯一無二のものだからな
って言うのは違うだろうと思う
0542はちみつ餃子 ◆8X2XSCHEME 2019/01/26(土) 03:08:15.37ID:ixrTaENi
LISP 的なマクロというのは
「プログラムはリストであり、リスト操作によってプログラムを変形する」
と私は捉えているので、前提となる「プログラムはリスト」の部分がないと
やっぱりちょっと LISP 的とは言えないかな〜とは思う。

ただ、各言語の構文木の表現がリストと言えるかどうかはかなり微妙だし、
Scheme のように明らかに LISP 系の言語でもそのマクロ機構 (syntax-rules) がリスト操作
と呼べる範疇なのかどうかは人によって感覚が違うかもしれないというのもわかるので、
ふんわりと捉えてあげてもいいんじゃないかと。
0543デフォルトの名無しさん2019/01/26(土) 11:11:15.46ID:yVAkGzul
TclはLisp的か
0545デフォルトの名無しさん2019/01/29(火) 02:23:30.16ID:a0yta6qd
Lispってカッコだらけで視認性悪いのに何で最後に)))))って閉じるコーディングスタイルがスタンダードっぽいの?
(some
  (some
  )
)
こうやってネストと閉じカッコを対応させておけば閉じ忘れしにくくて視認性も良いと思うのだが
0547デフォルトの名無しさん2019/01/29(火) 13:01:27.96ID:yJ0I+sIY
Lisperはカッコを見ずにインデントを見る
カッコだけの行が有るとかえって分かりにくくなる
EmacsならRainbowDelemitter使うとカッコの輝度が下がって目障りでもなくなる
0548デフォルトの名無しさん2019/01/29(火) 15:54:32.57ID:tEhI5kt3
slime の C-c C-] とか一気に全部かっこを閉じるコマンドを使うから、閉じ忘れとか気にしないなあ
0549デフォルトの名無しさん2019/01/29(火) 16:25:08.69ID:e8yOd/P9
XMLのタグみたいなもんだな。XMLがそれを理由に廃れたことも含めて。
0550デフォルトの名無しさん2019/01/29(火) 21:07:40.48ID:TIeo+FQH
>>547
> カッコだけの行が有るとかえって分かりにくくなる
完全にカッコ見とるやんw
カッコつけんなエアプw
0551デフォルトの名無しさん2019/01/30(水) 12:44:23.33ID:eo/Tys4V
>>550
カッコだけの行が有るとインデントが分かりにくくなるという意味だが、わざわざ書かないと分からんか?
0552デフォルトの名無しさん2019/01/30(水) 12:52:38.76ID:Lcj20AkF
エアプさん必死やねw
0553デフォルトの名無しさん2019/01/30(水) 13:13:38.82ID:cw4gcsqU
(a))))
の部分のaだけ頻繁にコメントする時は不便に感じる

(a)
)))
にしていいよね?
0554デフォルトの名無しさん2019/01/30(水) 13:46:07.35ID:jx8GGD5s
わかる。

(hoge
(fuga
(piyo))) ; ここにコメント書くと、式全体を閉じるということに書いてる気がする

(hoge
(fuga
(piyo) ; こう書くと、 (piyo) 式にだけコメント書いてる気がする
))
0555デフォルトの名無しさん2019/01/30(水) 13:59:53.27ID:eo/Tys4V
>>553
Emacsだと(a)))で(a)だけ選択してM-;すると自動でカッコがよけて
(a)
))
になるから、そういう状況にはしょっちゅうなる
0556デフォルトの名無しさん2019/01/30(水) 21:17:23.83ID:jAE5E/lv
C系の言語から来ると最初は閉じ括弧の行がないのが気になるかもしれないが
すぐ慣れてむしろ邪魔になるゾ
というか今どきのスクリプト言語みんなそうじゃないか
0557デフォルトの名無しさん2019/01/31(木) 12:29:13.76ID:lgLgsaY3
かっこの話題になるとわらわら湧いてくる陸リスパーさん達w
0558デフォルトの名無しさん2019/01/31(木) 15:46:41.09ID:aH0rCOCG
うby最強
0560デフォルトの名無しさん2019/02/01(金) 07:48:11.81ID:eMw5OSNU
>>559
なんや急に本物て?偽物の自覚でもあったんかおまえw
0562デフォルトの名無しさん2019/02/02(土) 01:05:09.97ID:JTaE88Yv
にわか認定したい奴が沸いてんのかね
Lisperなんてカッコに嫌悪感がなければそんなに労せずなれると思うけどね
0563デフォルトの名無しさん2019/02/02(土) 07:45:51.33ID:DNtrULkT
>>562
そのセリフはせめてリスパーになってから言ったらどおや?陸リスパーさんw
0566デフォルトの名無しさん2019/02/02(土) 12:43:40.25ID:8UgzjBVu
り…陸リスパー
0569デフォルトの名無しさん2019/02/02(土) 22:26:20.61ID:zdLK2rou
>>563
陸リスパーはリスパーじゃないらしいが、意味が分からんw
取り敢えず知能指数が75程度かね
0570デフォルトの名無しさん2019/02/03(日) 11:47:11.28ID:o6ig8vkN
陸リスパーさん、案の定バカやったwww
0573デフォルトの名無しさん2019/06/15(土) 16:34:52.25ID:5WxVHbel
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の所に書けるなら書き方を教えてくれ
0575デフォルトの名無しさん2019/06/23(日) 17:17:52.99ID:MRp+xueZ
>>574
この記事見たらちゃんと書けることが分かった
自分が前に試した時は何か書き方を間違っていたようだ
取り敢えずモヤモヤが晴れたんで助かりました
0576デフォルトの名無しさん2019/06/26(水) 20:14:20.90ID:Y3pTO8/n
コードを C や perl や Lisp や python に書き換えて速度比べていたんですが
perl に速度負けしたのは、ちゃんと Lisp 書けるようになれば逆転できますかね?
処理系は CCL Version 1.11.5/v1.11.5 (WindowsX8632)

perl に負けるのは悔しいんですよ
0578デフォルトの名無しさん2019/06/26(水) 20:46:18.82ID:Y3pTO8/n
早い
まだリファクタリングしてないのにこの速さ
ありがとうございます。ここまで scbl が速いとは

0.331 C
0.616 scbl
0.749 perl
0.943 CCL
2.912 python
0579デフォルトの名無しさん2019/06/27(木) 01:23:25.87ID:dlyc1cFh
CとPerlが2倍程度しか違わないとかどんなコードか気になる
普通二桁違ってもおかしくない
0582デフォルトの名無しさん2019/06/27(木) 17:18:17.57ID:9Zxtgl6E
gcc でも gcc -Ofast -march=native でも
このコードは早さ変らなかった

Cをもっと早く走らせる書きかたはあると思う
しかしながら当面の目標は、Lispなどで
早く走るコードに仕上げることだ
0583デフォルトの名無しさん2019/09/21(土) 00:38:07.12ID:xRjuzSxf
squeakやpharoみたいな完全フリーなIDEってないの?
0585デフォルトの名無しさん2019/09/21(土) 01:59:38.19ID:vpc6CIH7
IDEを強調するならフリーなやつは存在しないんじゃない
有償ならLispWorksとかあるけど
0586デフォルトの名無しさん2019/09/21(土) 02:01:25.30ID:vpc6CIH7
おそらくこんなのを求めてるんじゃないかな
ttp://www.lispworks.com/products/ide.html
0588デフォルトの名無しさん2019/09/21(土) 17:11:00.50ID:icgczTg/
君が造ろうと思わないなら同じ理由じゃね
0592デフォルトの名無しさん2019/09/21(土) 22:17:44.52ID:9d3EeJ1d
マジアスペなのか何かのギャグで言ってるのかわかんないよw
それはわかってるし、そんなことは訊いてないんですけどw
0594デフォルトの名無しさん2019/09/22(日) 13:10:38.79ID:y42gsAly
漏れには ID:9d3EeJ1d がアスペに観える
0596デフォルトの名無しさん2019/09/23(月) 00:17:42.37ID:yOVeMM4I
質問はこれね、答えは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で困ってないとかそういうのじゃなくて
0597デフォルトの名無しさん2019/09/23(月) 11:11:12.88ID:3qdqqJ07
64bitのときって引数6個まではスタック使わずにレジスタ渡しなんだな
0598デフォルトの名無しさん2019/10/13(日) 19:14:39.59ID:5s4kkgRn
非LISPマシン(≒汎用CPU)上でのLISP処理系でCDRコーディングが流行らないのって何で?
0599デフォルトの名無しさん2019/10/14(月) 00:04:21.63ID:MCqb83NJ
CDRコーディングはメモリを節約するためのものだけど、今時そんな事する必要がないからだろ
0600デフォルトの名無しさん2019/10/14(月) 02:33:00.31ID:4dMEwq0N
結局早く走らせようとすると面倒なコードにしかならなかった思い出
0601デフォルトの名無しさん2019/10/14(月) 22:36:05.59ID:4/RblZEa
CDRコーディングでメモリ参照の局所性などは向上するのでむしろ現代のCPUで効果があるという話もある
CommonLispの場合,リストはイミュータブルでないので書き換えが発生すると間接参照に置き換わるためどこまで旨味があるかだが
0602デフォルトの名無しさん2019/10/15(火) 09:45:03.23ID:aaeMZMJi
たかがリストの参照に条件分岐が必要になるから、むしろ現代のCPUには速度的に致命的なペナルティが有る
Lispはリストの使い勝手が良いからつい何でも使い勝ちだけど、ある程度以上の可変長のデータには可変長配列を使うべきだろう
0603デフォルトの名無しさん2019/10/18(金) 01:17:14.39ID:eIYWybUZ
先生質問です!モダーンな言語に慣れた身としては、括弧よりもシンボルが大文字なことが気になります!
SQLと一緒で、なんだか怒られているような、コードに怒りの感情がくっついているような感触がします!
0604デフォルトの名無しさん2019/10/18(金) 03:05:27.14ID:YKg3bugE
クラス名とインスタンス名がどっちも先頭小文字文化で区別がつかないことや
カプセル化を事実上放棄していることについても触れてあげてね
0607デフォルトの名無しさん2019/10/19(土) 14:30:27.83ID:1oXfIKcZ
>>604
カプセル化を放棄してるってどう言う事?
プライベート変数の事言ってるなら可能だろ
0608デフォルトの名無しさん2019/10/26(土) 15:03:46.18ID:a/Ne+y1n
setf 万能な感じだけど
オブジェクトの外からsetfしたら書きかえられたり
なんてことはないよな?
0609デフォルトの名無しさん2019/10/31(木) 19:55:25.18ID:IHVIFECG
cl4py で ~/.roswell/local-projects のパッケージ読む方法がわからないです
内部的には sbcl --script をpythonから実行しているので,
これと同じことを ros runでできれば良いはず
0610デフォルトの名無しさん2019/11/04(月) 19:09:58.20ID:BHJXlzaa
~/.roswell/local-projects
~/.quicklisp/local-projects
~/quicklisp/local-projects

全部統一したい.おすすめの設定はありませんでしょうか?
0611デフォルトの名無しさん2019/11/05(火) 15:20:02.48ID:mbkTm92O
ln -s
0612デフォルトの名無しさん2019/11/14(木) 08:00:53.12ID:XNLPU+DY
Dex:get でURL エンコードは自分で変換するしかないのでしょうか
http postでHmacなる暗号化かけてpostする方法がわかりまでん
0613デフォルトの名無しさん2019/11/14(木) 16:41:31.82ID:ot2dc8Ah
https://quickref.common-lisp.net/index-per-library.html
ここに沢山あるパッケージは,名前から中身を類推するしかないの?
このパッケージはテキスト処理で,数値計算でみたいなカテゴリー分類が見たい
0616デフォルトの名無しさん2019/11/15(金) 13:23:21.62ID:76R0IrhI
あなる
0617デフォルトの名無しさん2019/11/15(金) 22:00:06.65ID:EU/v6jRR
実践CLが適価で出ていたので次に読もうということでポチりました
それを引き取りに行きましたところ
ふらーっと棚を見たらPAIPとLOLとガウディ本が適価で置いてありやがりまして
全部いっちゃいました><
まだGentle Guideの最初の方読んでるところだとういうのに…どうすんだこれ
0621デフォルトの名無しさん2019/11/16(土) 00:45:08.22ID:ITuC7LSd
>>620
なんだこれw
こんなものが有ったのか
これを最後までこなせばマジでLispマスターかもな
知らんけどw
0622デフォルトの名無しさん2019/11/17(日) 00:11:27.35ID:Rg5NJh7n
オレがLispマスターになるために、誰かHyperspecを読みやすい日本語に翻訳してくれませんか
0623デフォルトの名無しさん2019/11/17(日) 09:59:42.64ID:X9AhIAwA
はじめてなら先に Erlang やれ
Elixir じゃなくて Erlang な
0626デフォルトの名無しさん2019/11/23(土) 12:12:31.12ID:9GE+Zi9m
>>601
基本はイミュータブルって事にしておいて、書き換えなきゃならなくなった時は
都度ミュータブルに変更(≒実際にはミュータブルに見える)とかは無し?
06276262019/11/23(土) 12:16:52.71ID:9GE+Zi9m
コピーオンライトっていうもっと簡単な用語があった
orz
0631デフォルトの名無しさん2020/02/13(木) 16:16:45.93ID:Zcn6rtH0
quicklispの動作確認のためのhollow worldしかない単純なパッケージってないのでしょうか?
0633デフォルトの名無しさん2020/02/20(木) 15:29:37.90ID:TfLGY2HC
>>631
「動作確認」が何を意味するのか微妙だけど・・
Quicklisp client が入っているかどうかだけなら、REPL で

(ql:client-version)

とか打って "2019-02-16" とか返ってくるのかを見ればよさそう。
0634デフォルトの名無しさん2020/02/23(日) 16:33:42.33ID:rMYt9Lfm
Pattern matchで一番使われているのはoptimaなんです?
速度なくて良いので、もっと実装が単純なの探してます


それからquicklispにonlispのコードまとまってるパッケージないですか
0635デフォルトの名無しさん2020/02/23(日) 18:30:00.29ID:ZlpvVH2U
実装が単純ってのを基準にライブラリ選定するやついるか?
quicklispに教材は集積されてないんじゃないの.知らんけど
0636デフォルトの名無しさん2020/02/23(日) 19:56:19.38ID:buSGB+sr
コモンリスプの最初の教科書として『これが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))))))

ワーニングのメッセージもコピペしたほうが良いですか?
0638デフォルトの名無しさん2020/02/24(月) 00:14:28.43ID:ADNywXxE
Macro expandの結果がslimeだと
#1=
みたいのなくて、全部代入されて展開されるのに
コマンドラインからだと、ところどころ出てくる

この代入みたいなの出てこないような設定出来ないのでしょうか
0639デフォルトの名無しさん2020/02/25(火) 02:41:22.28ID:7uXswvK3
>>636
ここを
(symbol-function fun)
こうすると動きます
(function-lambda-expression (symbol-function fun))
0642デフォルトの名無しさん2020/02/26(水) 15:29:30.05ID:DHrVhTjk
…動いたは動いたけど、目的の動作ではないような…
関数定義のプリティプリントをするマクロなんですが…
0643デフォルトの名無しさん2020/02/26(水) 22:35:08.55ID:hFQlDZVm
>>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 を返してきました)。
0645デフォルトの名無しさん2020/03/05(木) 03:14:59.23ID:2Ey3ZIKM
httpクライアントはdexが一番メジャーなの?
0646デフォルトの名無しさん2020/03/05(木) 21:05:07.28ID:h922Dn8C
>>529
ループで書くと変数への再代入が必要になるから〜
って関数型言語推しの文脈でよく言うけど
それが言うほど問題になる場面ってどれ位あるかね?

それにRubyのeachとかイテレータだと
ループ変数は隠蔽されててあまり使わないし
ますますそんな実害はない気がしてくる
0647デフォルトの名無しさん2020/03/05(木) 21:08:11.89ID:h922Dn8C
>>542
Lispのプログラム自体もリストでしかないから
処理とデータの区別が必要なくて
メタプログラミングがしやすいって理屈は分かってる

問題はメタプロの生産性が本当にメチャクチャ高いかどうか?
Lisp信者(というか教祖の)ポールグレアムとかはそう言ってるけど
ライブラリやドキュメントの充実の方が生産性上げる気がしてる
0648デフォルトの名無しさん2020/03/05(木) 21:09:30.43ID:h922Dn8C
>>545
そうすると行数が増えるのがイヤなんだろうと思う
最後にカッコが重なるのはオレもイヤだが
0649デフォルトの名無しさん2020/03/05(木) 21:12:16.28ID:h922Dn8C
>>576
今どきもう処理速度より
人間が読み書きする速度の方が重要だろ?
でそれはPythonの方が早そうな気がするけど
0650デフォルトの名無しさん2020/03/05(木) 21:14:22.56ID:h922Dn8C
>>583
>>587
Emacsってフリーソフトの草分けじゃん?
エディタだけどIDEに近いんじゃないの?
欲しい機能はLispで自力実装するになるけど
0653デフォルトの名無しさん2020/03/05(木) 23:47:34.83ID:5jJ4qXDk
>>647

> ライブラリやドキュメントの充実の方が生産性上げる気がしてる

ドンキ行けばなんでも売ってるから買えば済むけどそれは生産性高いのか
ドキュメントの充実とかいうのも所詮Qiitaにコピペできる手順が書いてあるかどうかだろ

> 問題はメタプロの生産性が本当にメチャクチャ高いかどうか?

最近のわかりやすい事例でいうとライブラリやドキュメントが充実してないような量子コンピューティングでlisp使われてるわな
d-waveやrigetti
ゼロスタートでの生産性高いから採用されてんじゃないの
昔からlispはそういうところで使われてきたんだよな
0654デフォルトの名無しさん2020/03/07(土) 03:25:56.46ID:XQNdi0wU
(list 1 2 3) = '( 1 2 3) ?
0655デフォルトの名無しさん2020/03/07(土) 08:36:38.96ID:meF2wfp3
>>653
>ドンキ行けばなんでも売ってるから
>買えば済むけどそれは生産性高いのか

どうでもいいけど
PHPってドンキみたいな雰囲気だよな
0657デフォルトの名無しさん2020/03/11(水) 22:30:07.23ID:XKsESyyO
>>656
?の意味わ?
0658デフォルトの名無しさん2020/03/17(火) 18:02:01.30ID:StMMVjQO
実践common lispの古本買ったのですが
LispBox落としてきて本に載ってるEmacs?Slime?わかんないけどショートカットキー試したら
ほとんど通らなくて絶望してる

前の持ち主はそこまででこの本捨てたみたい
(ここまではラインマーカーあり、手あと付きまくりで汚れてる
水滴の落ちた跡があるけど、泣いたのかもしれない)
0659デフォルトの名無しさん2020/03/17(火) 18:21:44.91ID:XIub247n
なるほど
C言語の本でもポインタの説明が間違ってて詰むパターンか
0661デフォルトの名無しさん2020/03/17(火) 21:41:37.12ID:v8kclrng
ポインタの話を出して「それに比べたらお前の絶望なんて大したこと無い」ってか
Cはドメジャー言語、Lispはマイナー言語だぞ
0662デフォルトの名無しさん2020/03/17(火) 21:59:51.74ID:lqRJWXI0
実践common lispってそんなHow To本だったっけ?pathnameのはなしをよんでうげっとなったような記憶が。
0663◆QZaw55cn4c 2020/03/17(火) 21:59:55.51ID:1bTOUrPD
>>661
lisp はマイナーなんかじゃなく、神話ですよ
0664デフォルトの名無しさん2020/03/17(火) 22:03:05.74ID:v8kclrng
読者も書籍も少ないという意味では同じ意味だろアスペ野郎
0665デフォルトの名無しさん2020/03/17(火) 23:19:20.47ID:lLOB6fa+
lisp初心者とプログラミング初心者のどっちなんだってやつ多いよな
pythonおすすめ
0666デフォルトの名無しさん2020/03/18(水) 07:25:29.43ID:HGjE4cJ6
冒頭Emacsの使い方から書いてある、環境も提供してる
hello worldから書いてある
プログラミング初心者が手を出しても全くおかしくない本だと思うけどね
0667デフォルトの名無しさん2020/03/18(水) 08:27:48.33ID:e34uYQaF
LispBoxですが

カッコ全閉じ C-c C-q → undefined
関数コンパイル C-c C-c → [Condition of type SIMPLE-ERROR]
→戻るとリターンで評価が効かなくなってる
関数コンパイル M-x slime-compile-defun → 通る

どうすれば?
0668デフォルトの名無しさん2020/03/18(水) 10:11:26.98ID:i4GVxo4Z
>>666
全くの初心者でも無いです
大学ではEmacsでレポートを書いていたし、Schemeの本も読みました
再帰は多少慣れています
0669デフォルトの名無しさん2020/03/18(水) 11:01:54.67ID:YWqpfRsi
>>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))
0670デフォルトの名無しさん2020/03/18(水) 11:04:51.07ID:YWqpfRsi
なおREPLでは Ctrl+Enter で「カッコ全閉じして評価」ができます:

CL-USER> (list(list(list ;ここで Ctrl+Enter すると

CL-USER> (list(list(list)))
((NIL))
CL-USER>
0672デフォルトの名無しさん2020/03/18(水) 11:39:38.76ID:i4GVxo4Z
Lisp Cabinetも入れててこっちはslime2009-10-15でちょっと古いのか
*slime-repl sbcl*でC-c C-]が未定義と言われます
0673デフォルトの名無しさん2020/03/18(水) 13:08:33.20ID:c+xBBuM1
>>672

>>669 の言う通り、 *slime-repl sbcl* では C-c C-] は定義されておらず、使いたければ 669 と同じ手当てがいる。

SLIME 2.24 (May 2019) でも slime-repl には C-c C-] は定義されていないみたい。
.lisp ファイルを開いた時の slime-mode には定義されてるけど。
0674デフォルトの名無しさん2020/03/18(水) 14:08:10.88ID:YWqpfRsi
>>669の「設定」はいったん忘れてください。
lispboxはemacsのユーザー設定を読込むようになっていないので意味のない提案でした。

とにかく、拡張子が .lisp のファイルを作ってそこで試してみて。
そこでなら C-c C-] も C-c C-c も使えるはずです。
0675デフォルトの名無しさん2020/03/19(木) 01:34:16.75ID:kzb4sQto
閉じ括弧は自動入力に頼るべきだし、実際閉じ括弧を入力する事は皆無だ
0676デフォルトの名無しさん2020/03/20(金) 18:05:58.17ID:X6A/hsgw
実践common lispは序章に common lisp に興味があるすべての人に向けたもの とは書いてあるがプログラミング初心者にも向くとは書いてない
python,java 他の言語と比較した解説が多い
ターゲットは lisp に興味のあるプログラマだろ
0677デフォルトの名無しさん2020/03/20(金) 21:06:17.87ID:VDRHLCp0
だからって前提としてる環境で通らない事を書いてたら読者可哀相ではある
0678デフォルトの名無しさん2020/03/21(土) 07:40:12.04ID:5WNgmSYJ
実践は少なくとも10年前は本の通りそのまま動いたよ
前提としてる環境は2005年の環境な
翻訳は2008年らしいがとっくに絶版らしい

lispboxの代替品はいまならportacleだろうな https://portacle.github.io
0680デフォルトの名無しさん2020/03/21(土) 11:41:58.56ID:fW5UJNuz
サバイバルなんとかって同人誌には導入の方法とか書いてないの?
0681デフォルトの名無しさん2020/03/21(土) 18:21:48.79ID:lNZ58Hb9
HDD買ってきてlinux入れるしかないかなぁ
どうせならlibreboot化してみっかなCL関係ないけど
0689デフォルトの名無しさん2020/09/04(金) 00:51:07.26ID:2/DOh4aN
 思う所あって、とりあえず入門しようう・・・と

ttp://www.nct9.ne.jp/m_hiroi/clisp/index.html

 ここ見ながらSBCLをWindowsに入れて始めました。
 ・・・うん、流石に数日で制覇は無理だし、当分はリファレンス見ながらじゃないと文法は頭に入らないかな。
 ただもっと疑問なのは・・・私はインタプリタがBASIC以来で30年ばかりブランクあるのだけど、LISTやNEWやRENUMみたいなインタプリタへの命令ってどうなってるんでしょ。
 定義した関数は実行できるけどコードはもう見れないなんてコトないよね。変数は確認できるけど。

 ググって他の入門テキスト当たっても特に記述がないってのはどういうコトなんだ・・・かろうじてLOADがあった程度とか。
 見落としてるのかな。
0690デフォルトの名無しさん2020/09/05(土) 14:10:39.36ID:Cjkr8hQ1
以下のエラー、対処法わかりますか?
$ 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
0691デフォルトの名無しさん2020/09/05(土) 14:27:23.90ID:D6IgUwp/
The symbol "LOAD-ASD" is not external in the ASDF/INTERFACE package.
0692デフォルトの名無しさん2020/09/05(土) 22:32:24.15ID:dAk5cbFF
asdf よりも、日本人が作った、anyenv を使えないの?

漏れは、Windows 10, WSL, Ubuntu 18.04 で、
ruby 2.6.6, node 12.16.2 を入れた

anyenv は多言語向きで、rbenv, nodenv, pyenv, phpenv などを同じ使い方で、統一的に扱える
0694デフォルトの名無しさん2020/09/06(日) 05:38:11.06ID:2WTO0asO
>>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
06956922020/09/06(日) 07:12:16.75ID:rmQ2DAlK
anyenv install --list
と入力すると、Lisp には対応してなさそう。すまんかった

Renv, crenv, denv, erlenv, exenv
goenv, hsenv, jenv, luaenv, nodenv
phpenv, plenv, pyenv, rbenv, sbtenv
scalaenv, swiftenv, tfenv
0696デフォルトの名無しさん2020/09/08(火) 08:07:17.84ID:+pvHuz8t
lemはしょっちゅう壊れるから開発に参加できるくらいのスキルないと常用はむり
エディタの拡張書いてもAPIの変更ですぐ動かなくなるからエディタ好き以外には時間の無駄
0697デフォルトの名無しさん2020/11/04(水) 21:31:17.19ID:9sV4Q56c
質問失礼します
LISPでLinux向けのDAWアプリケーション(seq24のような)小規模なものが作りたいのですが, SchemeとCommonLISPの選択だと後者で間違えないでしょうか?

また音系ライブラリの充実度とかも教えていただければ助かります
環境はdebianのsidにemacsとroswellです。
0698デフォルトの名無しさん2020/11/05(木) 15:01:20.13ID:B9BQMK/O
puredate使った方がいいでない?tcp/udpも使えるし、lispでサーバ書けばいいんじゃない
0700デフォルトの名無しさん2020/11/14(土) 11:02:53.04ID:7fHOS6NH
道はnilを生ず、nilはアトムを生じ、アトムはS式を生じ、S式は万物を生ず。なるズルい帯に釣られて初めてLISP買っちまった
初めての人に向けた宣伝文…?
0701デフォルトの名無しさん2020/11/17(火) 01:07:55.57ID:k3t+4yVm
map族で遊んで楽しんでるけどmapconだけ名前が変なの気になって仕方ないたすけて
対応するcar版のmapcanのnはnconcでわかるけどじゃあなんでmapcdnじゃないんだ
0702デフォルトの名無しさん2020/11/17(火) 18:02:14.18ID:p11aQciX
漠然と concatenate の con かなーと思ってた
じゃあ can は何だよってなるけど
0703デフォルトの名無しさん2020/11/17(火) 19:37:22.55ID:j2x0ZSt2
あ、それでいいかありがとう
map CAr N-conc → mapcan
map cdr n-CONc → mapcon
腑に落ちた
0704デフォルトの名無しさん2020/11/21(土) 16:35:59.11ID:S5mOPbU/
多値をわざわざ実装する意味って何なんだろう?
truncate/remainderを一気に得られるのは確かに便利だけどさ
コンシング無しだからパフォーマンスが良い?

自分で書くときも(数個の、一様でない)リストを返すより、多値で返すのが良い習慣?
0706デフォルトの名無しさん2020/11/22(日) 06:14:03.03ID:WGYXQsl7
基本的な意義は最適化への期待だね。
リストで書くより意図が伝わりやすいから、実際には使われない値の計算を省くとかしやすいかもしれない。

多値を普通の値として扱うと先頭要素が返るってのもある。
メインとオマケみたいな関係にある値を多値で返すと、メインの値へのアクセスには car とか通さなくていいとか。
一つの値だけを返してた関数を拡張するとき、多値なら互換性を壊さずに他の値も返せるとか。


ただ LISP はリスト処理が得意な言語だから、迷ったらリストを使う方向でいいと思う。
0707デフォルトの名無しさん2020/11/23(月) 11:01:48.80ID://ZJMWym
なぜ未だにLispなのか?
Lispはメモリアクセスが演算と同じかむしろ早かったような時代に作られた言語。
キャッシュ付きのパイプライン方式のプロセッサとは相性が悪い。
メモリをポインターでたぐりまくるのでは性能が出ない。
また、スレッド並列化や分散並列化は難しいだろ?
0708デフォルトの名無しさん2020/11/23(月) 11:37:20.81ID:Trrr2V1M
型付けまくって配列メインならcに並ぶパフォーマンス出るだろ
まああんまり使い過ぎるとlispっぽくなくてlispである意味なくなっちゃうんですけどね
0710デフォルトの名無しさん2020/11/23(月) 13:36:57.00ID:Trrr2V1M
そもそもパフォーマンスの定義がlispでは難しい
極論を言えば環境に依らない計算は全てコンパイル時に済ますように(普通な見た目で)書けるし
他言語コンパイラにも定数畳み込みあるけどほんと微々たるもんだ

まあ、個々に良いとこ挙げても結局Lisp Is Syntactically Pureが全て
これがただ一つの本質
0711デフォルトの名無しさん2020/11/23(月) 15:12:17.50ID:b5+ZYIc/
なぜlispなのか。そりは処理系がつくりやすいからでは。で、なぜForthではないんかと。
0713デフォルトの名無しさん2020/11/24(火) 05:55:47.58ID:J3kRb2mj
構文解析がほぼ不要だから、簡単な LISP 処理系を書くってのは演習とかで見かけるけど…
それを目当てに言語を選ぶことってあんまりないと思う。


LISP の強みはマクロだよ。
リスト処理が得意な言語で、コードもリストとして書いてるから、メタプログラミングがやりやすい。
0714デフォルトの名無しさん2020/11/24(火) 10:56:20.49ID:4gr82zpM
そうなん?Luaみたいにゲームのシナリオスクリプト記述用として需要があるのかと。
うちゲームじゃないけど使ってるよ
0715デフォルトの名無しさん2020/11/25(水) 00:14:34.22ID:qDndbwAs
スクリプト用に LISP 組み込む形って、 Emacs くらいしか生き残ってないよね…
相性自体は悪くないはずなんだけど。

Lua とかのほうが手を出しやすいんだろうね。
0716デフォルトの名無しさん2020/11/25(水) 01:05:02.44ID:qa6Te+em
ポータブルが取り柄、知っていればどんな環境でもlispにできる
(gcを考えない)lisp実装はワンライナーまであるし
慣れた関数マクロも使いたきゃ足りなきゃ実装例コピペすればいい
schemeはwebの仕様書に網羅的な実装例、clは…なんだろ
cltl2、特にappendixあたりか
おれはbackquoteの実装例が全くプリミティブじゃないのに驚いた
0717デフォルトの名無しさん2020/11/25(水) 01:16:03.51ID:qa6Te+em
拡張言語にemacsみたいな生lispはちょっとなあ…
今更lispを勉強しようって人少ないだろうし、せめて()を隠蔽しないと

emacsはオモチャとしては惹かれるんだけど、正直vimの方が使いやすいごめん(ポールもvi派だし)
0721デフォルトの名無しさん2020/11/25(水) 10:50:31.91ID:m/dxKoiX
今時のcommon lispの開発環境はroswellとemacsをインストールすれば完了?
0723デフォルトの名無しさん2020/11/25(水) 11:50:45.95ID:qa6Te+em
roswellは仮想環境作って真面目な開発&テストするならオススメ
clの処理系はオプション指定法がバラバラなのでそれもラップしてくれる
rcファイルもroswellが管理する

カジュアル用途ならオススメできない
ホーム直下の深い階層にバージョン違いの処理系やライブラリがバージョン毎にズラズラ
普及してるsbclとclispを生で普通に使えばよいよ
2種類rcファイル書くくらいなんでもない
07247232020/11/25(水) 13:43:13.28ID:oErTV+Ij
えっとつまり複雑なので初心者には何が何だか分からんくなるのがオチ、ということ
07267212020/11/25(水) 20:12:44.90ID:81nZxk7t
>>723
5年位離れてたわけで全くの初心者ではないんだ

>>722
完全な盲点だった、Personal Edition試してみる

ふたりともthnks
0727デフォルトの名無しさん2020/11/26(木) 15:02:52.37ID:tQ2i07w3
上の人ではないのだけれどLispworksでSLIMEみたいに関数の仮引数をミニバッファに表示させることはできますか?
0730デフォルトの名無しさん2020/11/26(木) 19:07:14.13ID:tQ2i07w3
C:\Program Files\LispWorks Personal\lib\7-1-0-0\examples\editor\commands\space-show-arglist.lisp
をロードしたら表示できましたありがとうございます。
0731デフォルトの名無しさん2020/11/26(木) 19:18:00.22ID:eYZ/oymH
quickdocsのサービス終了してたんだけど代わりになるようなサイトできたの?
それとも純粋に終了しただけ?
0737デフォルトの名無しさん2020/11/26(木) 21:58:41.59ID:GUNaPZAO
>>731
情報がふるくなっていたので古い情報を掲載するなら閉鎖しろと文句をつけた方がおりましてそれをうけて情報を更新するのではなく閉鎖という経緯
文句をつけた方が責任をとるべく代りのサイトを構築中
0739デフォルトの名無しさん2020/12/01(火) 22:09:26.54ID:7sFPB0J6
>>737
>>731

ググれば見つかる。
初めて探したけどすぐ見つかった。
0742デフォルトの名無しさん2020/12/05(土) 07:13:44.24ID:xYxBposk
質問です。
(ql:quickload :burgled-batteries)
としたら、
Unable to determine Python include directory.
といわれます。
どうしたら良いのですか?
0744デフォルトの名無しさん2020/12/14(月) 17:59:11.95ID:R1A1Q73A
「Lispは数学そのものです」って言われてるけどどの辺が数学なのですか?
Lispを深く学べば分かる?
0747デフォルトの名無しさん2020/12/14(月) 22:47:22.40ID:w+G2gx4f
ラムダ計算を元にしてるからだろうね
ただ関数型言語はみんなそうだけどね
0748デフォルトの名無しさん2020/12/16(水) 13:57:03.43ID:4v/YyiUF
その手の謳い文句は(マクロや状態を考えなければ)文法が数学でモデル化しやすい程度にシンプル、意の事が多いとおもう
まあ数学程度で測れるほど本気のlispは浅くないから真に受けんな
0752デフォルトの名無しさん2020/12/25(金) 23:52:52.13ID:eFBWMWd+
luaはかなり早い段階で商用ゲームに組み込まれて成功してるな
homeworldシリーズとか
なぜなのか
0756デフォルトの名無しさん2020/12/26(土) 17:32:13.19ID:dAAAQq7y
Julia
0758デフォルトの名無しさん2020/12/29(火) 09:19:59.20ID:IpOZccOp
>>753
んなアホな、Fortranに限らず科学計算界隈の慣習だろ、意識高い系に流行ってるJuliaも1ベース
0760デフォルトの名無しさん2020/12/29(火) 18:01:49.07ID:PE0cUsk/
>>758
ゲームに組み込むには、ゲーム自体がC(C++)で作られてるから、0ベースじゃないとワケわからなくなる
0761デフォルトの名無しさん2020/12/30(水) 12:03:40.00ID:mB8dSyUZ
まあそれは仕方ないんでね
Fortranはデフォルトがそうなだけでインデックス範囲は負も含めて指定できるし好きにしたらいいよ
むしろcへ組み込む用途で問題なのはcと互換性のある型や呼び出し規約、メモリ配列使ってるかどうかだろ
clにcffiがあるように、Fortranもcと互換の型も使えるようになったし、cでは速度が足りない数値計算ライブラリの多くは比較的書きやすいcをグルー言語にするのが主流
0762デフォルトの名無しさん2020/12/30(水) 12:11:05.81ID:mB8dSyUZ
Guy Steeleはほんと天才だと思うわ
cltl2はバイブル、嫌々使われてた古代言語Fortranを魔改造してHPC界を独占
Java?知らない子ですね…
0763デフォルトの名無しさん2020/12/30(水) 21:14:41.53ID:Fl1Xq86P
>>762
762みたいなひとはcltl2でGuy Steeleが考えた部分がどれだけあるとおもってるの?
すべて考えたとおもっている?それとも1割くらい?
0764デフォルトの名無しさん2020/12/30(水) 22:03:02.87ID:mB8dSyUZ
rationale的な事や不採用になったよ注釈とか見る限り結構標準に関わってるんじゃないの
セカンドオーサーになってるschemeよりは割合少ないと思うけど、なんか読み物的なのないんかね?
0767デフォルトの名無しさん2021/01/08(金) 15:33:14.87ID:P1vdNW4e
R Studioから、Common Lisp(SBCL)のREPLを使えるように出来ないのかな?
0768デフォルトの名無しさん2021/01/22(金) 15:32:52.46ID:SKKILF9F
一番バグが少なくなる言語は何だろうと思って検索してたんだけど
Lispのバグ発生率はどんな感じ?
0771デフォルトの名無しさん2021/01/25(月) 14:15:55.11ID:KT5/fGKR
ありすぎるけどtraceとmacroexpandパワーでデバッグは楽なので気にすんな
disassembleやfunction-lambda-expressionやsource-location系もたぶん処理系依存?(大体あると思うけど)
ちょっとしか触ってないがschemeはインスペクタが統一されてない感じ?がある
0772デフォルトの名無しさん2021/01/25(月) 14:17:00.31ID:KT5/fGKR
形式的に見つけられるバグは絶対許さない言語はML系だろうな、ocamlとか
0773デフォルトの名無しさん2021/01/25(月) 22:05:41.34ID:eqLbENm4
traceとmacroexpandパワーでデバッグが楽ちんだとおもったときが一回もない
0774デフォルトの名無しさん2021/01/26(火) 21:21:48.32ID:+x6NTk+g
う、うむ…
lisp2dotおすすめ
慣れると変な繋がり方してるのぱっと見でわかるようになる
0776デフォルトの名無しさん2021/01/28(木) 04:27:57.25ID:52TUUvk8
>>775
他言語だと好き勝手に投稿されてるマネージャが主だけど、qlはちゃんとメンテ精選してる人が居るのでありがたいよ
トップライブラリならちゃんと開発が回ってるからいいけど、準有名程度くらいだとオリジナルの更新数年無し、個人フォークが何十もあって、どれ使えばいいか&何が違うかよくわからんやろ

ただインストーラとしてはすごい便利なんだけど、qlコマンドは殆ど呼んでないな
あちこち要らないとこ読みに行って起動に10秒かかる(よね?)
セットアップでrcに追加される"quicklisp/setup.lisp"を消して、勝手に起動しないようにすると快適
(require 'asdf)で置き換えてqlのディレクトリをパスに加え、(asdf:load-system 'sysname) 等で読み込めば一瞬だし、当然バックエンドのasdfのapiの方が粒度が細い、再コンパイルも防げる

ffi等含め静的にlispイメージをダンプして普段使いするよりずっと便利
0777デフォルトの名無しさん2021/01/28(木) 04:41:35.03ID:52TUUvk8
月例更新と各プラットフォーム&処理系のグリッドビルドテストまでしてるのに、肝心のqlクライアントの最新版が8年前更新のゴミクズなのはなんでなん
教えてエライ人
0781デフォルトの名無しさん2021/02/06(土) 04:19:51.16ID:oQfB5lBJ
最近書かれたというか、最近のCASのバックエンドはほぼほぼmaximaだったりする
歴史こそ古いが、急にフリーCASシェアNo1(たぶん…)になったので
PythonでもCASをやってるけど、Pythonで一番高機能&人気あるSageMathの高度な部分はほぼmaximaラッパで、ブロブである必要が無い部分はサブセットのSymPyに投げる構成(あと少しのmagma

maxima自体はalgol風に書くんだけど、algol度で言えばPythonに劣るし、もちろんlispでも書けるけどちょっとワークアラウンドが面倒…
0783デフォルトの名無しさん2021/02/06(土) 16:16:42.00ID:mt4J2iOm
lemをインストールしたのにコマンドラインから認識しない…
roswellは入ってて動いてるんだけど
0785デフォルトの名無しさん2021/02/07(日) 07:44:25.19ID:A1tdyoeU
lispで書けるvimがあれば最高なのになあと思ってたらlemが出たけどまだ時期が早い
応援だけしてる
0787デフォルトの名無しさん2021/02/08(月) 12:20:16.02ID:fHsImmU3
まださわりだがClozureCLなかなかいいな
objcのインターフェース持ってる関係でtcl/tkで面倒なことしなくてもいいし
スタンドアロンも作れる
とりあえずslimeで使えるようにしてぼちぼちやってみるわ
0788デフォルトの名無しさん2021/02/08(月) 15:14:00.45ID:FcZ190S6
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が嫌いなだけだったり…
暗黙のアクセサ作ってくれて、それ故に人のコードも暗黙の了解で読めるのはありがたいけど
0789デフォルトの名無しさん2021/02/08(月) 15:20:42.83ID:FcZ190S6
パフォーマンスは気にしてない

でも多分*package*から見えるパッケはgcされないはずだから(見えてるからそうだよね?)

入力受けて吐いてすぐ終了のプログラム以外ではちゃんとdelete-packageする必要がありそう
0791デフォルトの名無しさん2021/02/08(月) 15:30:16.27ID:FcZ190S6
携帯で適当に書いたから、今見直しておかしいとこいっぱいあるけどその辺は見逃して下さい
:cyanは自己評価だからsetfできないとか、(symbol-package :cyan)とかで通ったっけ
0792デフォルトの名無しさん2021/02/08(月) 15:39:43.51ID:FcZ190S6
いやいやそもそも:cyanはkeywordに住んでるので、string designatorとして適切であっても、symbol-*に渡す時はシンボル'cyanですね
対話的に使ってる時は便利だけど、白紙から書くと間違いまくってるのがこの手法の怪しさを証明してるかも…
0793デフォルトの名無しさん2021/02/08(月) 17:09:30.27ID:A57k4pYD
> なんか不都合あるのかな?

議論する価値ない手法だとおもうけどさ
他人とコードをシェアしないで一人でかくのはいいんでないか?
パッケージはhash-tableで実装されているから構造体よかhash-tableが便利いうてるのと大差ないわな
perlのパッケージ調査してみれば?
0794デフォルトの名無しさん2021/02/08(月) 18:22:21.06ID:EF6MW318
>>793
その辺はわきまえるよ

処理系の実装まで思い至らなかったので、記法だけを見てハッシュとしての特性を考えて無かった

標準のhashはネストしたときトリッキーなので、qlからaccessライブラリやマクロを駆使した中置アクセサが提供されてるけど、何もuseしないパッケージを使えば素直で性能も出そうだね
特にaccessはjsonとか読む用で、疎なテンソルの扱いとか考えてないし

早速ベンチしてみる、ありがとう!
0796デフォルトの名無しさん2021/02/08(月) 21:19:48.59ID:A57k4pYD
シンボルの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))
0797デフォルトの名無しさん2021/02/08(月) 22:30:06.33ID:WYlwG+td
再帰的にパッケージ作ってはimport でホームに設定してるけど…やっぱり筋が悪かったですごめんなさい

一応軌跡だけ
デフォルト値はエラーをhandler-bindで捕まえる
cl-userの(list-all-package)が汚れるからcl-userから先頭以外はuninternして、でも参照は保持して…と
hs見たらdelete-packageやuninternしてもアクセスは許されるがpathologicalなのでチェックは行わないとか書いてる
怪しからん事になってきた

>>796
lisp5らしい方法ですね
propertyスロットに入れたのに、value slotにアクセスしようとしていつも怒られるからあんまりやらないけど…
情報付けたいけどvalueスロットが既に埋まってて、それがライブラリ由来で手を入れたくない時とかの非常口として稀に役に立つ
0798デフォルトの名無しさん2021/02/08(月) 22:35:25.83ID:WYlwG+td
sbclではcl-userからのfind/list-all-packageに引っかからなくても普通に生きてるみたい
0799デフォルトの名無しさん2021/02/12(金) 01:40:00.02ID:jvXjcedJ
どれくらいplist(用のセル)が使われてるんだろうかと(do-external/all-symbols (s :clとか色々) (when s (print s)))してみたらinternalには意外に使われてた
まあ殆どデバッグ用のタグのようだが
0800デフォルトの名無しさん2021/02/14(日) 06:07:46.29ID:QgaFclDV
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.
0801デフォルトの名無しさん2021/02/16(火) 17:55:44.18ID:05vP8Ot3
たのしそう
なんですげー細長いのかすらもよく分からんが
androidだとeclのreplがあるけど残念UIで殆ど触ってない
外付けBluetoothキーボード安いの買ってみるかな
0803デフォルトの名無しさん2021/02/16(火) 22:06:52.79ID:05vP8Ot3
ポン叩くとnilが生じ、クルッと( )で囲んだり、ピンチで←(こ う)→引き伸ばしたり、そこへ(flick me)をフリックで放り込んだり(こ (flick me)う)したいです

例えはプログフォームなことを忘れてたら
ここを(kar | kadar...)こうシュッと分裂(kar ) ( kadar...)させてシュッと((kar ) ( kadar...))こうする感じで
よろしくおねがいします
0804デフォルトの名無しさん2021/02/16(火) 22:16:37.94ID:05vP8Ot3
paredit/vim使ってるけど脳内操作感はこんなんだな
vimでジェスチャーは難しそう?
:nnomap <left-mouse> ,@(スプライス/paredit)みたいのはタブレで桐南るんだろ?
マウスなら左右中×シングルダブクリの6パターン使えるが
0805デフォルトの名無しさん2021/02/16(火) 23:05:06.72ID:82m2i+/K
play storeに転がってるvimの投げやりなポート触る限り、矩形選択が使えそう?
範囲だけで動きが追えないが
キーボードフリーvimなんて、と思ったけどふと試した音声入力が結構戦える事に気づいた(約物とauto-capさえ切れば)
修飾キーあんまり使わないからだね
:、escよく使う大文字修飾コマンド、モード切替あたりはリマップする必要があるが
(par、)renでいこう
0807デフォルトの名無しさん2021/03/04(木) 00:09:41.26ID:p41hv1JI
hsもcltl2も大体読んで細かいとこ気になってきたらansi/isoも読むべき?
60$とえらく高いし製版の評判ボロクソだけど
ANSIに持ち込んで版権付く直前のドラフトがansi-cl.psでググって出てくるけどどのくらい違うんだろ、並べて読まないとhsとは違いが分からんが…
処理系作成者以外が参照する準公式文書でフリーなのは以上3つで尽きてるよね?
もし買った熱心な方いたらお願いします
0808デフォルトの名無しさん2021/03/04(木) 00:29:46.91ID:p41hv1JI
紙のスキャンでocrすらしてない名ばかりpdf、スキャンが斜めってて端の方の文書が欠けてると聞くと、むしろ怖いもの見たさが湧く
c/c++のように違法アップロードが見当たらないのはclの民度が高いのか、もっと高額だからか、それとも単に需要がないからなのか…
0809デフォルトの名無しさん2021/03/04(木) 02:23:20.12ID:tD3BuSri
情報元にドラフトと内容の違いはないというのも書いてあったよな
0810デフォルトの名無しさん2021/03/04(木) 12:33:01.96ID:CuM732tt
>>809
そうなの、ありがとう
じゃあ古代のマニュアルでも読んでた方がむしろcons/prosを学べそうだな
0811デフォルトの名無しさん2021/03/04(木) 13:48:00.83ID:CIINzG5o
無理矢理なPDF版よりも、むしろ紙の仕様書が欲しい
AmazonのPODで売ってくれたら絶対買う
0812デフォルトの名無しさん2021/03/04(木) 15:02:38.87ID:CuM732tt
紙の持ってるとほんといいね
寝ながらcltl2の余白に書き込みまくってる、枕にも丁度よい
amazon中古送料込み450円なんでためらいもない
0813デフォルトの名無しさん2021/03/07(日) 21:32:46.67ID:xqIC71Yx
誰か教えてください
CLOSで デストラクタ的な事をするにはどうしたらいいんでしょうか?

(defmethod delete ((o myclass))
~disconnect DB connection とか colse socket とか~ )

(let ((obj (make-instance 'myclass))) ... )
参照が残っていなければ勝手に (delete obj) がコールされるのが理想です

少しググっても「放っておけばガーベッジコレクトされるのに何を心配する必要があるんだ?(英語) 」
みたいなのばかり引っかかってどうにも分かりませんでした
0814デフォルトの名無しさん2021/03/07(日) 21:44:41.79ID:OPAOeHk0
参照がないことを検知できないので
disconnectやらcloseやらは明示で呼ぶしかない
0815デフォルトの名無しさん2021/03/07(日) 21:54:16.38ID:xqIC71Yx
ありがとうございます
それが Lispスタイルなのですね、少しづつ慣れていこうと思います
0816デフォルトの名無しさん2021/03/07(日) 22:12:51.14ID:R8ni/s97
単に接続を確実に閉じたいだけなら、with-open-file みたいなマクロ書くけど
CLOSかぁ
0817デフォルトの名無しさん2021/03/08(月) 21:55:25.40ID:WFQsFdpL
c++にとらわれすぎc++の用語で検索するからヒットがないだけでlisp raiiで検索すると沢山でてくるよ
リソース管理だから816の回答が定石
0820デフォルトの名無しさん2021/03/11(木) 09:02:08.80ID:ifNxw6Pa
Pythonはpaulがベタ褒めしてから20年くらい追ってるけど、元はblock(不採用)として提案され、先例上げるのが通例なのに言及もなかったはずなので直接は関係ないんじゃないかな?
pepでよく言及されるのは確かだが
今だと構文マクロは却下されそうだな、面白そうなのに

ふつうの言語はASTを内部表現に採用してると思うが、Pythonは標準関数で抽出&evalを許してるのが特異で面白い
lispインタプリタ書きなどしなくとも、ノードのラベルをリストのcarと入れ替えるだけの数行のコードでフルパワーlispになる
0822デフォルトの名無しさん2021/03/12(金) 00:20:34.70ID:jnwQeQfS
>>820
うーん、ちょっと信じられん、Python の内部表現ぐちゃぐちゃじゃなかったっけ
コードで示せる?
0823デフォルトの名無しさん2021/03/13(土) 03:54:58.89ID:znyU1x9d
CCLでdexadorが使えなくて困ってるのだけどもしかしてビルド失敗してるのかな
SBCLなら通るのだけどCCLだとこんなエラーになる

ttps://i.imgur.com/uCzQQTm.png

lispの問題解決はそもそもよくわかってないのでどうしたらいいものやら
0826デフォルトの名無しさん2021/03/14(日) 16:55:20.29ID:CVMafXuR
>>797
propertyはおもむろにsetfしても怒られないので対話使用に便利

というのはさておき怒られない理由が気になる
letでそのシンボルを束縛しててもグローバルのシンボルのplist見に行くよね?
単に気にもかけられない機能だからとか?
0827デフォルトの名無しさん2021/03/14(日) 17:02:06.59ID:o+fPUrgF
ああletで束縛するのはplistという名前のvalueであって、getf 'plist 'propって書けば当然シンボルとしてのplistを見に行くわな
自己解決
0828デフォルトの名無しさん2021/03/14(日) 17:04:59.01ID:o+fPUrgF
するとpletって概念が頭に浮かぶんだけど、どう実装できるだろう?
ちょっと思いつかない
0829デフォルトの名無しさん2021/03/15(月) 00:09:02.39ID:2V51Rd3t
>>825
Drakmaも同様にだめでした
今の所どこから手をつけたらいいかわからないけど地道に調べます
0831デフォルトの名無しさん2021/03/16(火) 00:47:01.98ID:z8vZoY4R
最近Lispというものを知ったのですが、皆さんはなぜこの言語を使っているのですか?
0834デフォルトの名無しさん2021/03/16(火) 16:36:23.79ID:SXyIy3pf
遊び甲斐がある、たぶんFORTHと並んで最も面白い言語から
しかし仕事はない
間接的に地力固めにはなってる気はする
0836デフォルトの名無しさん2021/03/16(火) 16:47:09.56ID:SXyIy3pf
lisperを集めてもみんな船頭になりたがる人種だから川渡れないよなあ
伝説的なプロジェクトは大体少人数ってのが裏付けている、気がする
0837デフォルトの名無しさん2021/03/16(火) 17:51:29.58ID:le9BGxml
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自体は特に何も出ていませんでした。
0838デフォルトの名無しさん2021/03/16(火) 20:24:15.22ID:SXyIy3pf
うちはsbclなんであれだがSBCL_HOMEみないな名前の環境変数は.../lib/sbclをちゃんと指してるか?
0839デフォルトの名無しさん2021/03/16(火) 20:51:54.59ID:le9BGxml
ttps://github.com/Clozure/ccl/releases
ここを見る限りは必要ないみたいです
ほとんどは参照に成功しているようでLoadingとCommpilingが繰り返されてますね

さっきから調べてますがちょっとこれ手に負えないですわ・・
0840デフォルトの名無しさん2021/03/16(火) 21:47:53.48ID:Rsbfm/u/
そもそもどういう環境なのか書いて欲しい
エスパーするにも限度があるぞ
0841デフォルトの名無しさん2021/03/16(火) 21:56:26.16ID:le9BGxml
すみません
high sierra 10.13.6 です
経験なさすぎて手に負えません
先輩方お願いします
0842デフォルトの名無しさん2021/03/16(火) 22:14:38.72ID:5EsGrMIo
趣味悪いやつがどこまでエスパーできるか試してるようにしかみえん・・
0843デフォルトの名無しさん2021/03/16(火) 22:19:17.23ID:oighJobp
どうやってインストールしたん
CCLのバージョンは
なんでCCLの再ビルドしたん
0844デフォルトの名無しさん2021/03/16(火) 22:31:08.36ID:le9BGxml
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はビルド以外の提供がなかったからビルドしただけで他意はないんです
0845デフォルトの名無しさん2021/03/16(火) 22:34:20.43ID:Rsbfm/u/
lisper だけにエスパーは得意でございます
お後がよろしいようで…

つか、なんかcclのページに何か不安なこと書いてるね
Unfortunately, on Windows and macOS Catalina, (rebuild-ccl :full t) will not work.
0846デフォルトの名無しさん2021/03/17(水) 02:23:28.92ID:IQD2IzZ+
>>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") の場所にファイルがあれば何も問題ないはず
0847デフォルトの名無しさん2021/03/17(水) 05:48:07.88ID:kb+CEO2s
>>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自体落ちました
0848デフォルトの名無しさん2021/03/17(水) 05:57:38.64ID:kb+CEO2s
(続き)
こうなると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に頼っていいのかどうかわからなくなってきました
0849デフォルトの名無しさん2021/03/17(水) 06:03:28.42ID:kb+CEO2s
>>847のリンクを間違えました
誤 IPv4を返しているwww.niconico.jpをgetさせたらkilled: 9でCCL自体落ちました
正 IPv4を返しているwww.nicovideo.jpをgetさせたらkilled: 9でCCL自体落ちました
0850デフォルトの名無しさん2021/03/17(水) 10:33:15.58ID:IQD2IzZ+
>>847
High Sierra + CCL 環境で問題なくgetできてるよ
quicklisp周りのアップデートしたら直るんじゃないかな
0852デフォルトの名無しさん2021/03/17(水) 11:57:13.48ID:eAjGywmP
lisp.orgなる良いドメイン確保してるの初めて知った…
stanfordのjmcのhpへのリンクがあるだけ?
(いまお外でスマホブラウザftpできない)
0853デフォルトの名無しさん2021/03/17(水) 12:14:26.44ID:nm2OeIl9
ubuntsu で普通にaptでsbcl落とせたはず、ccl は知らんけど
850のコメントが正しいと思う、usocket が壊れてるとかかな
0854デフォルトの名無しさん2021/03/17(水) 12:30:51.87ID:kb+CEO2s
やってみました

? (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の管理には入っていないと思うのですがこれを組み込むべきと言うことでしょうか?
0855デフォルトの名無しさん2021/03/17(水) 16:11:31.69ID:IQD2IzZ+
>>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でも拒否られた ってのはアテにならない気がする
0857デフォルトの名無しさん2021/03/17(水) 20:29:18.59ID:IQD2IzZ+
>>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との性能差は体感では分からなかった
0858デフォルトの名無しさん2021/03/17(水) 21:56:44.29ID:kb+CEO2s
>>855
libcryptoとlibsslは自分でビルドしたのを/usr/local/libに置いてます
そんなに古いわけじゃないとは思うんですが早速更新して見ます

SSL関係はCLの標準ライブラリとして持ってるものだと思ってました・・
0859デフォルトの名無しさん2021/03/18(木) 00:04:37.76ID:txHaGLQk
うーんだめでした
CCL本体のmakeをせずrebuildもしないものと
CCL本体をmakeしrebuildも実行したものどっちも同じ結果です

[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
? (ql:update-all-dists)
1 dist to check.
You already have the latest version of "quicklisp": 2021-02-28.
NIL
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x3020023388AD>
> While executing: USOCKET::RAISE-ERROR-FROM-ID, in process listener(1).

OpenSSLの最新はmake testをパスしてます

/usr/local/libは優先パスになってるので通常そこはいいはずなんですが
quicklisp側に設定がいるんでしょうか

前から気になるのはquicklispのsetupを実行するといつまでたっても終わらないことですね
仕方ないので
rm -rf ~/quicklispで消してから
ccl ―load quicklisp.lisp
(quicklisp-quickstart:install)
(ql:quickload :dexador)
(dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)

とかやってます
0860デフォルトの名無しさん2021/03/18(木) 00:17:32.21ID:3weRgygV
そんなにこだわることかね?安定版、あわよくばプリコンパイル済の入れて差分は手動パッチの方が楽じゃないの

俺なんか素のリスプイメージから10代くらいsave-lisp-and-dieし続けた秘伝のイメージだから、もはやどうやって再現していいのかわからん
0861デフォルトの名無しさん2021/03/18(木) 00:26:02.89ID:txHaGLQk
特にmakeせずgitでプリコンパイルされているものを使ってもだめなのでよくわからないんですよね
common lispの環境もよくわかっていないので問題解決もままならないです
OpenSSLは正しく/usr/local/libに入っているのを確認しているのでそこは大丈夫なはずですが
何かしらの理由で読んでいないとかだとまずいですねえ・・
0864デフォルトの名無しさん2021/03/18(木) 02:31:51.99ID:TYZwFG+5
>>861
あと思いつくのは

・コンパル済みキャッシュ
念のため真っさらに
rm -rf ~/.cache/common-lisp/ccl-1.12-f98-macosx-x64

・Fink, MacPorts, Homebrew 経由の古い libcrypt.dylib, libssl.dylib
こいつらは /usr/local/lib/* より参照優先度が高い ( sbcl だと大丈夫な理由が分からんけど )
インストールした覚えがなくてもチェックしときましょうか

とか?
0866デフォルトの名無しさん2021/03/18(木) 14:14:43.37ID:txHaGLQk
>>864
fink /sw ~/sw はありませんでした
MacPorts /opt 以下はX11だけでした
Homebrew /opt/homebrew はありませんでした

コンパイル済みキャッシュ・・はどこにあるのか結局わからなかったので
CLLのフォルダごと削除して新しくgit cloneしました

~/.cache/common-lisp/ccl-1.12-f98-macosx-x64 はありました
他にsbclとかも入っていたので全て消しました

あとは同じように
m -rf ~/quicklisp
ccl ―load quicklisp.lisp
? (quicklisp-quickstart:install)
? (ql:quickload :dexador)
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200246AE5D>

ダメでした・・
URLによってエラーになったりならなかったりよくわからないですね

>>865
特に触っていないと思います
この間始めたばかりの素人なのでインストールガイドに書いてあることくらいしかできてないのです
そういうわけなので設定とかもしかしたら必要なのかもしれませんが全くやっていません
0867デフォルトの名無しさん2021/03/18(木) 15:56:19.49ID:TYZwFG+5
システム標準の "libcrypto.dylib" "libssl.dylib" が connection refused の原因なのか?という件

quicklisp/dists/quicklisp/software/cl+ssl-20210228-git/src/reload.lisp を編集して
どのdylibも存在しないパスに書き換えると (ql:quickload :dexador) に失敗するので「リストにあるどれか」を必要としている事は確か
そして システム標準以外を見に行かないようにすると...
少なくとも https://lisp.org, https://nicovideo.jp に関しては問題なく ( dex:get ... ) ができました

>>866
/usr/local/lib/ にインストールしたOpenSSL は大丈夫なはず!
かどうかは分からないので同じように試してみるといいかもしれない
0868デフォルトの名無しさん2021/03/18(木) 16:03:33.65ID:eM8QRv2l
動いてないの質問者1人で動いてるやつ3人くらいいる状況だと質問者の環境がおかしいとしか・・
0869デフォルトの名無しさん2021/03/18(木) 18:48:43.68ID:txHaGLQk
>>867
このように変えてみました
(:darwin (:or "/usr/local/lib/libcrypto.dylib" ;; personalized install
))
(:darwin (:or "/usr/local/lib/libssl.dylib" ;; personalized install
))

改変のreload.lispを適当に他のディレクトリに置いておいて・・

rm -rf ~/quicklisp
ccl ―load quicklisp
(quicklisp-quickstart:install)

別のシェルで 改変後のreload.lispを置き換えようとしましたが
~/quicklisp/dists/quicklisp/software のディレクトリがありませんでした

(ql:quickload :dexador) を実行するとsoftwareディクトりができます
quicklisp/dists/quicklisp/software/cl+ssl-20210228-git/src/reload.lisp が存在しているようなので
これを改変したもので置き換えて確認・・

? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200230B4ED>

だめでした・・
もしかしてreload.lispを評価していないんじゃないかとも思うのですがやり方がわからないです

>>868
多分そうなんじゃないかと思うんですが初心者すぎてどうにもならないです
お手数かけます先輩方
0870デフォルトの名無しさん2021/03/18(木) 19:55:32.23ID:TYZwFG+5
>>869 のパターンだと /usr/local/lib にインストールしたやつ「だけ」がロードされる状態になってる
俺が言いたかったのは そいつが悪い (CCLと相性が悪い?) んじゃないかということ

本当に CCL がこの reload.lisp を読み込んでいるのか気になるなら
まず全部に x つけて ( "x/usr/local/lib/libssl.dylib" みたいに ) から quickloadしてみればいい
リストに合致する dylib がねーよ...と文句言われればOK
0871デフォルトの名無しさん2021/03/18(木) 20:50:01.39ID:eM8QRv2l
Lisp以外は初心者だと思ってないから環境初期化して試さないんでしょ?
デフォ環境からカスタマイズどれくらいされてるかわからん状態でエスパーする意味ある?
手元ではappストアで配布のcclとhomebrewのデフォルトインストールのsbclで動いてるよ
usocketの環境問題の切り分けならsbcl試すべきでしょどっちもだめならlisp以前のもんだい
0872デフォルトの名無しさん2021/03/18(木) 21:25:00.91ID:txHaGLQk
>>870
やってみようと思ったんですがちょっとやり方がわからないです
というのも
~/quicklispが作られるのが
ccl ―load quicklisp.lisp
? (quicklisp-quickstart:install)

の後で
software以下のディレクトリができるのが
(ql:quickload :dexador)
の後なので
これ以降の修正しかできない感じです

どうしたらいいでしょうか

>>871
sbclだと動いてます
毎回quicklispは消してやってるので環境初期化は大丈夫だと思うんですが
皆さんには常識のこととか多分私にはわかってません
0873デフォルトの名無しさん2021/03/18(木) 21:30:32.20ID:txHaGLQk
あとはすごく気になるのが
quicklispのインストールが終わった後で
CCLを(quit)してしまうと

ccl ―load quicklisp.lisp
をやっても(ql: を評価しないし
(load #P で~/quicklispのsetupを読み込むとそこで止まります

インストール後なら(ql: は使えるのでdexadorは読み込めるんですが・・
0875デフォルトの名無しさん2021/03/18(木) 22:28:06.14ID:0KnUd1t3
>>874
早いよw

普通に環境依存の話だろうね

既に指摘されてるけど初心に返って、
環境変数全部見直すか、
タイムマシーンで以前の状態に戻すとか、
新規にユーザ作ってそれで試すとか、
そこら辺をちゃんと地道にやるしかないと思うよ
0876デフォルトの名無しさん2021/03/18(木) 22:39:03.34ID:txHaGLQk
>>875
質問する前から新規ユーザーで既にやってました
その辺は言われることなので
環境変数とかもそんなわけでライブラリパス以外は割とスカスカですね

lisp関係はここに出ている作業くらいのものなので
lisp関係の細かい設定とかそういうのは一切やってないんですよね

そういえばsbclに関して思うことがありますが
あれはOpenSSLを更新する前にビルドしてあったものですねえ・・
0877デフォルトの名無しさん2021/03/18(木) 22:54:57.42ID:0KnUd1t3
>>876
おっと失礼した

そこまでちゃんと分かってるなら後は、
変えてないつもりのものとか、
動いているつもりのものを疑ってみることを
勧めるよ
0878デフォルトの名無しさん2021/03/18(木) 23:19:23.97ID:txHaGLQk
うーん・・調べてはいるんですが手がかりがあまりにもなさすぎて
どう手をつけたものかって感じです・・
git版でも動くようなのでなぜこうなるのかますますわかりませんが・・
0879デフォルトの名無しさん2021/03/19(金) 02:10:05.85ID:6x0jzlEw
>>872
> software以下のディレクトリができるのが
> (ql:quickload :dexador)
> の後なので
> これ以降の修正しかできない感じです

「これ以降の修正」それでいいんです
(quit)状態で 修正して、起動して (ql:quickload :dexador) すると
依存するパッケージのソース変更を自動察知してコンパイルが走りますんで

今回のが openssl に起因する問題なのか不明だけど
縁の下なライブラリを自力で makeインストールするのはあまりオススメできませんね
脆弱性報告を随時チェックして...
configure オプションの推奨設定なんかを毎回調べて...
依存するライブラリ/プログラム群を必要に応じてアップデート ...
それらが Homebrew のアップデートコマンドを週一で叩くだけで済むならその方が良くないですか?
0880デフォルトの名無しさん2021/03/19(金) 03:54:01.31ID:RMQx/osX
マカーでないのでよく分からんが、うちの界隈で新しいマックはdll(dylibっていうんだっけ?)の仕様代わって大変ってどこかで聞いた
invarid/unsafe accessとかそんな感じのエラー吐いてない?
相対パスの使用が厳しくなって怒られるらしい、ブロブをsls(macだとgrep?)に掛けてパスっぽいものを絶対パスに置換するだけでよいらしいが
0881デフォルトの名無しさん2021/03/19(金) 09:10:11.27ID:cqWDT3jG
細かいところから

>>873

> quicklispのインストールが終わった後で
> CCLを(quit)してしまうと
> ccl --load quicklisp.lisp
> をやっても(ql: を評価しないし

この quicklisp.lisp は quicklisp.org から落としてきたものだと思うけど、それなら当たり前。
quicklisp.lisp は Quicklisp のインストーラに過ぎなくて ql パッケージは入ってないから、 quicklisp.lisp を読むだけでは使えない。

インストール済みの Quicklisp を (load #P"~/quicklisp/setup.lisp") で読み込むと ql パッケージが使えるようになる。
起動の度に毎回 load するのが面倒なら、 quicklisp インストール後に (ql:add-to-init-file) で処理系が起動時に読み込むファイルで load するよう書いてくれる。

でも
> (load #P で~/quicklispのsetupを読み込むとそこで止まります
止まるわけないんだけどなあ。止まるってどういう意味でしょ。かっこの閉じ忘れとかじゃないよね。
0882デフォルトの名無しさん2021/03/19(金) 09:26:57.31ID:cqWDT3jG
>>869 でUSOCKET:CONNECTION-REFUSED-ERROR が出たとか言ってるあたり、ソケットのレベルで導通してるかも気になる。

これは成功するんだよね?

? (usocket:socket-connect "ja.wikipedia.org" 443)
#<USOCKET:STREAM-USOCKET #x3020020A09FD>


ちなみに俺の環境
? (lisp-implementation-type)
"Clozure Common Lisp"
? (lisp-implementation-version)
"Version 1.12 (v1.12-39-g6c1a9458) DarwinX8664"
0883デフォルトの名無しさん2021/03/19(金) 16:35:51.38ID:0qPpyi/x
遅くなりましたすみません開始します

>>879
手順把握しました
makeに関しては昔MacPortsでやるとうまくいかないやつがちらほらあって
手動で細かく制御するとできるとかがあったのでそれっきりだったんですよね
今ではそんなこともないということでしたら考え直します
おすすめはhomebrewでしょうか?

>>880
high sierraなのでその辺は大丈夫なはず・・です

>>881
(load #P"~/quicklisp/setup.lisp")
これを実行するとそのまま止まって次のプロンプト(?)が出てこないんです
原因は全く不明なんですが
(ql:add-to-init-file) これはやってみます
0885デフォルトの名無しさん2021/03/19(金) 16:49:39.87ID:0qPpyi/x
(ql:add-to-init-file) を実行すると
~/.ccl-init.lisp が生成されるようです

(quit)で終了して・・
CCLを単独で起動すると
(ql:quickload :dexador) は通りました

この状態では以下変わりません
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200311B01D>

.ccl-init.lispを見るとsetupを実行しているように見えなくもないのですが
特に止まるとかそういうことはこの手順だとないようです
次にSSLライブラリを読むかどうかのチェックをしてみます
0886デフォルトの名無しさん2021/03/19(金) 16:58:13.55ID:0qPpyi/x
reload.lispを変更しlibssl , libcryptを見に行かないようにしました

CCLを起動しdexadorを読みます

CCL is free software. It is distributed under the terms of the Apache
Licence, Version 2.0.
? (ql:quickload :dexador)
To load "dexador":
Load 1 ASDF system:
dexador
; Loading "dexador"
..................................................
[package dexador.encoding]........................
[package dexador.connection-cache]................
[package dexador.decoding-stream].................
[package dexador.keep-alive-stream]...............
[package dexador.util]............................
[package dexador.body]............................
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x302001DAED7D>

これは・・
再確認します
0887デフォルトの名無しさん2021/03/19(金) 17:00:59.35ID:0qPpyi/x
更新して書き換えられたかもと思いましたがそんなことはなかったようです

reload.lispはこのようになっていました

(:darwin (:or "x/usr/local/lib/libcrypto.dylib" ;; personalized install
))

・・中略・・
(:darwin (:or "x/usr/local/lib/libssl.dylib" ;; personalized install
))

手がかりになるでしょうか?
0888デフォルトの名無しさん2021/03/19(金) 17:22:35.07ID:0qPpyi/x
~/.cacheを消し忘れていたので実行後に
再度(ql:quickload :dexador)をやりました

reload.lispは改変のまま置かれていますが

[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200230142D>

ここは変わりませんでした
0889デフォルトの名無しさん2021/03/19(金) 18:14:15.37ID:6x0jzlEw
>>887 これは予想がつく
こっちでも試してみたんだが  ql:quickload の挙動は
○○○.lisp のタイムスタンプが コンパイル済みファイル ( ~/.cache/. . ... . . /○○○.dx64fsl )
よりも「新しくなった時」に ソース変更あり!と判断しているようだ

つまりまだ「新しい」reload.dx64fsl がキャッシュにあるのでそれをロードして何も変化が起きなかったんだろうなと
準備しておいた 改変済み reload.lisp (古い) に差し替えじゃなくて
生で置かれた reload.lisp を直に編集して保存 (新しい) しとけば良かったと

だとしても >>888 の説明がつかん
そちらの手順に何か勘違いがあるんじゃないかな
0890デフォルトの名無しさん2021/03/19(金) 18:30:33.54ID:6x0jzlEw
繰り返しになるけど、まずは

(:darwin (:or "X/opt/local/lib/libcrypto.dylib" ;; MacPorts
"X/sw/lib/libcrypto.dylib" ;; Fink
"X/usr/local/opt/openssl/lib/libcrypto.dylib" ;; Homebrew
"X/usr/local/lib/libcrypto.dylib" ;; personalized install
"Xlibcrypto.dylib" ;; default system libcrypto, which may have insufficient crypto
"X/usr/lib/libcrypto.dylib"))

libssl.dylib も同様に改変して
これを読ませてエラーになる事を確認してから

(:darwin (:or "X/opt/local/lib/libcrypto.dylib" ;; MacPorts
"X/sw/lib/libcrypto.dylib" ;; Fink
"X/usr/local/opt/openssl/lib/libcrypto.dylib" ;; Homebrew
"X/usr/local/lib/libcrypto.dylib" ;; personalized install
"libcrypto.dylib" ;; default system libcrypto, which may have insufficient crypto
"X/usr/lib/libcrypto.dylib"))

これで試してみましょう
0891デフォルトの名無しさん2021/03/19(金) 19:41:49.55ID:0qPpyi/x
>>889-890
手順に気をつけてもう一度やって見ました

まずは.cacheの
rm -rf common-lisp

~/quicklisp/dists/quicklisp/software/cl+ssl-20210228-git/src/reload.lisp
を直接編集してタイムスタンプが変わっていることを確認します

>ccl
? (ql:quickload :dexador)
[package dexador.util]............................
[package dexador.body]............................
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)

※ここでreload.lispを確認して改変されたままであることはわかりました

? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200225506D>

こうなるようです・・
0892デフォルトの名無しさん2021/03/19(金) 19:45:45.88ID:0qPpyi/x
思ったんですが
どの変数がpathを握っているのか表示できないものでしょうか?
0894デフォルトの名無しさん2021/03/19(金) 21:13:21.69ID:RMQx/osX
普段過疎ってるのに急に優しさに満ちたな…
ついでに興味深いレスも書き捨ててってよ
0895デフォルトの名無しさん2021/03/19(金) 22:35:05.73ID:0qPpyi/x
>>893
まずはCCLでdexador動くところまでですかね・・
CCLはObjCのインターフェース持っててnibも読めるので
ネイティブアプリのように振る舞えるかなと思いまして
今の問題が解決したら進めてみようと思ってます

毎日お手数おかけします先輩方
ほんとすいません
0897デフォルトの名無しさん2021/03/19(金) 23:00:48.11ID:6x0jzlEw
>>891 これでとりあえず openssl は無罪だったと思っていいのかな

>>892
ちょっと意味が分からないけど
この先はエラー発生時のDEBUG操作をちゃんと調べるしかないかも
実は自分もほぼ初心者なので教えられる事はなさそう

それか丹念に dexador のソースを追って内部進行を再現してみるとか?

src/dexador.lisp :45 (defun get (uri &rest args
src/dexador.lisp :50 (apply #'request uri :method :get args))

backend/usocket.lisp :423 (defun-careful request (uri &rest args ...
結構大変そう

>>894
優しさというか
未知のトラブルの際に実際どうするのが正解なのか自分も知りたいだけっすね
なので「なんか分からんうちに治りましたあw」で終わられても困る
0898デフォルトの名無しさん2021/03/19(金) 23:10:41.34ID:0qPpyi/x
>>896
すいません見落としてました
[package dexador.error]...........................
[package dexador.backend.usocket].................
[package dexador].
(:DEXADOR)
? (usocket:socket-connect "ja.wikipedia.org" 443)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200225C34D>
> While executing: USOCKET::RAISE-ERROR-FROM-ID, in process listener(1).
> Type :POP to abort, :R for a list of available restarts.
> Type :? for other options.
1 >

reload.lispがオリジナルでも改変でも変わらないようです
0899デフォルトの名無しさん2021/03/19(金) 23:16:50.39ID:0qPpyi/x
>>897
うーん・・pathを無効にしてもquicklisp自体は動いてるように見えるんですよね

とりあえず現在有効にした状態なので
なんとなくこうしたら挙動が変わりました

? (dex:get "https://nicovideo.jp"; )
> Error: Can't resolve foreign symbol "_SSL_get_peer_certificate"
> While executing: CCL::RESOLVE-EEP, in process listener(1).
> Type :POP to abort, :R for a list of available restarts.
> Type :? for other options.
1 >

以前はkilled: 9でccl自体落ちてたんですよね・・
symbolがないとかは通常ならわかりやすいんですがCCLだとどうなんでしょう
でもこれ明らかに外部ライブラリ呼びに行ってしくってる感じですねえ
0901デフォルトの名無しさん2021/03/19(金) 23:38:05.76ID:6x0jzlEw
うちの環境だと

# Homebrew版
ccl-dev❦: nm /usr/local/opt/openssl/lib/libssl.dylib | grep SSL_get_peer_certificate
0000000000018d23 T _SSL_get_peer_certificate

# system default 版
ccl-dev❦: nm /usr/lib/libssl.dylib | grep SSL_get_peer_certificate
0000000000037290 T _SSL_get_peer_certificate

>>899 そちらで
nm /usr/local/lib/libssl.dylib | grep SSL_get_peer_certificate
を叩くとどう出ます?
0903デフォルトの名無しさん2021/03/19(金) 23:43:05.81ID:6x0jzlEw
dexador のソースを読むと (dex:get "...." ) はおおよそ次のように進行する
;; ------------------------------------------
(defvar uri (quri:uri "https://ja.wikipedia.org/wiki/Common_Lisp";))
(defvar connect-timeout dex:*default-connect-timeout* );; 10 {秒}
(defvar con-uri (quri:uri uri));; 結局 con-uri == uri になる
(defvar connection (usocket:socket-connect (quri:uri-host con-uri) (quri:uri-port con-uri)
:timeout connect-timeout :element-type '(unsigned-byte 8)))
(defvar stream (usocket:socket-stream connection))
(defvar scheme (quri:uri-scheme uri));; "https"
(defvar read-timeout dex:*default-read-timeout* );; 10 {秒} 
(setf (usocket:socket-option connection :receive-timeout) read-timeout)
(cl+ssl:ensure-initialized) ;; SSLの前準備的な? 返値はNIL
(defparameter *ca-bundle*
(uiop:native-namestring
(asdf:system-relative-pathname :dexador #P"certs/cacert.pem")))
;; ...dexador-20210228-git/certs/cacert.pem ルート証明書みたいな?

(defvar ctx (cl+ssl:make-context :verify-mode cl+ssl:+ssl-verify-peer+ :verify-location *ca-bundle*))
(defvar insecure dex:*not-verify-ssl*);; この値は NIL であるべき (セキュアってこと)
(cl+ssl:with-global-context (ctx :auto-free-p t)
(cl+ssl:make-ssl-client-stream stream
:hostname (quri:uri-host uri)
:verify (not insecure)
:key nil
:certificate nil
:password nil))
;; --------------------------------------------------------------------------------

libssl.dylib の問題で解決ならもう↑これは不要かな
まあ面白かったから気にしないでくれ
0904デフォルトの名無しさん2021/03/19(金) 23:43:16.86ID:0qPpyi/x
/usr/local/libで参照先を見ました

libssl.dylib -> libssl.3.dylib

調べたら3.0.0 alphaになってますねOpenSSL
もしかしてこのせいですかね
0905デフォルトの名無しさん2021/03/19(金) 23:44:59.22ID:0qPpyi/x
もう少し教えてください
おすすめはhomebrewってことでいいでしょうか?
0906デフォルトの名無しさん2021/03/20(土) 00:08:21.55ID:SWqHaUsq
Wikipediaより OpenSSL
開発元 The OpenSSL Project
最新版 1.1.1j - 2021年2月16日(30日前)[1] [±]
最新評価版 3.0 Alpha 13 - 2021年3月11日

Homebrew版は 1.1.1j でした
3.0はまだ「分かってる人」だけが使う段階なのでしょう

Homebrew なんですが...
High Sierraはもうとっくに正式サポートから外れたので
パッケージのインストールがほぼソースからコンパイルになるんですわ
以前はコンパイル済みの (bottole) が提供されて、 コンパイルしたければオプションで選べたんですがね
こっちは惰性で使ってるだけなので、MacPorts の選択もアリだと思います
0907デフォルトの名無しさん2021/03/20(土) 00:46:30.47ID:ABymnbS3
わかりましたそうしたら・・
とりあえず1.1.1jをmakeしてみます

明日また報告します
いつもありがとうございます
0908デフォルトの名無しさん2021/03/20(土) 02:09:09.50ID:SWqHaUsq
一番先に試すべきは system default の dylib で dex:get を試すべきなんだけど... まあいいや

> Error: Can't resolve foreign symbol "_SSL_get_peer_certificate"
あとこれは当初の CONNECTION-REFUSED-ERROR とは別に現れたエラーなのかな?

そうだとして推測すると
当初は /usr/local/lib/libssl.dylib に存在しないシンボル _SSL_get_peer_certificate を /usr/lib/libssl.dylib から拾い上げて進行してたんじゃないかな
そして他のシンボルも opensslバージョン違いでミックスされる、その結果ちょっとした不整合が生じて向こうのサーバーに拒否られたと
SBCLで大丈夫だったのは個々のLISP実装によって通信パラメータの扱いに多少の差があってもおかしくないから
「通信したいんでしょ?なのでココのnil値は妥当な値に変えておきました」みたいな感じ

ソース改変で /usr/local/lib/libssl.dylib しか見えなくなった状態では
_SSL_get_peer_certificate がどこにも見つからねーよ... と 別のエラーが生じたと

雑だけど大体当たってるんじゃないかな
09098822021/03/20(土) 03:09:12.75ID:2VI0Nxdp
>>898 見る限り、 connect する段階で失敗してるように見えるなあ。
俺からは二つ試してみてもらいたい。


一つ目。 (trace openmcl-socket:make-socket) を呼んでソケットを開く関数に trace を出させた後で接続を試して、関数にどんな引数が渡ってるのか見ること。
俺が試したらこんな感じになる:

? (trace openmcl-socket:make-socket)
NIL
? (usocket:socket-connect "ja.wikipedia.org" 443)
0> Calling (MAKE-SOCKET :TYPE :STREAM :ADDRESS-FAMILY :INTERNET6 :REMOTE-ADDRESS #<IP6-SOCKET-ADDRESS [2001:df2:e500:ed1a::1]:443> :FORMAT :TEXT :EXTERNAL-FORMAT :UNIX :DEADLINE NIL :NODELAY NIL :CONNECT-TIMEOUT NIL :INPUT-TIMEOUT NIL)
<0 MAKE-SOCKET returned #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/24) #x30200212C1CD>
#<USOCKET:STREAM-USOCKET #x30200212BE4D>


二つ目。IPv4 ソケットで connect 出来るか試してみて欲しい。
ソース見る限り usocket は IPv6 ソケットを作りたがるっぽいが、IPv4 だとどうなのか見てみたいから。
IPv4での繋ぎ方は以下:
(openmcl-socket:make-socket :type :stream :remote-host "ja.wikipedia.org" :remote-port 443 :address-family :internet)

俺が trace も有効な状態で試した結果は以下のようになった:

? (openmcl-socket:make-socket :type :stream :remote-host "ja.wikipedia.org" :remote-port 443 :address-family :internet)
0> Calling (MAKE-SOCKET :TYPE :STREAM :REMOTE-HOST "ja.wikipedia.org" :REMOTE-PORT 443 :ADDRESS-FAMILY :INTERNET)
<0 MAKE-SOCKET returned #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/32) #x30200215E80D>
#<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/32) #x30200215E80D>
0910デフォルトの名無しさん2021/03/20(土) 16:30:52.27ID:ABymnbS3
遅くなりました

>>908
/usr/localではなく/usr/libを見るように変えました

いつものようにキャッシュを消してからCCL起動
(ql:quickload :dexador) ののちに

? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x302003C411CD>

? (dex:get "https://nicovideo.jp"; )
Killed: 9

nicovideoを参照するとkilled 9でCCL自体落ちるようです
0911デフォルトの名無しさん2021/03/20(土) 16:35:31.22ID:ABymnbS3
>>909
現在/usr/libを参照している状態でやってます

? (trace openmcl-socket:make-socket)
NIL
? (usocket:socket-connect "ja.wikipedia.org" 443)

> Error: There is no package named "USOCKET" .
> While executing: CCL::%PARSE-TOKEN, in process listener(1).

おや・・・no package named が出ると?

? (openmcl-socket:make-socket :type :stream :remote-host "ja.wikipedia.org" :remote-port 443 :address-family :internet)
0> Calling (MAKE-SOCKET :TYPE :STREAM :REMOTE-HOST "ja.wikipedia.org" :REMOTE-PORT 443 :ADDRESS-FAMILY :INTERNET)
<0 MAKE-SOCKET returned #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/4) #x302000A0E4ED>
#<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/4) #x302000A0E4ED>
?

こんな感じになるようです

OpenSSLの1.1.1jのビルドしてきます・・
0912デフォルトの名無しさん2021/03/20(土) 17:01:19.75ID:ABymnbS3
1.1.1j できました

libssl.dylib -> libssl.1.1.dylib
libcrypto.dylib -> libcrypto.1.1.dylib

nm /usr/local/opt/openssl/lib/libssl.dylib | grep SSL_get_peer_certificate

nm /usr/local/lib/libssl.dylib | grep SSL_get_peer_certificate
000000000001e290 T _SSL_get_peer_certificate

Symbolはありますね
0913デフォルトの名無しさん2021/03/20(土) 17:09:57.89ID:ABymnbS3
キャッシュを消して
reload.lispを標準に戻します

CCL起動からdexadorをquickload…

? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200229120D>

? (dex:get "https://nicovideo.jp"; )
Killed: 9

ええ・・

/usr/localのみ参照するreload.lispへ戻します

? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
> Error: Error #<USOCKET:CONNECTION-REFUSED-ERROR #x30200225C10D>

? (dex:get "https://nicovideo.jp"; )
Killed: 9

またCCLが落ちました
0914デフォルトの名無しさん2021/03/20(土) 17:15:43.39ID:ABymnbS3
CCL本体でSSL関係を静的リンクしているかチェックしてみましたが
そのようなことはありませんでした

うーん・・
0915デフォルトの名無しさん2021/03/20(土) 17:27:17.85ID:ABymnbS3
念のため
OpenSSL 1.1.1jの make testを再度実行した結果

../test/recipes/95-test_external_boringssl.t ....... skipped: No external tests in this configuration
../test/recipes/95-test_external_krb5.t ............ skipped: No external tests in this configuration
../test/recipes/95-test_external_pyca.t ............ skipped: No external tests in this configuration
../test/recipes/99-test_ecstress.t ................. ok
../test/recipes/99-test_fuzz.t ..................... ok
All tests successful.
Files=158, Tests=2629, 207 wallclock secs ( 3.41 usr 0.43 sys + 124.00 cusr 66.96 csys = 194.80 CPU)
Result: PASS
09168822021/03/20(土) 22:06:24.57ID:2VI0Nxdp
>>911 見ると IPv4 ソケットは繋がるっぽいな。じゃあ ccl に IPv4 を使わせてみて試そう。
以下の手順を試してみて欲しい。

1. あらかじめ SSL の設定は元に戻しておく。
(ここは 911 がどうやったか分からんので自分でやってくれ)

2. asdf のキャッシュを消す。
~/.cache/common-lisp/ 以下を全削除。

3. ccl を起動して、以下の順に打つ:
(setf *features* (delete :ipv6 *features*))
(ql:quickload "dexador")
(dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
0917デフォルトの名無しさん2021/03/20(土) 22:34:20.86ID:ABymnbS3
>>916
やってみました
通常通り初期化、同条件の/usr/libを参照する形に戻しています

? (setf *features* (delete :ipv6 *features*))
(:QUICKLISP :ASDF3.3 :ASDF3.2 :ASDF3.1 :ASDF3 :ASDF2 :ASDF :OS-MACOSX :OS-UNIX :ASDF-UNICODE :PRIMARY-CLASSES :COMMON-LISP :OPENMCL :CCL :CCL-1.2 :CCL-1.3 :CCL-1.4 :CCL-1.5 :CCL-1.6 :CCL-1.7 :CCL-1.8 :CCL-1.9 :CCL-1.10 :CCL-1.11 :CCL-1.12 :CLOZURE :CLOZURE-COMMON-LISP :ANSI-CL :UNIX :OPENMCL-UNICODE-STRINGS :OPENMCL-NATIVE-THREADS :OPENMCL-PARTIAL-MOP :MCL-COMMON-MOP-SUBSET :OPENMCL-MOP-2 :OPENMCL-PRIVATE-HASH-TABLES :STATIC-CONSES-SHOULD-WORK-WITH-EGC-IN-CCL :PACKAGE-LOCAL-NICKNAMES :X86-64 :X86_64 :X86-TARGET :X86-HOST :X8664-TARGET :X8664-HOST :DARWIN-HOST :DARWIN-TARGET :DARWINX86-TARGET :DARWINX8664-TARGET :DARWINX8664-HOST :64-BIT-TARGET :64-BIT-HOST :DARWIN :LITTLE-ENDIAN-TARGET :LITTLE-ENDIAN-HOST)
? (ql:quickload "dexador")
To load "dexador":
Load 1 ASDF system:
#〜中略〜
("dexador")

# reload.lispの変更点を再確認、OK
? (dex:get "https://ja.wikipedia.org/wiki/Common_Lisp";)
"<!DOCTYPE html>
<html class=¥"client-nojs¥" lang=¥"ja¥" dir=¥"ltr¥">
#〜中略〜
</body></html>"
200
#<HASH-TABLE :TEST EQUAL size 22/60 #x30200316897D>
#<QURI.URI.HTTP:URI-HTTPS https://ja.wikipedia.org/wiki/Common_Lisp>;
#<SSL-STREAM for #<BASIC-TCP-STREAM ISO-8859-1 (SOCKET/4) #x3020030AE94D>>
?

成功したように見えます・・!
09188822021/03/20(土) 23:37:46.40ID:2VI0Nxdp
>> 917 それはよかった。
917の環境は、 "ja.wikipedia.org" が IPv6 アドレスに解決されるのにそれを使って connect すると失敗するという状態なんだろうか。知らんけど。
IPv6 で繋がらない原因は Lisp の範疇じゃないし、917自身がネットワーク設定を見るしかないと思う。

あと ccl で IPv6 を常に抑制したいというなら、 ccl の起動時読み込みファイルに同じ設定を書き込む必要があると思う。

~/.ccl-init.lisp に、以下の式:
(setf *features* (delete :ipv6 *features*))
を追記しとけば IPv6 を抑制できて暫定措置になるんじゃないの。
0920デフォルトの名無しさん2021/03/21(日) 00:33:41.74ID:kaM5HUhB
>>918
調べてはいますがおそらくその通りだと思います
ifconfigでIPv6アドレスを持っていてIPv6パススルーも生きていることはわかったのですが

httpsに関してはIPv4しか通らないようです
DNSはIPv6を返します
問い合わせないといけないかもしれないので時間かかります
また報告しますすいません・・
0921デフォルトの名無しさん2021/03/21(日) 10:38:06.62ID:37bhr7Il
CCL with IPV6 feature:
(openmcl-socket:resolve-address :HOST "www.wikipedia.org" :PORT 443 :SOCKET-TYPE :STREAM)
⇒ IPアドレス #<IP6-SOCKET-ADDRESS [2001:df2:e500:ed1a::1]:443>
[ 参考: usocket-0.8.3/backend/clozure.lisp line: 15〜 ]

SBCL:
(usocket:get-hosts-by-name "www.wikipedia.org")
⇒ (#(103 102 166 224) #(32 1 13 242 229 0 237 26 0 0 0 0 0 0 0 1))
⇒ (car ... ) ⇒ IPアドレス #(103 102 166 224)
[ 参考: usocket-0.8.3/backend/sbcl.lisp line: 321〜 ]

つまり
CCLでは CCL実装の resolve-address で得られるIPアドレス (この場合 ipv6) をそのまま採用する
SBCLでは usocket:get-hosts-by-name で得られるIPアドレスが複数 (ipv4, ipv6) あったら 先頭のエントリ (ipv4) を採用する

「SBCLでは大丈夫だったのに」の謎はこれで解けた
0922デフォルトの名無しさん2021/03/21(日) 10:45:31.91ID:Duyg5pmm
迂闊なアップデートは止めましょう、パッケージマネージャはあんまり信用しないように、ということで

俺はそのままでいいや…
0924デフォルトの名無しさん2021/03/21(日) 14:51:41.93ID:kaM5HUhB
ネットワーク環境についてなんですが
こちらの設定だけでは改善できないことがはっきりしましたので
問題点も明らかになっていることから、今回の質問については終了したいと思います

粘り強く対応して頂いた先輩方には感謝しております
こちらの不手際のせいで巻き込んでしまってすみませんでした
ありがとうございました

次へ進みたいと思います
0925デフォルトの名無しさん2021/03/21(日) 15:35:24.92ID:37bhr7Il
>>924 ちょっと待ってくれー  
(openmcl-socket:resolve-address :HOST "nicovideo.jp" :PORT 443 :SOCKET-TYPE :STREAM)
そちらでこれ↑はどういう値が返ってきますか?  

こちらの環境では  #<IP4-SOCKET-ADDRESS 133.152.43.29:443>  つまり ipv4 で返ってくる (※)
もし ipv4 で Kill: 9 になる ( >>913 ) なら ipv6 とは別の問題も抱えてるって話になります
分かったところで何ができるよ?と思われるかもしれませんが、少し気になってました

※ そしてキー値引数 :ADDRESS-FAMILY :internet6 を追加すると ipv6 になる
wikipedia.org だとデフォールトで ipv6 ( DNS の返答順に差があるんですかね )
0926デフォルトの名無しさん2021/03/21(日) 15:43:10.50ID:kaM5HUhB
>>925
そうでした
killed:9の問題は忘れてました

? (openmcl-socket:resolve-address :HOST "nicovideo.jp" :PORT 443 :SOCKET-TYPE :STREAM)
#<IP4-SOCKET-ADDRESS 133.152.43.29:443>

/usr/lib参照の設定だとこうなりますね
09298822021/03/21(日) 19:09:29.26ID:rYTEFRj1
>>925-926

俺の環境でも "Killed: 9" が出る現象が再現できた。
IPv6 ソケットを開くのにあえて失敗させた後、 ファイルディスクリプタを開きまくっていると ccl が死ぬっぽい。

俺が見つけた再現手順は以下。暇なら 925 や 926 も再現できるか試してみてほしい。

1. asdf のキャッシュを消す
~/.cache/common-lisp 以下を全削除。

2. ccl を起動し、以下の順に実行
(ql:quickload "usocket")
(usocket:socket-connect "ja.wikipedia.org" 65500) ; これは connection refused になって失敗する。 :pop で abort して抜ける。
(usocket:socket-connect "nicovideo.jp" 443)
(ql:quickload "dexador") ; I/Oが重い処理ならなんでもいい

最後の ql:quickload の箇所はI/Oが多い処理ならなんでもいいようで、俺はこれで "Killed: 9" になるのが確認できた。
まだ調査中だけど、この現象は usocket か ccl のバグっぽい気がする。
もう少し調べてみて必要なら本家に報告するわ。
09309252021/03/21(日) 19:41:51.58ID:37bhr7Il
>>929 同じ手順で "Killed: 9" 再現しました
環境は
Clozure CL: Version 1.12 (v1.12-39-g6c1a9458) DarwinX8664
OS: macOS High Sierra ver. 10.13.4

~❦:ulimit -n
256
ファイルディスプリタの(プロセス単位の?)上限は、256
少ないようには見えませんが、CCLが処理しきれる上限はもっと低いんですかねえ
0931デフォルトの名無しさん2021/03/21(日) 20:01:40.07ID:kaM5HUhB
>>929
? (ql:quickload "dexador")
To load "dexador":
Load 1 ASDF system:
dexador
; Loading "dexador"
.Killed: 9

同手順で落ちました
てっきり自分の環境でしか起きないものかと思ってたんですがまだ色々ありそうですねこれ

>>930
私のはこうなってます

ulimit -n
10000
ulimit -u
2048

自分のはかなり前にファイルを大量に扱わねばならない時があったので変更していたのを思い出しました
09328822021/03/21(日) 21:05:00.56ID:rYTEFRj1
>>930
>>931

ありがとう。これだけ再現するってことは本当にバグを見つけたのかもね。

俺の方では、 USOCKET:SOCKET-CONNECT で接続に失敗した時の backtrace を見て、 abort して抜ける時にどこかの unwind-protect で走るコードがおかしいんじゃないかと思って眺めてみてる。

で、そういう unwind-protect があるのはこの ccl::make-tcp-socket 関数だけだった:
ttps://github.com/Clozure/ccl/blob/6c1a9458f7a5437b73ec227e989aa5b825f32fd3/library/sockets.lisp#L647-L692

上の再現手順で Connection Refused にしたとき、この関数の688行目でエラーが起きるんだが、その場合 unwind-protect の効果で692行目の処理で FD が閉じられる。一方で、この FD は663行目の処理で socket 構造体の作成にも使われていて、その socket 構造体は閉じられていない。

ここからは完全に俺の推測。
Connection Refused 後の unwind-protect で FD が閉じられた後、次の処理でたまたま同じ数字のFDが開かれ、その直後にこの放置された socket 構造体がGCに回収されるときに何か起きてるんじゃないかと思う。 IPv6 の struct sockaddr_in6 と IPv4 の struct sockaddr_in を取り違えて free() する・・的な。

まあそんな今更なバグが ccl にあるとも思えないので、全く推測の域を出ないけど。
俺も普段使いはSBCLで、CCLのソースを見るのは初めてだから時間がかかると思うけど、もう少し調べてみるわ。
0933デフォルトの名無しさん2021/03/21(日) 22:01:07.16ID:37bhr7Il
あぁこれ Killed: 9 のたびにクラッシュログが残りますね

~/Library/Logs/DiagnosticReports/dx86cl64_2021-03-21-213811_Sierra.crash
Process: dx86cl64 [58558]
... .. .
Exception Type: EXC_GUARD
Exception Codes: 0x4000000100000006, 0x542c042077498a54
Exception Subtype: GUARD_TYPE_FD, id=0x542c042077498a54, fd=6, flavor=0x00000001 (CLOSE)
... .. .
さっぱり意味は分からないけどシステムを怒らせたっぽい事は伝わってきます
禁忌に触れようとした的な?
09348822021/03/22(月) 17:08:00.67ID:VLZSjRi0
パッチ書いてプルリク出してみた。
https://github.com/Clozure/ccl/pull/362

>>933 のいうようにクラッシュレポート見たら、俺の環境でも close で死んでた。
色々調べたけど、どうやら CCL の GC が close 済みのFDをもう一度 close しようとすると死ぬっぽい。
(ただ、close 済み FD を二回 close する簡単な C プログラム書いて実験しても、 EBADF が返るくらいで kill されたりはしないんだよね・・このあたり微妙。)
そんなわけで close 済み FD を参照する一時オブジェクトをエラー時に解放するよう unwind-protect したら直ったっぽく見えたのでPRにしてみた。

(932 では struct sockaddr_in が・・とかヌカしてたけど、さすがにこれは無かった。俺の杞憂だったわ。)
0936デフォルトの名無しさん2021/03/22(月) 21:16:42.30ID:5gvxkT8z
>>934 あなたは偉い!

全く別件ですが詳しい方々に質問です

CCL で簡単な cocoa アプリを作ってみよう思い (require :cocoa) を評価すると Hemlock editor が立ち上がります
そのためのコンパイルとロードも毎回走ります
欲しいのは ns:ns-window とかなのに不要なエディタを除外したアプリは作れないのでしょうか?
0937デフォルトの名無しさん2021/03/22(月) 23:32:09.69ID:5gvxkT8z
Hemlock editor てのは Clozure CL64.app を立ち上げると出てくるのと似たようなもんです、というか違いが分かりません
そっちの場合は 初めから (require :cocoa) された状態になってます
慣れの問題かもしれませんが、入力補完もhistoryも効かないこのエディタは使いづらいです
快適な Emacs+slime で作業してるのに (require :cocoa) で余計なのが立ち上がる、なんなんだコレはと思ってしまいます
0938デフォルトの名無しさん2021/03/23(火) 06:52:29.03ID:p/UYSc/L
あのエディタは必要なのか必要でないのかよくわからないんですよね
examples/coco/ui-elements/howto.html とかを見ると

(in-package :ccl)
(setf my-window (#/alloc (@class ns-window)))

window生成できるってことなってるんですがエラーになるおかげで悩みました
これ(require “cocoa”)をしておけば問題なく生成できますね・・

ただ同ページの
(ns:with-ns-rect (r 100 100 400 300)
(#/initWithContentRect:styleMask:backing:defer:
my-window
r
(logior #$NSTitledWindowMask
#$NSClosableWindowMask
#$NSMiniaturizableWindowMask
#$NSResizableWindowMask)
#$NSBackingStoreBuffered
#$NO))

で初期化して表示できるとなってますがこちらでは動かないんですよね
色々とわかってないことが多いので地道に調べてます・・
09399362021/03/24(水) 14:30:11.89ID:aesCgSqt
あれから試行錯誤してみましたが

https://trac.clozure.com/ccl/wiki/GradientWindow
例えばここのサンプルコードを

(require :objc-support)
↑と↓で挟めば
(ql:quickload :trivial-main-thread)
(defun main ()
(trivial-main-thread:with-body-in-main-thread ()
(show-gradient-window)
(#/run (#/sharedApplication ns:ns-application))))

(main) でウィンドウが出ます
サイト脚注の gui:execute-in-gui はcocoaパッケージで提供されるのでここでは使えません

examples/cocoa/ui-elements/HOWTO.html の例も
(%make-nsstring "Hello!") → #@"Hello!"
(@SELECTOR "greet:") → (objc:@SELECTOR "greet:")
のように書き換えてやると動きます
0940デフォルトの名無しさん2021/03/24(水) 15:23:03.24ID:aesCgSqt
それと (ccl:save-application "foo.image") とやれば現状のバイナリイメージが保存されます
dx86cl64 -n -b -Q -I foo.image -e "(main)"
のようにして実行できます

サンプルでは終了処理が省略されてるのでウィンドウを閉じても終わりません
例えば killall -9 dx86cl64 で始末してやる必要があります

ちなみに (require :cocoa) の状態でイメージ保存をすると何故か 0バイトの空ファイルができます
あと :cocoa では ccl::build-application を使ってアプリケーションバンドルが作れるという話になってるのですが
これもちょっと分かりませんでした
ガワ(〜.app)は出来ても実行できない、エラーを見るとイメージが見つからない、
じゃあ手動で作ればいいのか? 保存できないじゃん... という循環です
0941デフォルトの名無しさん2021/03/24(水) 19:24:39.27ID:yxGjMjcv
CCLのメーリングリストでやったら?
もし有益な情報だったらここに書かれててもCCLユーザーは目にすることはないし
逆にここでやられてもCCLでapp作るっての長々やられても正直うざい
0945デフォルトの名無しさん2021/03/27(土) 11:00:58.43ID:Jp3H832r
会社の仕事で使わせようとするとこは地雷っぽく感じる
Lisperが集まった少人数ベンチャーでもなければ、普通は採用言語とはならんて
0947デフォルトの名無しさん2021/04/20(火) 08:52:04.97ID:gd1FBcQ1
Steele御大がカバーに推薦文書いてるからってclでHacker's Delight一通りなぞったけど
dpb, deposit-field, log~, boole-~,bit-vector...
clの無駄に細かく柔軟なbyte/bit関数がめっちゃ生きるなこれ
byte-specのおかげで32bit想定で16進定数まみれのc(っぽい)サンプルコードがキレイになる
変なビット幅使ったら性能は察しだけども

4bit整数のboole-定数も真理値表とcltl2、(hsによれば処理系定義だけど)処理系毎に思想が見えて面白い
0949デフォルトの名無しさん2021/05/22(土) 14:57:49.72ID:AMGDOUSM
lispで構造体の配列はどの様に宣言するのですか。
教えてください。
0950デフォルトの名無しさん2021/05/22(土) 16:58:24.32ID:ihqr331W
構造体の型を :element-type に指定して make-array するとか。

standard-object の配列を作るなら
(make-array 42 :element-type 'standard-object)
0951デフォルトの名無しさん2021/05/23(日) 05:05:37.98ID:wE2/zz8j
nconcとかの最初のnってなんの意味?
破壊系は大抵nがついてるようだけど
0953デフォルトの名無しさん2021/05/28(金) 00:46:31.60ID:EJmsk1LE
クロージャー?判ってなさそうなミスして困った
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 が初期化されずに値をキープするので
呼ぶ度に増えてしまう
どう定義すればリセットされるのだろうか?
0956デフォルトの名無しさん2021/05/28(金) 08:27:58.85ID:EJmsk1LE
>>954
実践 Common Lisp に
>この2つのフォーの違いは
>DEFPARAMETER は評価されるたに常に初期値を代入し、
と書いてあったから
2回目移行の関数呼び出しの時に初期値代入してくれることを期待していた

>>955
thanks
copy-tree 始めて見た
0957デフォルトの名無しさん2021/05/28(金) 10:06:56.31ID:9zUWEJUi
>>956
よくわかってないけど、defunの中のdefparameter はただのletじゃだめなの?
トップレベルとそうでない場所でのdefparameter は挙動が違うと思う
0958デフォルトの名無しさん2021/05/28(金) 13:02:59.14ID:3GRY8xg9
リテラルオブジェクトを破壊的に変更した結果が未定義だからだね
0959デフォルトの名無しさん2021/05/28(金) 20:43:19.98ID:Kys4wuAq
assoc cdr nth越しにfるアクセサ志向プログラミングが気になる
いや悪いと思わんよsetfパワーはclの売りだし
ただなかなか見たことないので感心?した
0960デフォルトの名無しさん2021/05/28(金) 22:27:22.42ID:EJmsk1LE
>>957
全然 let でいいですね
今回スコープ広くしなくていいし

>>959
コンソールで対話型のもの書くのにLispがエラー時に変数見れたり色々やりやすかった記憶があったので
ひさびさに Lispを選んだ
うる覚えなのでスタイルが面妖なことになってるかもしれないw
0961デフォルトの名無しさん2021/05/28(金) 23:07:39.31ID:J0jB9cZZ
グラフ探索でモノを見つけたら帰りがけに空リストへcar/cdrをpushしていくのはやったことあるな
(#'car #'car #'cdr ...)で表現したアドレスと値が帰ってくる(以下#'等省略)
値を処理したら(compose '(car car cdr...))でアクセス関数を生成してsetfで更新

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

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

a/dを文字列ででも返して、それを関数として使いたい時だけcとrで挟んでinternする感じで
0963デフォルトの名無しさん2021/05/28(金) 23:53:54.41ID:Kys4wuAq
効率は悪そうだけどとてもlispらしい
placeだけダイナミック変数に確保したとしても、誰から指されてるか(親)は経路を何らかの方法で保存してないと原理的に辿れない
(複数から指されている可能性もあるので)

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

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

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

car cdrに加え、returnまで合成した関数がちゃんとsetfableかまではちょっと自信がない
0965デフォルトの名無しさん2021/05/29(土) 13:06:29.81ID:/6seeUxq
リスト上でreturnと直前の呼び出しを対消滅させて最適化するイメージは湧くが意外と面倒くさそう
returnが連続するケースにカウンタが要る
括弧のパースでよくやるロジックだけど
0968デフォルトの名無しさん2021/06/22(火) 14:58:15.67ID:9PZ+AdPA
「Common Lisp」って、市販の書籍を読んでも歴史や文法等の事は書いてあっても、
REPLで試せるだけで、コンパイルして実行可能ファイルを作る方法が不明だな。

ネットを調べてもコンパイルして実行ファイルを作成する情報が見つからない。
運良く見つかっても、商用系のコンパイラを使った場合の話だったりする事が多々有る。
0969デフォルトの名無しさん2021/06/22(火) 15:10:53.11ID:YfWe7YWP
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
0972デフォルトの名無しさん2021/06/22(火) 15:45:43.42ID:pmPJw99A
規格で決まってないし、そもそもバイナリに固めて配布する需要がそんなに無い
0973デフォルトの名無しさん2021/06/22(火) 15:53:42.26ID:9PZ+AdPA
>>972

save-lisp-and-die

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

バイナリに固めて配布する気はない、
自分で書いたLispプログラムを実行ファイル形式にしたいだけだ。
0974デフォルトの名無しさん2021/06/22(火) 16:00:31.34ID:9PZ+AdPA
解っている人にしか理解不可能な会話をされたら、

新参者はちんぷんかんぷんですね。
0975デフォルトの名無しさん2021/06/22(火) 16:58:54.16ID:r0WButOj
SBCLではデフォルトで固めて実行ファイルを作れるが、サイズが最低でも40MBほどになる
SBCLビルド持にオプションを追加すると、圧縮した実行ファイルを作れる
それだと10MB程度になるから、まぁ現実的なサイズかなと
ちなみに圧縮されてても一瞬で起動するからデメリットは全く無い
0976デフォルトの名無しさん2021/06/22(火) 17:01:38.90ID:pmPJw99A
save-lisp-and-dieはsbcl系だろうか、sb-ext:とかそんなパッケージプレフィックス付いてない?
eclだとsaveinitmemだとかその辺はてんでバラバラ

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

ただし全部入りだから、ファイルサイズに気を付けてね
0977デフォルトの名無しさん2021/06/22(火) 22:34:00.44ID:9PZ+AdPA
>>969

わざわざ有り難うございます。
リンク先を参照して勉強します。
0978デフォルトの名無しさん2021/06/22(火) 22:44:48.17ID:9PZ+AdPA
>>976

コンパイラ毎に、バラバラだったんですね、
コンパイルして生成されるファイルは巨大ですね。
0979デフォルトの名無しさん2021/06/23(水) 00:56:32.49ID:fcCuTY0O
Common Lisperの7割以上が使ってると思われるSBCLの実行ファイルの作成に関して、具体的に書いた俺のレスは無視かよw
まともに聞く気が無いならもう来んなよ
0980デフォルトの名無しさん2021/06/23(水) 01:02:46.63ID:p7QOUBen
老婆心だけど、プログラム事にコアイメージを量産するんじゃないぞ(違ったらごめん)
ライブラリや書いたコードの最適化コンパイル、実行時でなくてよい計算を済ませて、スクリプトを食わせる
0981デフォルトの名無しさん2021/06/23(水) 01:57:21.85ID:p7QOUBen
sbclなら常に関数をコンパイルしながら走るので、動的に関数生成するそこそこ規模ならお釣りが来るよ
実行時入力を与えて走らせればイメージが最適化されるので、そこをまたダンプ
熟成と呼んでる

パッケージマネージャ用に主なアーキテクチャ向けビルド作ってるけど、デバッガやrepl削るとffi関連のアップデートで泣く
0983デフォルトの名無しさん2021/06/23(水) 02:38:16.31ID:bhqsYps4
こんな時間になってしまった。おやすみなさい。
0984デフォルトの名無しさん2021/06/23(水) 04:19:32.99ID:GGzsHju7
このスレ7年たつらしいけどLisp Schemeスレ一本に合流にして単独スレいらんのではないか
「いいものの本質は、いかなる時代においても変わらない」byパワーズのパワーズってなんなん?
0985デフォルトの名無しさん2021/06/23(水) 13:25:52.20ID:6jEPjWCz
emacs lisp の方が実用化には成功しているのかも知れないぬ
0986デフォルトの名無しさん2021/06/23(水) 19:50:01.92ID:bhqsYps4
次スレはまだかな、
0987デフォルトの名無しさん2021/06/23(水) 20:30:38.58ID:bhqsYps4
SBCL等のCommon-Lispでプログラムを作る際に、

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

ググったり、Githubの中を探してたら、Log4CLってのを見つた。
0988デフォルトの名無しさん2021/06/23(水) 20:45:03.00ID:bhqsYps4
いま、検索したら日本語で詳しく紹介してるブログを見つけました。
他にもロギングライブラリらしきものが存在するらしい。
0991デフォルトの名無しさん2021/06/27(日) 13:56:15.17ID:VKjGOwn5
>>990

REPL上でログ出力しても結構使えますよ。
ログレベルが選べるのが良いですね。
0992デフォルトの名無しさん2021/06/27(日) 16:36:57.14ID:KSONo++L
ロガーとslimeが連携でもしてくれるのなら有用だと思うがそうじゃないならたいして使えるものではないな
コンパイラの警告,trace,breakはロガーライブラリを導入しなくても標準で使えるし,slimeと連携もする
0994デフォルトの名無しさん2021/06/29(火) 18:57:39.59ID:LZLMU7Fi
>>987
単に*debug/trace/error/standard...-output*へ自前のストリームをsetfすると画面への出力が食われるのかな?自前のreplはどう?色付けたり楽しいよ

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

print-teeで好きな標準ストリームをread-lineし、好きなところに書き込む
試してないので雰囲気だけ…(処理系のreplは裏で色々やってるので、それを元に改造するべき
0996デフォルトの名無しさん2021/06/30(水) 18:24:48.68ID:PhKPzjXz
 一時期SBCL入れて入門していました。
 取り敢えずチュートリアルサイトを途中までこなして、ふと(BASICで言う)ステートメントをダイレクト実行しかしていない事に気が付く。
 しかもlistとかのダイレクトコマンド専門命令の説明がない。
 ググって見付けたサイト覗いても、その辺りの説明がない。

 いくら生まれが古くても、ここまで生き残った言語なら運用に不足がある訳ないのだけれど・・・。
0997デフォルトの名無しさん2021/06/30(水) 19:57:21.11ID:F+OSm5Af
>>996
>  ステートメントをダイレクト実行しかしていない
これはreplでしかつかってないということなんだろうけど、
>  しかもlistとかのダイレクトコマンド専門命令
これはなんのことなんだろう。
0998デフォルトの名無しさん2021/06/30(水) 22:58:32.99ID:uA4oH22P
BASICがアマチュアプログラミングの標準だったのはかれこれ40年前ですよ・・・
LISPが古いのとは別次元で時代錯誤・・・
10011001Over 1000Thread
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 2474日 11時間 53分 0秒
10021002Over 1000Thread
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。


───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────

会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。

▼ プレミアム会員登録はこちら ▼
https://premium.5ch.net/

▼ 浪人ログインはこちら ▼
https://login.5ch.net/login.php
レス数が1000を超えています。これ以上書き込みはできません。

ニューススポーツなんでも実況