X



【入門】Common Lisp その11【質問よろず】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2014/09/21(日) 22:49:21.73ID:FJokPHUt
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/
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を使ってますが、皆様の処ではどうでしょうか?
0505504
垢版 |
2018/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のようなステップ実行しか出来ませんでした。
0516514
垢版 |
2019/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とかあるけど
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コーディングはメモリを節約するためのものだけど、今時そんな事する必要がないからだろ
0601デフォルトの名無しさん
垢版 |
2019/10/14(月) 22:36:05.59ID:4/RblZEa
CDRコーディングでメモリ参照の局所性などは向上するのでむしろ現代のCPUで効果があるという話もある
CommonLispの場合,リストはイミュータブルでないので書き換えが発生すると間接参照に置き換わるためどこまで旨味があるかだが
■ このスレッドは過去ログ倉庫に格納されています

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