X



Lisp Scheme Part41

0413デフォルトの名無しさん
垢版 |
2021/07/13(火) 10:27:19.42ID:A078Hhon
Schemeで、

(+ '3 3)

を評価すると

6

が返ります。

'3 は「3」というシンボルを表わすのではないんですか?
0414はちみつ餃子 ◆8X2XSCHEME
垢版 |
2021/07/13(火) 11:05:03.90ID:jDPJbhfl
>>413
クウォートは評価を抑制するという仕組み。
データ (S式) の世界がプログラムの世界にマッピングされるときにデータの世界のままで留め置く感じ。

識別子はデータの世界ではシンボルなので、(変数として) 評価しなければシンボル自体となる。
3 はデータの世界でも数値の 3 であり、数値はプログラムの世界で評価すると
それ自体になるという自己評価 (self-evaluating) という規則の対象なので
3 はクウォートを付けても付けなくても評価結果は数値の 3 。

ちなみにベクタリテラルが自己評価の対象になるかどうかは変更があったので注意が必要。
R5RS/R6RS では自己評価の対象ではないのでクウォートが必要だが R7RS では自己評価になる。
まあほとんどの処理系は適当に許容したりもするんだけど。
0416はちみつ餃子 ◆8X2XSCHEME
垢版 |
2021/07/13(火) 17:10:19.73ID:QSkHhbzy
小さい数値はヒープアロケーションせずにワードに詰め込む (ことで GC 削減して高速化を図る)
ような実装が一般的だったり、同じ内容の文字列リテラルを統合したりすることがある。

eq? が数値や文字列について処理系依存になっているのは
おそらくそういった最適化を許すための配慮なんだけど、
処理が遅くなってでも一貫した扱いをするというデザインを選んだなら
内部的に数値とシンボルと統合することも選択肢としてはあるかもね。

そうしてもユーザー視点ではたいして得なことはないんだけど、
アプリケーションに組み込んで拡張用言語として使うとか
だったらアプリケーション側の事情と馴染みやすいかどうかみたいな視点もあるし。
0417デフォルトの名無しさん
垢版 |
2021/07/13(火) 19:58:17.06ID:tejz1RXC
数字はreadした時点でnumberになる
それをquoteしてもnumberのまま
quoteするとはevalされないということだ
もちろんnumberをevalしてもnumberのままだ
0419デフォルトの名無しさん
垢版 |
2021/07/15(木) 04:52:42.37ID:eqEigNI9
逆やね末尾再帰でloopを代替できるからイキって仕様からloopを消したったのがschemeやからユーザーもイキるやで
0420デフォルトの名無しさん
垢版 |
2021/07/15(木) 06:43:25.74ID:S7wkmjz6
末尾呼び出しの最適化が至高の技術のように思っていた時期が僕にもありました
0421はちみつ餃子 ◆8X2XSCHEME
垢版 |
2021/07/15(木) 11:32:01.61ID:d93moyXm
末尾呼出し最適化はあくまでもセマンティクスの話であって、
ループ構文を避ける強い流れがあるわけじゃないよ。

do や named let くらいしか繰り返し構文が用意されてないのは
皆が合意できる仕様をまとめられていないという非常に単純な理由だよ。

R7RS-Large に入れるループ構文の候補としては
・ SRFI-42 (https://srfi.schemers.org/srfi-42/srfi-42.html)
・ foof-loop (http://wiki.call-cc.org/eggref/5/foof-loop)
・ chibi loop (http://synthcode.com/scheme/chibi/lib/chibi/loop.html)
が挙がっている。

まあまだちゃんと議論されてないので他の候補が出るかもしれないし、
結局何も入れないということもあるかもね。
0422デフォルトの名無しさん
垢版 |
2021/07/15(木) 16:04:48.23ID:MIyHkZEB
アキュムレータ加えて末尾再帰で書くよりはdoを好むわ
ロジックとしては全く等価だし、見やすい方がいい
0423デフォルトの名無しさん
垢版 |
2021/07/15(木) 16:12:57.83ID:MIyHkZEB
loopキーワードは:を付けてlisp keywordにすればビジュアル的に随分見やすくなるね

ところでloopの独特の言い回しはAlgol由来だと最近知った、downtoとか
esacやfiまで取り入れてたら投げ捨てるけど
0424デフォルトの名無しさん
垢版 |
2021/07/15(木) 16:15:28.68ID:MIyHkZEB
>>412
sbclが内部でnlet使ってるね
::で参照したりコピペしたりしてるわ

やっぱclに入れた方が良かったな
0425デフォルトの名無しさん
垢版 |
2021/07/15(木) 16:34:32.82ID:zKeMNTWP
loopしなくてもdestructuring bindやwithの為にloop使うのは我ながら良くないと思う
値を集める節がハマると簡潔に書けるのでつい
0426はちみつ餃子 ◆8X2XSCHEME
垢版 |
2021/07/15(木) 17:45:11.96ID:d93moyXm
慣れた Scheme ユーザーなら末尾呼出し (末尾再帰) になっているかどうかは空気のように判断できるけど、
do で書けるものなら do で書いたほうがそういう判断をする必要さえないわけで、
なるべく抽象度の高い構文 (または手続き) を使うに越したことはない。

大事なのは抽象化で、繰り返しをしているところなら繰り返しに見えるように書くのが筋だろ。
(繰り返しに do という名前を当てるのがどうなんだ……とも思うけど Fortran 由来らしい。)

そういう意味では >>425 が loop をループ以外の用途に使うのは確かに良くは無いんだが、
場合によってはそういうのもイディオムとして定着していることがあるから
意味に忠実にするために冗長になるくらいならイディオムに頼るほうが「わかりやすい」場合もある。

どちらがいいというわけでもなくて全体の匙加減だから難しいよね。
0427デフォルトの名無しさん
垢版 |
2021/07/15(木) 19:48:28.17ID:eqEigNI9
末尾呼出し最適化をいかした書き方というのは確かにあるのだけれど named let はシンプルな loop に特化していて中途半端なのだよなあ
0430デフォルトの名無しさん
垢版 |
2021/07/18(日) 09:56:21.45ID:2Hl3gQcn
書き捨てなら抽象度は低い方がよいのが原則じゃないか?
高いほうがいいのは使い回すケース、例えば数列計算関数に項を計算する関数を渡して特殊化したい場合
carがdoなら、何がしたいのか一目で分かるよね

あとclでも普通ループへの展開はしてくれると思うけど、保証はされてないから神経質な人は、より確実に等価なコードに展開されるだろうdoの方がいいかも
いやさすがに気にし過ぎか
0431はちみつ餃子 ◆8X2XSCHEME
垢版 |
2021/07/18(日) 10:09:27.74ID:+Ch+KzUq
>>430
> 書き捨てなら抽象度は低い方がよいのが原則じゃないか?

手間とのトレードオフで抽象化層をわざわざ作るのを避けるという意味ならそうだけど、
多様な語彙 (標準ライブラリ、またはそれに近いもの) がすでに揃っている中
から選べるなら状況をより適切に表しているものをピックアップしたほうが
わかりやすいし手間も少ないでしょ。
0432デフォルトの名無しさん
垢版 |
2021/07/18(日) 10:13:20.17ID:2Hl3gQcn
ポエムだけど、状態機械ともロジックは等価だよね

二項漸化式を例に
仮引数-呼び出し
末尾再帰
a b accum - b (next b) accum'
do
a b result - b (next b) result'
状態機械
a b state - b (next b) state'

状態機械は普通遷移テーブルを与えて考えるけど、制御構造で動的に割り振れば前の二者になる
状態を引数で受け渡すことで、ステートフルな計算を実現する
0433デフォルトの名無しさん
垢版 |
2021/07/18(日) 10:18:13.98ID:2Hl3gQcn
>>431
その文章には賛同するけど、その線引は深入りすると宗教戦争になりそうなやつだな…

忘れてくれ
0435デフォルトの名無しさん
垢版 |
2021/07/18(日) 10:43:00.23ID:iK76XXqo
状態機械の定義にそぐうかは詳しくないので分からないけど、表で管理するのは見やすそう
でもデータ構造中に保持する限り反復に翻訳される可能性は皆無だろうな
0436デフォルトの名無しさん
垢版 |
2021/07/18(日) 22:30:22.92ID:wZnHH9/v
do構文は何がどこかすぐ忘れる
named letはうる覚えでもなんとかなる
ただのletの亜種だから断然読みやすい
0437デフォルトの名無しさん
垢版 |
2021/07/18(日) 22:33:40.35ID:3JZJIWfz
×うる覚え
○うろ覚え
0438デフォルトの名無しさん
垢版 |
2021/07/20(火) 02:01:05.64ID:DJlNseKm
すみませんscheme初心者なのですが累乗を求めるプログラムが動きません
http://www.nct9.ne.jp/m_hiroi/func/abcscm04.html
を参考に、let と cond を使って書いてみたのですが let で局所変数を導入した瞬間に動かなくなりました
何が間違っているのか指摘していただけると幸いです
(define (pow x y)
  (let ((z (pow x (quotient y 2))))
     (cond ((zero? y) 1)
        ((zero? (modulo y 2)) (* z z))
        (else (* x z z))
     )
  )
)
0440デフォルトの名無しさん
垢版 |
2021/07/20(火) 03:11:09.60ID:DJlNseKm
(z (pow x...)) の評価が ((zero? y) 1) の前に起きてるのが原因なんですね
z に (pow x..) を束縛だけして評価しないみたいなことって出来るんですかね?
(define (pow2 x y)
 (if (= y 0)
   1
   (let ((z (pow2 x (quotient y 2))))
    (if (= (modulo y 2) 0)
      (* z z)
      (* x z z)))))
みたいに if 文に分解して (= y 0) 1 を (let ((z (pow2 x ..) の前に出すしかないんでしょうか
let と cond を一緒に使うとスッキリ書けそうなのですが…
0441デフォルトの名無しさん
垢版 |
2021/07/20(火) 09:22:43.66ID:0xL9gg55
(define (pow x y)
  (let ((z (lambda()(pow x (quotient y 2)))))
     (cond ((zero? y) 1)
        ((zero? (modulo y 2)) (* (z) (z)))
        (else (* x (z) (z))))))
0443デフォルトの名無しさん
垢版 |
2021/07/20(火) 11:23:57.77ID:0xL9gg55
(define (pow x y)
  (let ((z (lambda()(pow x (quotient y 2)))))
     (cond ((zero? y) 1)
        ((zero? (modulo y 2)) (set! z (z)) (* z z))
        (else (set! z (z)) (* x z z)))))
0444デフォルトの名無しさん
垢版 |
2021/07/20(火) 12:21:34.41ID:27sTwTCb
ifとletを使うのが一番いいと思う

(define (pow1 x y)
(let ((z (delay (pow1 x (quotient y 2)))))
(cond ((zero? y) 1)
((zero? (modulo y 2)) (* (force z) (force z)))
(else (* x (force z) (force z))))))

(define (pow2 x y)
(let ((z #f))
(cond ((zero? y) 1)
((begin
(set! z (pow2 x (quotient y 2)))
(zero? (modulo y 2)))
(* z z))
(else (* x z z)))))
0445デフォルトの名無しさん
垢版 |
2021/07/20(火) 12:42:50.05ID:DJlNseKm
>>443
なるほどアリティ0の無名関数として束縛してやれば定義時に評価されずに済むんですね
評価したいときはリストにすれば評価されると
めちゃくちゃ為になりました
ありがとうございます
0446デフォルトの名無しさん
垢版 |
2021/07/20(火) 13:00:13.21ID:DJlNseKm
>>444
やはり自然なのはifとlet使った書き方なんですかね
そもそも明示的に遅延評価を表すシンタックス形式(delay)があるんですね勉強になります
ありがとうございました
0449はちみつ餃子 ◆8X2XSCHEME
垢版 |
2021/07/20(火) 17:33:51.23ID:BjsPOMc7
元になる数式をなるべく形式を変えずに書きたいみたいな要求はあるんじゃないの?
プログラマ的視点で見れば >>440 の形に不自然さは感じない (むしろ比較的自然だと思う) けど、
理論家がコードに書き起こすときにはコードを変形させるよりは
遅延を明示したほうがすっきりと感じることだってあるだろう。

そこらへんは何が正しいとは言えないけど、
現時点で Scheme を学習中の人みたいなので色々な方法に触れておけば
どれかは役にたつこともあるかもね。
0450デフォルトの名無しさん
垢版 |
2021/07/20(火) 17:41:31.79ID:yRdGIeGP
こんなんでもいいんじゃない

(define (pow2 x y)
 (if (= y 0) 1
  (let ((z (pow2 x (quotient y 2))))
   (* (if (= (modulo y 2) 0) 1 x) z z))))
0453はちみつ餃子 ◆8X2XSCHEME
垢版 |
2021/07/29(木) 14:35:36.73ID:lV+mYu1n
簡単な場合をよく考えられないなら応用的状況ではもっと出来ないよ。
応用ができるようになってからなら枝葉は後回しにすべきだけど。
(いわゆる「早すぎる最適化は諸悪の根源」ってやつ。)

あと、単にこのスレってあまり話題ないから。
0454デフォルトの名無しさん
垢版 |
2021/08/29(日) 19:48:00.40ID:ExQfKpCF
Parenscriptとclojurescriptのメリットとデメリットどこかにまとまってないかな
主力をcLかclosureのどっちにするかで悩んでる
0455デフォルトの名無しさん
垢版 |
2021/09/01(水) 11:05:24.22ID:3cqZfQ8E
racket から pythonのtensorflowとか使いたいのに
まともなpython ffiが見つからない

racket死んでる?
0456デフォルトの名無しさん
垢版 |
2021/09/03(金) 17:00:38.92ID:w5919iNp
フリーランスに立ちはだかる「常駐」の壁。慣例を打ち壊し、
“テレワーク”案件3割→8割へと成長を遂げた「クラウドテック」の軌跡
https://prtimes.jp/story/detail/DBnPOktyljr
テレワークの一般化により、11月にはテレワーク可能案件83.7%へと増加。
2021年、フリーランスのトレンドは「移住&テレワーク」と予測
https://prtimes.jp/main/html/rd/p/000000045.000050142.html
リモートワーク求人専門サイト「プロリモート」がリニューアルオープン、業務委託契約の求職者と企業をマッチング
https://www.value-press.com/pressrelease/262778
1/3以上が採用につながる高マッチング率、リモートワーク×エンジニア・デザイナー専門の
人材紹介サービス「ReworkerAgent」正式リリース場所からも時間からも自由な働き方を実現!
https://www.nishinippon.co.jp/item/o/713384/
新潟県、移住してきたテレワーカー/フリーランスに最大50万円を支給
https://internet.watch.impress.co.jp/docs/news/1287094.html
茨城県日立市、県外からの「テレワーク移住者」に最大151万円の助成金
https://internet.watch.impress.co.jp/docs/news/1281120.html
長野市、市内に移転・事業所設置し、移住することで最大550万円の支援金を支給
https://internet.watch.impress.co.jp/docs/news/1274735.html
フリーランスが活用できる「最大1,000〜3,000万円・補助率50%〜75%」の
『ものづくり・商業・サービス補助金』とは?概要や条件を解説
https://freenance.net/media/money/4255/
『ReWorks(リワークス)』リモートワーク特化型転職サイトとして 3月5日 リニューアル
https://prtimes.jp/main/html/rd/p/000000051.000010457.html
0457デフォルトの名無しさん
垢版 |
2021/09/04(土) 12:17:58.77ID:7RPQ9cbD
hy一時期話題になったけど今は誰も使ってない
0458デフォルトの名無しさん
垢版 |
2021/09/04(土) 13:00:17.62ID:P/r0boNY
春頃にLispマシンの話題になっているが、
TAOのコードは結局Public Domainに出来ないのかな
https://www.nue.org/nue/tao/celis/index.html
0459デフォルトの名無しさん
垢版 |
2021/09/04(土) 17:09:55.40ID:jSSzYM7r
だいぶん昔にjaistでtaoのイベントがあったが同様の質問が出たが権利問題が解決できないらしく関係者にさえ配布できない状況らしい
lispの勉強会で遭遇した人の話なので風の噂レベルでスマンがガッカリしたのを思い出した.エミュレーションもデモしたらしい
0463デフォルトの名無しさん
垢版 |
2021/09/10(金) 16:25:34.83ID:vbZ+sZ5t
政治闘争で頻繁に互換性ないアップデートを繰り返して死んだ
hy

次はclojureで同じ政治闘争が始まりそうという噂が
0464はちみつ餃子 ◆8X2XSCHEME
垢版 |
2021/09/10(金) 17:54:13.80ID:53pAHbe3
hy くらいの新興処理系でどんどん変更が入るのは普通のことだと思うが。
つってももう登場から 8 年なのか。
0466デフォルトの名無しさん
垢版 |
2021/09/11(土) 20:38:39.26ID:Suq8GRsb
スレに書き込む前に妄想と現実の区別がついていることをよく確認しましょう
0468デフォルトの名無しさん
垢版 |
2021/09/11(土) 23:37:54.18ID:Suq8GRsb
いやそれは移植元にテストケースがあるからテストが完走すればだいじょぶっしょ
しかしそもそもschemeにもpcreライブラリは沢山あるだろうけど
0469デフォルトの名無しさん
垢版 |
2021/09/15(水) 04:41:28.63ID:mYoOhxQF
妄想も噂も似たような言い換えみたいなものなのに
何でそんな強い口調で言い換えを強要してくるんだ
0470デフォルトの名無しさん
垢版 |
2021/09/15(水) 04:43:02.67ID:mYoOhxQF
何でそんな強い口調で言い換えを強要してくるんだ
0472デフォルトの名無しさん
垢版 |
2021/09/16(木) 02:34:55.53ID:PaKnZlMf
465から別の話題になってて468まででひとつの会話の流れ.
つまりお前が勝手に被弾してるわけよ‥
0474デフォルトの名無しさん
垢版 |
2021/10/09(土) 23:58:58.03ID:6Ftx/1cj
sbcl2.1.9 windows版(amd64)入れてみたけど今まで起動直後に表示されてたWARNING(win版はスレッドまわりが壊れやすいけどそんなの対応してらんない!みたいなやつ)が表示されなくなって地味にうれしい
0475デフォルトの名無しさん
垢版 |
2021/10/10(日) 10:54:30.08ID:Td68Zwht
スレッド周りはpthreadのエミュレーションを自前で実装してたのを、直接Win32のAPIを呼ぶようになった
コードが一気にシンプルになったし、その時にバグの修正も行ったのだろう
0479デフォルトの名無しさん
垢版 |
2021/11/19(金) 06:28:29.94ID:xMhA1wC0
roswell環境で.roswell/local-projects/が認識されないんだけど原因分かる人いない?
0485デフォルトの名無しさん
垢版 |
2021/12/15(水) 14:51:19.13ID:gD/y5IR+
Lispworks 8でた!
0489デフォルトの名無しさん
垢版 |
2021/12/27(月) 23:09:52.29ID:W+QyKxlb
週2日出社、週2日在宅の週4日勤務が最高の働き方だと提唱したい

週休3日制になったら給料を減らされる??そんな考えだからいつまで経っても貧乏なんだよ...

サラリーマンが副業でプライベートカンパニーを設立するメリット

Webマーケターに転職して、セミリタイアを実現させる方法

【朗報】「在宅勤務OK」の求人、コロナ前と比べて7 7倍に上昇!

【悲報】「会社員に戻りたい!」というフリーランス、全体の3%しかいないw

【悲報】副業が解禁されても、副業を見つけられずに困窮する会社員が続出...
日頃から副業をやっておくことの重要性を再認識しよう

【驚愕】5人に1人は本業よりも副業収入の方が多いことが判明w 本業よりも稼げる副業とはなんなのか??
0493_
垢版 |
2022/01/04(火) 06:23:02.11ID:rzEME/gD
>>491
Gauche 0.9.11-p1 リリース
Windows での問題修正のみみたい。

>>492
1.0に向けての作業入られているようだけど
今年中に出るかは判らんなぁ
0495デフォルトの名無しさん
垢版 |
2022/01/04(火) 18:09:56.39ID:M2x34zFQ
>>494
それでも1.0はやっぱり大きな節目じゃないかな
それでなくてもマイナー言語を採用する
障壁は大きいのに、まだ安定版じゃ無い、
とか難易度が高い
0496デフォルトの名無しさん
垢版 |
2022/01/05(水) 01:55:05.36ID:M/mCn8xE
1.0 で Stabilize と書いてはいるが、別に現状の動作が不安定で落ちたりするという意味じゃなくて
API の試行錯誤とかをやってたのを 1.0 では「とりあえずの」決定版にしようねという話であって、
後にもたまには大きな変更だってあるだろうし、そのへんの感覚は番号だけ見てもわからんのだよな。
むしろメジャーバージョンが変わった直後は不安定という通説もあるし。
メジャーバージョンがクソデカでも信用ならんものなんて腐るほど見てきただろう?

心理的な障壁というのはわかるんだけど、逆に言えば気分の問題でしかない。
検証した上でやっぱりアカンとなったならしょうがないんだけど、
バージョンナンバー「だけで」判断してるのならよい態度ではないよね。
0497デフォルトの名無しさん
垢版 |
2022/01/05(水) 09:05:38.61ID:i4+082M6
1.0をだしたら、これまでできなかったあんあことやこんなことをやってみて、がんがん不安定化させるということだよね。もう飽きたからメンテナンスフェーズにはいるじゃないよね。
0498デフォルトの名無しさん
垢版 |
2022/01/08(土) 17:42:20.32ID:p9TLuwuj
Gauche は作者自身が仕事で使うための道具でもあるから
万人向けではない方向にデザインされるということはあるかもしれんが、
(まあそもそも Scheme が万人向けではないが……)
常に作者によって使われているので大きく壊れることはたぶんあんまりない。
0502デフォルトの名無しさん
垢版 |
2022/01/10(月) 19:38:26.99ID:2hS04FMw
俺はscmは遊ぶ用だけどguileがいい感じ、イントロスペクションがつよいので掘って遊べる

まだまだあんどきゅめんてっどなelモード探索も楽しい
0507デフォルトの名無しさん
垢版 |
2022/01/16(日) 22:57:05.20ID:hpGcG9O9
あくまで個人的感想だが、そういう風に勉強のために勉強するみたいなのは結局は上手くいかんのじゃないかと思う。
0510デフォルトの名無しさん
垢版 |
2022/01/17(月) 10:07:54.20ID:jU2WrI4n
成果物として作るんでなくてもちょっとした前処理程度のことをするときに使えばいいよ。
使い捨てるものを何で作ろうが文句は言わせん。
プライベートで使うんでもいいしな。
0512デフォルトの名無しさん
垢版 |
2022/01/17(月) 10:32:49.23ID:jU2WrI4n
俺は Scheme が一番慣れた言語だから……

こういうのがニワトリタマゴってやつかね。
慣れるために使いたいのに慣れてないから使わないってのでは
何も進まんでないか。
0516デフォルトの名無しさん
垢版 |
2022/01/19(水) 12:17:51.13ID:YBAvI2MD
なにか作ろうと思うと結局cffiでcライブラリを呼び出して使ってるので、糊みたいな使い方しかしてないなぁ
0518デフォルトの名無しさん
垢版 |
2022/01/20(木) 19:02:36.89ID:GKs3JF21
scheme修行読んだら処理系書けるかな?
ちょっと読んでちっともわからなくて挫折したけど
0521_
垢版 |
2022/01/24(月) 12:23:44.52ID:J5Esvhno
>>520
斉藤由貴バージョンの
夢の中へ
が脳内再生された。
0522デフォルトの名無しさん
垢版 |
2022/01/24(月) 20:39:39.47ID:xI9wwXQn
ちゃんとエンドユーザー様までデプロイするのはめんどいのは確か

グラフィックス叩いたりするライブラリに依存するのはやむ無しだけど、純lispなライブラリはライセンスの許す限りスニペットに切り出して同梱してる
0523デフォルトの名無しさん
垢版 |
2022/01/24(月) 21:07:29.09ID:e/3681Ma
継続が凄いって話は、かれこれ10年くらい聞いてたんだけど、結局は限定継続で十分だよね、
限定継続もあんまり応用ないね、って感じに落ち着いたのかな?
0524デフォルトの名無しさん
垢版 |
2022/01/25(火) 11:38:40.17ID:GfuWsBWm
継続が凄いってなんだよ
継続ベースのlisp実装をschemeと言うのだから、そういう意味では凄い応用例だよ
0525デフォルトの名無しさん
垢版 |
2022/01/25(火) 12:33:26.79ID:Do1EUgQ3
非限定継続ってjmcのambとかが該当するのか?
動作としてはバックトラックするだけだから特に継続概念が必須というわけではないけど、なんか楽しい
0526デフォルトの名無しさん
垢版 |
2022/01/28(金) 01:56:11.96ID:hT9TavA0
形式定義できるのが継続の便利なところなんだよ。
バックトラックするだけとはいうが「バックトラックってなに?」というのを突き詰めていったときに「継続をこんなふうに受け渡してるでよ」と言えるの。
0528デフォルトの名無しさん
垢版 |
2022/01/28(金) 23:54:45.12ID:hT9TavA0
原理的にはバックトラックと同じ速さ。
それが遅いというのならバックトラックでも遅い。
バックトラックより速い方法があってチューニングの手間をかけていいならそうすりゃいい。
0529デフォルトの名無しさん
垢版 |
2022/02/09(水) 12:03:16.04ID:3KsDo8lO
>>522
久々にscm書いてみたんだけどsrfi1とMITとr6rsでfold, fold-left, reduce fold-right, reduce-right(とそのpair-版)が初期値の畳まれる位置や引数の左右スワップとか違ってて混乱した

とっくに誰かやってると思ったけど今後の為に:initial-valueと:from-endを取るcl式reduceを移植しました…
0531デフォルトの名無しさん
垢版 |
2022/02/09(水) 12:36:09.65ID:3KsDo8lO
restに'symb突っ込んで泥臭く拾ってます
srfiにちゃんとした機構あった気がするけど、小道具レベルで依存はしたくないので
0532はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/02/09(水) 23:48:43.20ID:9Cj+df9g
ところで scm を使うのはなにか理由があるの?
単なる好みならそれはそれでいいんだけど
このスレで言及される Scheme 処理系は Gauche, Racket, Chicken あたりが多いので
scm 使いは珍しいなーと思った。
0533デフォルトの名無しさん
垢版 |
2022/02/10(木) 00:36:07.94ID:d8JzH9qO
guile使ってるけど#:で自己評価シンボルになるな
よく見かける:の方はデフォルトで有効じゃなくて、オプション切り替えだったり
0542でーちゃんじゃないけど
垢版 |
2022/06/25(土) 21:10:35.30ID:AGenfzJY
github.com/Soldier-B/ns.js/blob/master/ns.js#L3
0543デフォルトの名無しさん
垢版 |
2022/06/26(日) 13:26:40.20ID:DTfGvOZF
さとばん
0544デフォルトの名無しさん
垢版 |
2022/11/07(月) 12:52:23.10ID:D9DaYQB4
svigiはなんて読めばいいの
0545デフォルトの名無しさん
垢版 |
2022/11/07(月) 12:52:44.37ID:D9DaYQB4
木曽路的な
0546はちみつ餃子 ◆8X2XSCHEME
垢版 |
2022/11/07(月) 13:59:37.65ID:QQJOk/Pv
>>544
アイスランド語で括弧の意味だというのはあのキャラの作者が発表している公式な情報だから
Wikipedia でアイスランド語の表記から調べてみた。
https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%A4%E3%82%B9%E3%83%A9%E3%83%B3%E3%83%89%E8%AA%9E%E3%82%A2%E3%83%AB%E3%83%95%E3%82%A1%E3%83%99%E3%83%83%E3%83%88
たぶんこの場合の g は英語でいうところの y みたいな発音。
あえてカタカナで表すと「スヴィーイィ」みたいな感じ。

アイスランド語の辞書サイトで音を聞いてみた感じでも外してないと思う。
https://islenskordabok.arnastofnun.is/ord/40650
0547デフォルトの名無しさん
垢版 |
2022/11/07(月) 16:54:40.26ID:D9DaYQB4
>>546
ありがとう
音素と発音記号は手堅いね
0548デフォルトの名無しさん
垢版 |
2022/11/07(月) 20:41:51.67ID:kjCGP1Rc
>>546
ここでアイスランド語が言及されるとは驚きました、アイスランド語は実に濃ゆい言語ですね
教科書(Johns Hopkins) を買ったけれども、当然 1 ワードも読めませんでした
0550デフォルトの名無しさん
垢版 |
2023/01/08(日) 12:42:17.07ID:hPHqQTwv
schemeはじめましたなんだけど
[lisp1.0+]label, [cl]labels = letrec + let name
[cl]flet ((f (args) fletbody)) body = let ((f (lambda (args) body)) letbody)
って理解でいいの?
0551はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/01/08(日) 17:21:31.97ID:/n9SAwLy
おおよそ似た雰囲気では書けたりするのかもしれないけど
単純に対応してるわけじゃなかったりもするからいいかどうかは状況によるんじゃないの。
0552デフォルトの名無しさん
垢版 |
2023/01/08(日) 18:49:11.56ID:5ojqztS1
まんまじゃね?
とりあえず(macroexpand 'sb-int:named-let)はそのまんまlabelsに展開されたのでお試しあれ
どの処理系でも似たような定義が大体あるはず

1958年のオリジナルlispのlabelは、scheme界隈ではlet1という名前で見掛ける
当然だけど、ローカル定義が一つなので(自明には)相互再帰はできない

触って気付いたけど
(flet ((cons (a d) (list :cons a d))) (cons :a :d))
; (:CONS :A :D) clisp, sbcl
; (:A . :D) ecl

eclのこれバグ?
0553デフォルトの名無しさん
垢版 |
2023/01/09(月) 03:51:35.47ID:0CyucYY1
触ったことないのでeclがどの程度cltl/ANSI/clhs等の標準をリスペクトしてるのかも分からないのだが
とりあえずgoogle play storeからeclのandroidポートらしいeql5 replを入れてみた

(list ;; attempt to shadow cl:cons
(flet ((cons (x y) (cons y x)))
(cons 'co '?ns))
(let ((cons (lambda (x y) (cons y x))))
(funcall cons 'co 'ns)))

((CO . NS) (NS . CO))

fletは謎挙動だね…
* shadowしない名前(xcons)ならok
* (flet ((cons (x) (1+ x))) (cons 42))がアリティ不一致で怒られる
から推測するに、普通cl packageの関数なんて弄られないだろうと踏んで、関数の名前解決を手抜きして最適化してるんだろう

値の名前解決は特に弄る意義もないので、scheme風にlambdaをletで値として束縛して呼べば問題ない
clを名乗る以上はオプションで切れるくらいの配慮はあるだろうから、eclにこだわるならマニュアル読んでみては

少なくともclhsはリスペクトしてないね
...flet can locally shadow a global function name, ...
http://www.lispworks.com/documentation/HyperSpec/Body/s_flet_.htm
0554デフォルトの名無しさん
垢版 |
2023/01/09(月) 16:15:24.76ID:2yNmR2Eh
    |  彡⌒ミ
   \ (´・ω・`)名前のシャドウ化辺りって自分で処理系実装した子はわかると思うけどハゲる要因だから絶対関わらない方がいいと思う
     (|   |)::::
      (γ /:::::::
       し \:::
0555デフォルトの名無しさん
垢版 |
2023/01/09(月) 16:36:52.10ID:0CyucYY1
eclは有名だけど、embeddableの名前通りの用途で1MBちょいな処理系だから、そういうものと割り切って使うべき

funcallが冗長ならletのbodyにfuncallをconsするだけのmy-fletを作ればいいじゃない
(さらなる災禍を招きそう)
0557デフォルトの名無しさん
垢版 |
2023/01/10(火) 02:33:32.35ID:/i8qCr3o
>>553
特定の名前の解決を決め打つ言語は多いし、そういうポリシーもありだと思う
普通でないのはcondition(warning)を挙げないところ

決め打つ名前(locked package?)が分かってる限りは、flet/labelsのレキシカル束縛リストから拾った名前がbody内の呼び出しformのcarに存在するか、ランタイムコストの無い自明な静的解析でconditionを挙げられるはず
0558デフォルトの名無しさん
垢版 |
2023/01/10(火) 03:18:54.37ID:/i8qCr3o
>>550
等価と思って良いよ
伝統的なlisp(とcl)のように(let ((x '())) ...)を(let (x) ...)と略記できない、だとか細かい差異はあるけど

百聞は一見にしかずなので、構文の対応を見るのが手っ取り早い
あとeclのname collisionの件、consの例(>>553)はさすがにcontrived-exampleだと思うので、ついでにeclで破綻するように

letrec/nlet/labels で定義するラベルとして、所謂accumulatorイディオムにloop(他にはlp, iterとか)を使うのが慣例だけど、eclではcl:loopと読まれるのでは?と予想

;;; cl -- ok: cmucl, sbcl, clisp, gcl err:ecl (的中)
(defun fact (n)
(labels ((loop (k acc)
(if (= k 0)
acc
(loop (1- k) (* k acc)))))
(loop n 1)))

;;; scheme -- ok: guile
(define (fact n)
(letrec ((loop (lambda (k acc)
(if (= k 0)
acc
(loop (1- k) (* k acc))))))
(loop n 1)))

pcでテストはしたけど、スマホから手打ちなので変だったらごめん
0559はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/01/10(火) 13:31:12.96ID:TxpPtfKm
>>557
スクリプト言語 (処理系) 的な想定だと実行開始時にテキストの解釈から毎回やるので
静的解析もランタイムの一部みたいな感じになる。
この場合に限って言えばどちらにせよ名前のルックアップはやるのだからそのときにわかるだろうとは思うけど
静的解析を頑張らないという方針はあり得るんじゃないの。
0560はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/01/11(水) 00:38:29.47ID:s0T2WgwN
Gauche で検出されないエラーで (let ((0 1)) 0) みたいなのがあって、
実際にはオプティマイザが消去してしまうんだそうな。

文法の解析で通したものをオプティマイザがエラーとして弾くのも変な話だし、
オプティマイザが走査することがわかっているものを前段階でもチェックするのは二度手間だし、
オプティマイザを密結合してしまうのも保守しづらいし……
という葛藤があるのはわかる。

まあそれぞれに事情があるので原理的に可能だからといってそうすべきだとも言えない気がする。
0562デフォルトの名無しさん
垢版 |
2023/01/11(水) 01:29:07.80ID:/IOcm4EW
そういう手では絶対書かないだろう変なコードも、マクロ書いてるとまれによく発生するから困る
0563デフォルトの名無しさん
垢版 |
2023/01/11(水) 01:59:04.27ID:/IOcm4EW
カウンタ変数を捕捉更新しようとして、うっかり評価してしまったケースとか
0565デフォルトの名無しさん
垢版 |
2023/01/11(水) 02:34:55.34ID:LWIYKuEk
letの時点でオプティマイザに通してんのかな
let系はlambdaまで落として((lambda(i) i) (+ i 1))とすれば間違えようがないと思うのだが
0566デフォルトの名無しさん
垢版 |
2023/01/11(水) 02:44:32.93ID:/IOcm4EW
エスパー大会か?
(let ((i (+ i 1)))
(another-macro i))

another-macroは副作用目的で自明にiに展開したか、乗法的な関数を呼んだ(iの初期値0*n=0)
0567デフォルトの名無しさん
垢版 |
2023/01/11(水) 03:33:43.09ID:4gRHy1NM
>>565
gancheは知らんけど、さすがにletはプリミティブな事が多いかと
むしろ最適化で読み飛ばすならlambdaまで還元してしまってはダメで、LETをヒューリスティックに認識する必要がある

仮に評価順を示す為にバッククォートでわざとらしく書くと
`(let ((,index ,(1+ stride))) ,(* index stride))
; (LET ((0 1)) 0)

(に等価な)展開とかがありがちかな
特に例に意味は無かったってオチだったりして
0568デフォルトの名無しさん
垢版 |
2023/01/11(水) 03:56:23.35ID:/IOcm4EW
defmacro/macroexpand方式だと特にだけど、(let ((0 1)) 0)みたいな残骸から推論する技能はとても大事に思う
書く時もそうだけど、人が書いたモノの後始末なら前提知識が無いのでなおさら
これだけ想像を膨らませてくれる貴重な(let ((0 1)) 0)すら消し飛ばされるならもうお手上げ

なんて文句を言いつつ、schemeでもついslibのdefmacroに手が伸びてしまうのだが
0569デフォルトの名無しさん
垢版 |
2023/01/11(水) 06:03:42.65ID:/IOcm4EW
>>565
論理的にどんなletが束縛リスト(とおそらくbodyも)を読み飛ばせるかについて補足
letフォームの評価値は最後のフォームの評価値(car (last 'let-form))のみで決まるけど、それが再束縛のできない自己評価オブジェクト(0, T/#t, :kw-symb etc)ならば、単にそれを返すだけで他を一切見る必要すら必要がない
(let dont-care/maybe-invalid self-evaluating)
→self-evaluating

もしそれ以上簡約してしまうと、(eq 'let (car 'let-form))と(car (last 'let-form))だけを見て決められない
0570デフォルトの名無しさん
垢版 |
2023/01/11(水) 06:21:34.50ID:/IOcm4EW
一応値については正しいというだけで、もしbodyに(exit)や大域脱出が入ってても無視するのか?という問題はある

ill-formedな>>560すら無視するのだから、当然well-formedな(exit)も無視するのが自然だけど、実際のところはgaucheに訊いてください
0571はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/01/11(水) 17:03:18.22ID:s0T2WgwN
>>570
念のために補足しておくけど >>560 のケースは捕捉されないエラー
(現時点では捕捉することを意図的に諦めているエラー) であって
Gauche の仕様として正しいというわけではないよ。 結果は未定義。

直接的に書いてしまった場合にしてもマクロ展開結果でこうなるにしても
あくまでも誤っているプログラムだからね。

言いたかったのは >>557 に対してで、原理的に出来てもやらない事情の例として
(私は ECL のことは全然知らないので) Gauche での例を出したってだけ。
0572デフォルトの名無しさん
垢版 |
2023/01/11(水) 17:40:33.93ID:/IOcm4EW
>>571
どうも、俺のも原理的には…という同じ意図の話だよ

eclやgaucheが有名実装では最もアグレッシブな感じなのかな?
(declaim (optimize (speed 0) debug safety)
が外せない俺には怖くて触れないよ
0575はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/01/14(土) 01:01:49.57ID:9ctkhBjT
>>572
> 有名実装では最もアグレッシブ

そんなことはないんじゃないかな。。
実行前の処理に時間をかけない (かけても総合的な性能向上にならない) という
判断でエラーチェックに消極的だけど最適化にも消極的だから。
0576本田
垢版 |
2023/01/25(水) 23:58:21.43ID:PahnnjBC
UCB Scheme
https://people.eecs.berkeley.edu/~bh/61a-pages/Scheme/
UCB Scheme is a modified version of STk 4.0.1 by Erick Gallesio.
0580はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/01/30(月) 00:59:07.34ID:kRDQpz8S
そのリンクがどうしたっていうんだ?
何か思うところがあるなら話題に挙げるのはかまわんが
ただリンクを置いて去るのはやめて欲しいな。

ニュース系のネタならお知らせの意味で貼ったのかなと思うところだが、
そういう感じでもないみたいだしな。
0581デフォルトの名無しさん
垢版 |
2023/01/30(月) 19:13:37.70ID:prACFehy
そもそもダイナミックスコープの何がだめですか
Emacs lispはダイナミックスコープですが、
あちこちから呼ばれてる関数を、空関数で上書きして殺すとかできて便利です
Emacs lispの感覚でGIMPのスクリプト(scheme)を書こうとすると
なにか何でもかんでもラッパー渡し(いちいちcarをひとつ辿る)って感じです

ちなみにLispは普通の手続き型言語としてしか使ったことないです
そんな奴への説教とかあったら聞きたいです
マクロとか、「確かにif文を関数として実装するのは無理かもしれないし、
そういう時に使うのかな」くらいにしか解ってないです
0582デフォルトの名無しさん
垢版 |
2023/01/30(月) 19:45:34.45ID:w7gs7hNq
>>581
全然ダメじゃないよ。でも誰か(昨日のオレ)が余計なことをやって不審な挙動をしてるけど原因がさっぱり分からないというのは起こりやすいかもしれない。
0583デフォルトの名無しさん
垢版 |
2023/01/31(火) 01:40:41.84ID:t9l1A9G+
Lispではたまたまうまく動いてるように見えるけど変数宣言の無い言語でダイナミックスコープやると死ぬ
0584はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/01/31(火) 10:19:46.67ID:XA5Y5Qfu
>>581
元のプログラムを書き換えずに影響を差し込むことが出来るってのはアプリケーション拡張用として便利だけれど
元のプログラムが想定してない滅茶苦茶なことも出来ちゃうということと最適化が困難になるのが深刻な問題だと思う。

ユーザーが変な使い方をして変なことを起こす分には自業自得といえるにしても
今ではパッケージをネット上からダウンロードしてインストールまで自動だから
悪意あるコードが他のパッケージを好きなように変更できるようだと影響範囲が大きい。
たとえばウェブブラウザのアドオンなんかだど各アドオンは通信によって協調は出来るが
環境は共有しないようにすることで影響力を制限している。

参照しているものがことごとくいつでも変更される可能性があると
インライン化や畳み込みといったごく基本的な (しかし効果が高い) 最適化すらできない。
現代的な言語処理系に対して数十倍単位で遅いのはさすがに困る。

ものごとの良し悪しにはトレードオフがある。
どちらの問題もコードが小規模ならどうということはないので利点のほうが上回っていたのかもしれないが、
時代を経て巨大になりすぎた。 疎結合を意識した構成にしないと手に負えない。
0585デフォルトの名無しさん
垢版 |
2023/01/31(火) 10:34:59.12ID:tSjB9eWW
グローバル&ダイナミックは罠になり得るけど、対話的に使うコマンド言語(シェル)は大体そうだし利便性の問題、新しいpwshでももそう
定義をテキストとして全てダンプして、読み戻せる利点がある

cl/scheme(fluid-letとかそんな名前の拡張)のように基本レキシカルで、ローカル&ダイナミックは宣言が必要なら意図せず使う事は稀なはず
(form-in-scope? (declare (special x)) form-in-scope)
(locally (declare (special x)) (form-in-scope))
面倒だけど(declare…)が外、つまり同じレベルのフォームに影響する場合があるのが気持ち悪いから、明示的な後者を好む
0586デフォルトの名無しさん
垢版 |
2023/01/31(火) 10:56:14.75ID:tSjB9eWW
レキシカルな情報を取り込んでしまう(暗黙にクロージャを作る)クロージャにはテキスト表現が無いから、ダンプが出来ないのは致命的な欠点
よってダイナミックスコープ一択になる
pwshだと gci function:
bashだとdeclare -f (多分、よく知らん)
でダンプ、出力されるテキストを読み直せば(大体)環境が復元できる

pwsh方式だと{code}.GetNewClosure()でクロージャは明示的に得る
0587デフォルトの名無しさん
垢版 |
2023/01/31(火) 11:08:10.67ID:tSjB9eWW
>>581
guileだっけ?
あれ変な拡張山盛りだから出来るんじゃない?fluid-letみたいな名前がないかaproposしてみたら
0588はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/01/31(火) 11:28:43.20ID:XA5Y5Qfu
>>587
GIMP の Scheme (Script-fu) は TinyScheme が使われている。 (昔は SIOD だった。)
まあ fluid-let くらいなら自分で書いてもたいした手間じゃないけどね。
0589デフォルトの名無しさん
垢版 |
2023/01/31(火) 11:31:05.15ID:cAwVb56Q
#<closure ...>が嫌ならいにしえのfunargを使えばok
別にレキシカル環境をリストで持ったって構わないわけで、印字表現が不透明なlispはインクリメンタルコンパイルやリストより効率の良いデータ構造を選んだ結果

厳密にはダイナミックスコープでないけれど、コード注入なら'ラムダ式を渡して廻っても同等の自由が得られる(call by name)

既存のコードの方でも準備が必要だけど
0591はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/01/31(火) 12:23:06.03ID:XA5Y5Qfu
>>590
アプリケーションに特有の機能はアプリケーション側で用意されたものを呼出して使うわけだし
言語側のライブラリはほどほどで足りるんで小さい処理系のほうが面倒がないというのはあるかも。
Guile はビルドするだけで面倒くさいが TinyScheme はファイル数個の簡単構成だし。
0592デフォルトの名無しさん
垢版 |
2023/01/31(火) 12:38:01.83ID:mFP57axK
ローカルにダイナミックな束縛をやるなら、それ専用のprogvフォーム(clにある)はどう思われてるんだろ?
(progv 変数リスト
値リスト
body)

let系列の (変数 値)リスト慣習を転置(zip)した記法だけど、束縛が多くても縦にスペースを取らない
let慣習では変数 値はsetq/set!だけど、progvの変数リストは評価されるから、リード時にバッククオートでシンボルを埋め込むようなハックが不要
動的束縛を活用するようなメタな場面では特にだけど、埋め込む為だけにわざわざリーダを何度も通すのが歯痒い

多分に個人的な好みだと思うけど
0593デフォルトの名無しさん
垢版 |
2023/01/31(火) 13:07:01.68ID:tSjB9eWW
>>592
転置されてるのと束縛リストの実行時評価は、おそらくlet風のマクロを書く時に便利だからかな
mapcar #'list let-like-binding-list
がprogvに渡せて、あと欠損値も勝手にnilで埋まる

あと機械的に名前を処理するならgensymもお忘れなく
0594デフォルトの名無しさん
垢版 |
2023/01/31(火) 13:18:26.31ID:tSjB9eWW
例が悪かった
単にlistをmapcarするだけでは、let形式のリストをそのまま渡した方が早い
不定数の引数を取ってリストを返す関数で、自明なlist以外をmapcarするならかなり楽が出来るはず

しかし何に便利か今すぐ具体的な例は思い付かない()
0595デフォルトの名無しさん
垢版 |
2023/01/31(火) 14:00:30.21ID:tSjB9eWW
>>591
俺環ではインストール(展開後)で50MBのディスク容量占めてるな
実験的なelisp対応(編集機能無しで一体何の意味が?)とか
興味深いけど謎な方向に突き進んでるね
0597デフォルトの名無しさん
垢版 |
2023/01/31(火) 15:18:25.22ID:AYYg8Thv
emacsの膨大なテキスト処理関数群に依存していない純ロジックのみのelispコードなら資産になる
そんなの指折り数える量だろう
0598デフォルトの名無しさん
垢版 |
2023/01/31(火) 15:38:47.41ID:sZCc+g+m
ライセンス問題でどうしてもコードを触りたくないなら別だけど
何らかのlisp書きであれば、コピペしてその方言に適合するよう手直しする程度は自明な作業でしょう
0599はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/02/01(水) 01:45:17.62ID:ySbq2UIa
>>598
ダイナミックスコープとレキシカルスコープでは埋めがたい差があるし、モジュールやフェイズの方針なども大きな差だ。
伝統的に方言と称してはいるが個々に定義された別の言語なのでそんなに簡単に修正は出来ないよ。
私自身はそこそこ Scheme には習熟している自信があるが Common Lisp も Clojure も全然わからん。

C と JavaScript の外観はなんとなく似せてあるが静的型と動的型の違いという根本的な部分で違うからそう簡単に移植はできないのと同じような感じ。
0600デフォルトの名無しさん
垢版 |
2023/02/01(水) 06:05:03.14ID:BjxytPYm
いっそ Emacs そのまま組み込んじゃうとかそんな方向に進まないかな…
近頃の環境ならそんなに重くないはずだし。
0601デフォルトの名無しさん
垢版 |
2023/02/01(水) 14:47:30.69ID:MmorO90J
>>600
やってできなくはないのかもしれないよ
昔、zlibがまだなかった時代にDOSでzオプションの利くtarを使いたくて、
仕方なくtarとgzipをまとめて一つのバイナリにリンクしてしまって、
スタートアップでヒープを半分に割って、スタックをそれぞれに割り振って、
あとはバッファが一杯になるたびにtar側とgzip側をsetjmpとlongjmpで行ったり来たり、
解凍は問題ないんだけど圧縮がどうしても同じ結果にならなくて、発表せず一人で使ってた
0602デフォルトの名無しさん
垢版 |
2023/02/11(土) 19:10:46.38ID:iYjc3QSL
オレオレSchemeでMineSweeper
ソースがSchemeで書かれている
ttp://ujip.ninja-web.net/schemeonjs/minesweeper.html
0605デフォルトの名無しさん
垢版 |
2023/03/05(日) 13:42:32.16ID:nmaj3sub
オンラインでuLisp動かしてみようかとTinkerCADのArduonoUnoにソースコード流し込んでみたけどさすがに5000行は許してもらえないみたいだな。
0606デフォルトの名無しさん
垢版 |
2023/04/24(月) 08:39:19.08ID:AD1D3xO/
最適化されたCLは最適化されていないCよりは速い
昔Common LispでCより速いHTTPパーサを書いたとか言ってたのを見かけた
コードを見るとnodejsのCで書かれたHTTPパーサをパクったみたいな感じなのに
比較対象はなぜかどっかの個人がCで書いたHTTPパーサだった
その個人が晒してたソースのMakefileはデフォルトでは最適化なし
なぜ比較する前にCの方を最適化することを思いつかなかったのだろうか
というかなんでnodjsの方と比較しなかったんだ?
誰か理由わかります?
0610デフォルトの名無しさん
垢版 |
2023/06/20(火) 13:38:32.61ID:Dvlv0UV+
scheme処理系作ったりSICPで悟り開いたりしたけど今の使い方は実質電卓
スペース区切りの値そのまま貼り付けられて便利なんよなー
0611デフォルトの名無しさん
垢版 |
2023/08/18(金) 02:03:46.68ID:dtVdNVwB
John Cowan 氏が R7RS-large の議長の座を降りることを表明した模様。
これからの体制については現時点は決まっていない。
0612デフォルトの名無しさん
垢版 |
2023/08/19(土) 10:24:26.69ID:L0GsKMkM
実質機能しない規格なんて不要
主要処理系の実態調査して
ANSI Common Schemeを策定すべき
0613デフォルトの名無しさん
垢版 |
2023/08/19(土) 20:44:33.82ID:2cGgFupU
実用的で無い言語にANSI規格とか要らないだろ

それより、Type Script 普通に良い言語だぞ、
あれ実質的に型付きのlispだわ
0616デフォルトの名無しさん
垢版 |
2023/08/20(日) 21:24:26.60ID:CVtYBdI9
>>615
設計者の「そうしたかった」という発言が拡大解釈されたもので、
インタビューをちゃんと読むと「そうできなかった」ということも言ってる。
0621デフォルトの名無しさん
垢版 |
2023/10/06(金) 23:46:32.54ID:WmRjQTiM
Gaucheの目的が何なのか知らんけど
それが達成されるまで1.0にならんのだろうな
0624デフォルトの名無しさん
垢版 |
2023/10/07(土) 23:47:40.08ID:c4CFtcBt
要望ね。schemeは処理系としては構造が簡単だから適当に作ってもそこそこ良い具合に出来上がるだろうが、
問題はその後で、処理系の方向性を決める必要がある。処理系作るってことは目標が既に設定されている場合もあるが、
他人に使って欲しいのであるなら例えばpythonライブラリ流用できるとか.NETでGUIアプリ簡単に作れますとかwebだとか生成AIで何かいけるとかそんなのだね
俺がGaucheの名前を知りながら長年ほぼ触ったことないのはその辺りが原因だよ
0625はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/10/08(日) 01:14:49.29ID:tCGlxsdd
Gauche の目標設定はトップに書かれている。
http://practical-scheme.net/gauche/index-j.html
要するにスクリプト言語として常識的に必用とされる機能を盛り込んで日常業務に使える Scheme 処理系を目指すってことだ。
英語の「日常会話程度」が専門的な会話より難易度が高いなどといわれることもあるように「普通に使える」ってのは何か特徴的な売り文句があるより大変だったりもする。

Gauche は作者自身が業務で使ってるわけだから特化するより万能寄りのデザインなんだろう。

個人的には日本語テキストを不自由なく扱えるのがありがたいね。開発が始まったきっかけも stk で日本語を扱えなかったかららしいし、そこらへんは力が入ってると思う。
0626デフォルトの名無しさん
垢版 |
2023/10/08(日) 12:59:35.92ID:SlOLtELZ
schemeを好きで使ってるやつって俺含めて既に自分の処理系は持ってると思うのだが、
自分の欲しい機能を満たせばそれ以上求めないし、その成果を踏み台に次のステップへ階段を上がるだろう
階段を上った末、他人に使わせる場面に出くわす事は良くある事で、その時それはschemeではなくなってた方が良いかもしれない
新人「えーなにこの括弧だらけ…今のトレンド?か、かっこいいですねワラワラワラ(辞めよ…)」
業務で使ったら他人を辞めさせる能力については万能になれるか
0629はちみつ餃子 ◆8X2XSCHEME
垢版 |
2023/10/13(金) 15:24:17.01ID:ZG3aaQwo
expecting ってのがどのくらいの確信なのか感覚的にわからないのだけど
一応の既定路線くらいには考えていいんかな?
0630デフォルトの名無しさん
垢版 |
2023/10/13(金) 19:25:12.51ID:79LHTXDX
しらんがな
どうせ本人もここ見てるだろうが質問あるなら直接本人に聞けよ
答え難いだろうが
0633デフォルトの名無しさん
垢版 |
2024/02/12(月) 11:47:40.17ID:QDPVm8Ph
GuileとGaucheって、VMインタープリタ、Cプログラムとの連携・拡張、オブジェクト指向あり、もともとR5RS。
フリーソフトウエアやライセンスという点以外は、言語・実装の方向性としては似ているように思いました。
Gaucheが、BSDライセンス版Guileのような感じがしたのですが、みなさんどう思いますか?
0638デフォルトの名無しさん
垢版 |
2024/04/08(月) 00:42:38.05ID:skM/lEty
【検証】40時間Lispを勉強したら信者になれる?【Lisp1】
https://youtu.be/V2GM9lR-Di0
Lispの勉強をしたら『葬送のフリーレン』と同じカタルシスが待っていた。【Lisp2】
https://youtu.be/JvsSt_ksKiw
0639デフォルトの名無しさん
垢版 |
2024/04/08(月) 00:43:02.37ID:skM/lEty
面白かったのでw
0640デフォルトの名無しさん
垢版 |
2024/04/08(月) 02:59:37.49ID:7blvdNRP
神の言語からschemeを経て生まれたjavascriptは人間にとってはちょうどいいバランスだったわけだな
0642デフォルトの名無しさん
垢版 |
2024/04/11(木) 10:36:33.17ID:8Rm0X/WO
それの前にポールグレアムいじり回が3回あって
それで「Lispがそんなにすごいなら」ってことで40時間勉強したというわけだねw
0644デフォルトの名無しさん
垢版 |
2024/04/12(金) 00:31:32.72ID:H7gFN+op
MIT卒でLispで儲けたあと、ベンチャーキャピタルになった元本職かな
0645デフォルトの名無しさん
垢版 |
2024/04/12(金) 11:49:20.24ID:nR+PqPBt
エッセイストだと思うけどマとしては通販サイトとか作ってたんだっけ
ただ小さな関数やマクロutilが集まったonlisp.lispは準標準関数的な感じで愛用してます
0646デフォルトの名無しさん
垢版 |
2024/04/12(金) 12:38:02.80ID:wZ+y5Ko5
そもそもハッカーであるかにガンガンプロダクト作る的な意味での本職マか否かは関係ないと思うのです
cl&schemeの根幹や文書化のみならずC, Java, Fortran委員まで勤めた皆のSteele先生だって何作ったか寡聞にして知らんくらいだし
最近ではC,AWK,Goのバイブル+作法本で鳴らしたKernighan御大も隠居してエッセイストやってる

言語本+エッセイで良い書き物できるのがハッカーの十分条件だと思うね、pgrahamも余裕で該当
0648デフォルトの名無しさん
垢版 |
2024/04/12(金) 13:27:33.28ID:vAI6Kzu4
プリンストンで教授やってるみたい
0649デフォルトの名無しさん
垢版 |
2024/04/12(金) 14:17:26.15ID:XxWOnWTK
おれはlispはスゴイ神の言語とかくっさいワナビ主張は大嫌いだけど、lispはハッカー言語という主張には賛同したい

名だたるスーパーハッカーの共通部分を探してみると、それはシンタックス/セマンティクスに対する深い理解、すなわち言語デザイン能力なんだよな
まあlispの専売特許でなくML系やHaskellもそうだけど、つまりDSLの書きやすさね
別に言語内完結に拘らずともlex/yaccでも処理系手書きでもいいが、言語内で完結したいなら好ましい

挙げられてるPaul GrahamやG.L.Steeleのような簡潔で一貫性のある手続きインターフェイスや構文の設計(言語デザインのみならず、むしろ日常の構造化プログラミングにより通ずる)には、それを自然言語に起こしながら深く考え推敲する経験が必須だろう

これがハッカーの必要条件だと思う(>>646の十分条件に対して)
0650デフォルトの名無しさん
垢版 |
2024/04/12(金) 15:01:50.67ID:wZ+y5Ko5
>>648
もう80才超えてるし、教鞭執れてるかは怪しいね…
最近プログラム書いてねえなあ、とかウェブで言ってたし
代わりに最近のエッセイ本はマ/CSというより一般人向けっぽいので食指動かず
Understanding the Digital WorldシリーズとかDefending Yourself in a World of Too Many Numbersとかそんな題の書いてる

ソフトウェア作法、プログラミング書法、プログラミング作法の現場で戦うプログラマーの為の三部作は素晴らしい、言語に縛られない(あえて題材は様々な言語)し、lispにも通ずる普遍的な知恵袋だよ

スレチなのでそろそろこの辺で
0652645
垢版 |
2024/04/12(金) 15:53:49.12ID:OhyEPSVL
lispの話をしよう
onlisp.lispのようなオレオレutil(s).lisp/scmから引用し過ぎるのはあまり宜しくない?
macroはコンパイル順の関係で引く方が問題起きにくいけど

名前がdescriptiveなのは前提として
too generalであれば初見の人に読みにくいのではと思うこの頃
一方でspecificであるかぎり、手続きを分かつ働きすら無い関数抽象も読み易い:
carにget-operator、cdrにget-operandsなど単なるリネームでも重用する
これらはpackage内にレキシカルな意味で近傍に置くべきよね?(使い捨てならflet/labels、共用ならdefun)

より一般的な小物をコーディングを楽にする為だけに引くならば、lisp書きなら定義も大体覚えてるだろう有名な小物util集(alexandria、sfri)に依存した同梱するのも(ライセンスが許しても)憚られる…

このスレやSO等見ても必読書なOn Lispは知名度あるだろうから、onlisp.lisp由来のものは初見で読めてコンパクトでバランス取れた妥協点だと思って使ってるんだけど
(ライセンスや再帰志向で性能難アリなので、手習いがてら書き直したクローン版、念の為)

なおonlisp.lispは手続き名がいにしえのlispかよってくらいヤバいのが欠点
0653デフォルトの名無しさん
垢版 |
2024/04/12(金) 23:54:00.88ID:/A9qFmr2
文章下手糞すぎて読む気も起きない
これって神の言語に慣れすぎて言語障害になった例かよってくらいヤバいのが>>652の欠点
0654デフォルトの名無しさん
垢版 |
2024/04/13(土) 18:14:03.11ID:JilIuOKd
ストールマンがガンになったらしい
長髪も髭も落としてしまって別人みたいになってる
0656デフォルトの名無しさん
垢版 |
2024/04/13(土) 19:21:54.91ID:JilIuOKd
何が?
0659デフォルトの名無しさん
垢版 |
2024/04/14(日) 12:56:54.81ID:JRHy27WB
ゆる学徒ハウス別館
現役Lisperが語る! Lispはオーパーツで人類には早すぎた【電脳史学】
https://youtu.be/tLZ8J9tGVEs
0660デフォルトの名無しさん
垢版 |
2024/04/14(日) 13:37:09.89ID:JRHy27WB
ゆるコンピュータ科学ラジオ
大人の勉強は「夢の中」が主戦場。寝ながらマクロを書くといい【Lisp雑談】
https://youtu.be/Lbt_CCQKWFA
0661デフォルトの名無しさん
垢版 |
2024/04/14(日) 14:04:02.38ID:JRHy27WB
コーシー噴いたw
0662デフォルトの名無しさん
垢版 |
2024/04/14(日) 15:00:30.77ID:XsKNoxHh
>>660は娯楽コンテンツとしては面白い

でもLispは良いとして集合論を勉強しようとしてるのにはやれやれだな
Haskellで圏論とかAIで代数幾何に夢見たりするのと似てる
結局広く浅くでウンチク欲を満たすに留めて、実践から逃げたいのだろうな
実践は壁だらけだから
0663デフォルトの名無しさん
垢版 |
2024/04/14(日) 17:27:06.49ID:ezgj98lZ
Lispとは別に2人で集合論やって
Lispは一冊何か挟んでからPAIP読んでほしい
番組のネタ的に
0664デフォルトの名無しさん
垢版 |
2024/04/14(日) 21:34:02.26ID:p4Nf2jzu
その人らはLispに大した拘りはないし
今更検索でまともに引っかからない古代のPAIPなんてやる意味を見出せないだろ
AI関連ならTranslatorからChatGPTブレイクに至るまででも話題にしたらいい
0665デフォルトの名無しさん
垢版 |
2024/04/14(日) 21:56:43.27ID:JRHy27WB
そうかなあ、論理プログラミングとか自然言語解析とか右側の人大興奮じゃないの
0666デフォルトの名無しさん
垢版 |
2024/04/15(月) 01:53:38.60ID:YG3lrvG/
>>649
MLやregexエンジン積んでパターンマッチ機構を言語ビルトインにしても特にアドバンテージなんて無いと思うけどな
50行のコードでcl-ppcre(perl相当)とも機能面では十分戦えるわけで

or/and,named-capture/backref、lookahead/behind-assertion、predication、filter、context-sensitiveなreplace等ね
超古典な"LISP" Winston, Paul Horn, 2nd edのchap.17に載ってるやつ
本を薄くするために徹底的に再帰で書かれてるからまあ性能は察せ()
再帰で分かりやすいコードだから叩き台にもオススメ
0667デフォルトの名無しさん
垢版 |
2024/04/15(月) 02:00:08.14ID:YG3lrvG/
あれはsymbolic pattern matchなのでregexと比べるのは良い例出なかったごめん
まあexplodeしてしまえばもうキャラクタベースだ
確かGrahamの>>652にあるシンボルをバラすやつ、まあ3行くらいで書ける小品だけど

explodeってネーミングがクールで覚えてたわ
0668デフォルトの名無しさん
垢版 |
2024/04/15(月) 02:27:22.10ID:wPU2Kemh
>>665
そうそう、PCと自分のスキルで実践出来る分野なのに(最低限の真似事すら)やってないのがお察しか
右の人が予めPC音痴だと予防線張ってるのは自走力低めだと自己分析出来てるのかも

まぁ実践(この場合はプログラミング)で玉砕しちゃったら、しょんぼりするか歯切れ悪くて
面白くなくなるタイプだからチャンネル的には今のままで良いのかも

左の人は画面キャプチャしながらライブコーディングするスタイルを何処かで見せないと説得力に乏しい

左右どちらも含蓄なく浅はかに見えてしまうので、その道の専門家をお呼びするスタイルにして欲しい
C#のufcpp的な人が(声とコード画面だけでも)出演したら(最低限の真似事なら)実践する人が増えると思う
0669デフォルトの名無しさん
垢版 |
2024/04/15(月) 02:48:11.62ID:YG3lrvG/
>>665,668
うむ、若かりし頃はマルコフやProlog/SQLモドキとかやってた、なるべく決定論的なのが個人的な好み
トレースを分析しても理解の困難なモノは、決して知的探究心を満たしてはくれないのだ

流行りの文章生成もマルコフならトレーサビリティは完全なのが良い
0670デフォルトの名無しさん
垢版 |
2024/04/15(月) 03:14:20.11ID:YG3lrvG/
古いAIのバイブルPAIPすら恥ずかしながら未読の身ですが…
lispもデータドリブンなNN系はむしろ苦手とは思わない

NN系がマスメディアでもバズり出した頃にウィキペディア見たら、Pythonのサンプルコードが載ってたので
そのままCPython/Numpyとclで書いてみたら、ベンチはsbclぶっちぎりだったよ
もちろん個々の処理がバックのcライブラリより速いなんて言わない
同レベルのコーダが同ロジックで翻訳すればの話

その差はclの無駄に細かいarray/vectorコンストラクタ引数の設計
具体的にはR/W抑えるビュー相当の:displaced-*と:fill-pointer、配列の動的リサイズ指定の:adjustable引数ね
Numpyのndarrayはこの辺が裏で自動でやるのでコーダの裁量がない

まあNumpyでプラグマ/フラグ駆使してその辺のお節介挙動を切れば普通に負けるかも
あくまで並コーダが素直に書く限りの話
0671デフォルトの名無しさん
垢版 |
2024/04/15(月) 03:45:37.49ID:KXqIDgH/
Cバックエンドで配列のviewをサポートしてるなら究極的には言語/処理系ではアルゴリズム瑕疵が無い限り有意な差はないよ
ただし最速言語Fortranを半分程度使うNumpyにも優位性はある
gccはじめ同じILにコンパイルされても配列多様コードでにおいてCより数倍は速い

ただしNumpyは書き方に細心の注意をしないとユーザの預かり知らぬ所で勝手にディープコピーする大きな罠も
そうした不透明性が嫌い

明示できるCLのFortran実装を待ち望む
0672デフォルトの名無しさん
垢版 |
2024/04/15(月) 03:58:24.79ID:TPgVCyAO
>>671
clの明示性といえば、:rehash-size :rehash-threshold等で個々のハッシュテーブルまでチューンできるのがいいね
配列なんかよりハッシュテーブルの方がリハッシュコストが遥かに高い

動的言語のリハッシュは知る限り全部処理系任せか、サポートしていてもインタプリタのコマンドラインオプションで一律にしか変えられない
0673デフォルトの名無しさん
垢版 |
2024/04/15(月) 06:50:07.08ID:DfbFoW6K
>>671
>ただし最速言語Fortranを半分程度使うNumpyにも優位性はある
>gccはじめ同じILにコンパイルされても配列多様コードでにおいてCより数倍は速い

この部分、Fortranで配列多用したらCより数倍速い的な意見なのかな?
1ミリも分からんので、詳細求む
0676デフォルトの名無しさん
垢版 |
2024/04/15(月) 11:39:03.37ID:L/ePcET8
中間言語が同じならコーディングの瑕疵は人間工学的な問題
Cは宣言が貧弱でin/out、純粋関数、エイリアスの有無は推論頼りだから失敗すれば死ぬ
ただ最近はrestrict宣言付けて回るなら重なるか推論不能な配列のエイリアス有無も指定可、難解だけど
一方で参照渡しのFortranはtaraiベンチで推論失敗すればデリファレンス地獄で死ぬわけだけど、これ解消する宣言あったっけ?

むしろ宣言無しのナイーブなコーディングなら数倍どころでは済まんよ
ランタイムの重いclは比類なき宣言の豊富さで静的言語にまで迫ろうと頑張ってるわけで
0677デフォルトの名無しさん
垢版 |
2024/04/15(月) 11:50:11.63ID:L/ePcET8
パフォーマンス志向でarrayとdeclareまみれのclはlispっぽさが失われるのがつらい
何でも出来るのだと前向きに考えてゆきたい…
0678デフォルトの名無しさん
垢版 |
2024/04/15(月) 11:53:02.96ID:xx2br7bI
>>671,676
話逸らさんで良いから
Fortranの「配列多様コードでにおいてCより数倍は速い」コードを出してw
0679デフォルトの名無しさん
垢版 |
2024/04/15(月) 13:00:49.14ID:h9iqzVMR
ゆる「コンピュータ科学」ラジオなので、集合論でもいいだろw
マウントしないと気が済まんのか
0680デフォルトの名無しさん
垢版 |
2024/04/15(月) 13:15:54.71ID:WhsyARtf
どのレスがマウントに見えたのか知らんけど
集合論なんてAppendixか記号一覧でサラッと確認して本題を進めるのに
集合論のブルーバックスを読んでシッタカウンチクを語る方がマウントに近い行為だと思うけどw

まさか公理的集合論とその形式的手法をガッツリやるのかな
0681デフォルトの名無しさん
垢版 |
2024/04/15(月) 13:20:30.61ID:WhsyARtf
そんな訳ないかw
単純に集合論とか圏論は逃げ
(研究者じゃない限り)コンピュータ科学は実践を伴ってナンボの世界なわけで
そこのレベル低そうな人にウンチク唱えられても何か可哀そうで娯楽にすらならん
0682デフォルトの名無しさん
垢版 |
2024/04/15(月) 13:42:47.75ID:h9iqzVMR
痛い人だw
0683デフォルトの名無しさん
垢版 |
2024/04/15(月) 15:03:16.41ID:AVuQkQ2W
痛レス追加w

プログラミングにおいては、学問的基礎はそこそこにしてドンドン先に進んだもん勝ちなのよね
学習の初期段階から集合論(動画内ではタイプ理論も)に油売ってたら(逃げを通り越して)脱落かと
ユーチューバーが視聴数稼ぎの為に手を出してるのを差し引かないとね、初学者が真似したら破滅

みんな母国語を話せるでしょ?言語学なんて知らなくてもw
0684デフォルトの名無しさん
垢版 |
2024/04/15(月) 15:11:29.44ID:oyztWlKb
逆に数学ちゃんとやらないからLispでつまづいてイライラするんだろうな
そういう奴は20年後も進歩してないと思う(俺のことだが)
0685デフォルトの名無しさん
垢版 |
2024/04/15(月) 17:04:25.48ID:BU/Fumer
でもまぁ左は慶応情報工学、右は数学が得意と言ってるし集合論は楽しみではあるな(他意は無い)
0686デフォルトの名無しさん
垢版 |
2024/04/15(月) 17:51:51.96ID:lxkYY0z4
集合論もゲーデルもコンビネーター理論も入門レベルは理解したい
と思い続けて10年w
0687デフォルトの名無しさん
垢版 |
2024/04/15(月) 17:53:00.51ID:lxkYY0z4
そんなことよりCentOS8入れてみたらGuileもEmacsも入ってなくてブチ切れそうなんだけど
0688デフォルトの名無しさん
垢版 |
2024/04/15(月) 19:17:47.96ID:pFNJA2no
Lispは母語じゃないからなぁ
0689デフォルトの名無しさん
垢版 |
2024/04/16(火) 08:49:18.26ID:Fr3sHPgG
>>686
Lisp本ではないが論理学の問題集みたいな一般向け書To Mock a Mockingbirdの後半がみっちりコンビネータ論理に充てられててオススメ
手計算させて解法と答えも章末に載ってて取っ付きやすい入門

そのままdefunしてアプリケーティブに動かしたり、簡約パーサも数個の基底コンビネータの書き換え規則をcondで振るだけの自明な10行
かなり遊べるおもちゃ
0690デフォルトの名無しさん
垢版 |
2024/04/16(火) 11:41:44.03ID:AOP5eUEV
>>689
ありがとう
ものまね鳥、積読になってる😅
0691デフォルトの名無しさん
垢版 |
2024/04/16(火) 12:46:54.23ID:9OjD0OW8
右の人、集合論を勉強すると見せかけてゲーデルエッシャーバッハを持って来ると期待してるw
0692デフォルトの名無しさん
垢版 |
2024/04/16(火) 13:18:37.46ID:AOP5eUEV
左「やっぱりあなたLispやってますよね?」
0694デフォルトの名無しさん
垢版 |
2024/04/16(火) 16:09:54.43ID:AOP5eUEV
>>693
す、するにゃ汗
0695デフォルトの名無しさん
垢版 |
2024/04/18(木) 15:57:15.08ID:L09lN/Y8
>>652
acl2.lispもたぶん参考にしてるかもだけど
On LispにもANSI CLにも載ってないのを集めた utx.lispってのもあるよ

念の為
0697デフォルトの名無しさん
垢版 |
2024/04/18(木) 16:12:02.72ID:L09lN/Y8
>>670
性能は知らんけど丁度>>696にニューラルネットのコードがあったよ、とコメントしておく
NEURAL NETWORKS.
PERCEPTR.CL Perceptron.
BACKPROP.CL Backpropagating Neural Net.

書かれたのが30年前で特に最適化してない短いお手本コードだけど、今時のAI向け言語とどの程度性能に差が出るだろう?ちょっと興味ある

他言語も得意で暇な人ベンチしてくれないかな()
0700デフォルトの名無しさん
垢版 |
2024/04/29(月) 00:40:58.99ID:kyEsQUSW
Lisp系の本あるある
Amazonで検索してレビューを見ると、kaizenのしょうもないレビューが付いている
0701デフォルトの名無しさん
垢版 |
2024/04/29(月) 03:32:03.71ID:xgq67JZI
(())なーんだ
0702デフォルトの名無しさん
垢版 |
2024/04/29(月) 20:53:10.33ID:gOSsFAyk
閲覧者にとってどうでもよすぎることしか書かないゴミレビュアーなんだよなkaizen
「読んでませんが」「一行もかけてませんが」「どういうものかわかりませんが」
けれど、「昔のAI業界知ってます」というね
片っ端から違反報告したろか
レスを投稿する


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