Common Lisp、SchemeをはじめとするLisp族全般のスレです
■前スレ
Lisp Scheme Part40
http://mevius.5ch.net/test/read.cgi/tech/1426481152/
■テンプレ
ttp://wiki.fdiary.net/lisp/
■関連スレ
【Lisp】プログラミング言語 Clojure #4【JVM】 [無断転載禁止]©2ch.net
http://mevius.5ch.net/test/read.cgi/tech/1483498849/
【GNU】スクリプト言語 Guile【scheme】
http://mevius.5ch.net/test/read.cgi/tech/1239985829/
【入門】Common Lisp その11【質問よろず】
http://peace.2ch.net/test/read.cgi/tech/1411307361/
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
http://peace.2ch.net/test/read.cgi/tech/1272469779/
【魔法】リリカル☆Lisp【言語】
http://peace.2ch.net/test/read.cgi/tech/1183396621/
Lisp@UNIX版
http://mevius.5ch.net/test/read.cgi/unix/1019926525/
探検
Lisp Scheme Part41
2018/07/15(日) 02:05:28.62ID:oGr67yTf
512デフォルトの名無しさん
2022/01/17(月) 10:32:49.23ID:jU2WrI4n 俺は Scheme が一番慣れた言語だから……
こういうのがニワトリタマゴってやつかね。
慣れるために使いたいのに慣れてないから使わないってのでは
何も進まんでないか。
こういうのがニワトリタマゴってやつかね。
慣れるために使いたいのに慣れてないから使わないってのでは
何も進まんでないか。
513デフォルトの名無しさん
2022/01/17(月) 22:29:08.40ID:BbgRNbfx scheme使いなら自作の処理系の1つや2つは持ってるよね
514デフォルトの名無しさん
2022/01/18(火) 01:32:42.02ID:Q53p7HFH いいえ。
515デフォルトの名無しさん
2022/01/18(火) 23:30:17.32ID:Npm0ST7N 黒板とノートという万能処理系なら
516デフォルトの名無しさん
2022/01/19(水) 12:17:51.13ID:YBAvI2MD なにか作ろうと思うと結局cffiでcライブラリを呼び出して使ってるので、糊みたいな使い方しかしてないなぁ
517デフォルトの名無しさん
2022/01/20(木) 02:19:42.06ID:3oKX7/s6 Ruby でも JavaScript でも Python でもだいたいそんなもんだろ。
518デフォルトの名無しさん
2022/01/20(木) 19:02:36.89ID:GKs3JF21 scheme修行読んだら処理系書けるかな?
ちょっと読んでちっともわからなくて挫折したけど
ちょっと読んでちっともわからなくて挫折したけど
519デフォルトの名無しさん
2022/01/20(木) 21:08:50.31ID:Ibae9TV2 処理系作りたいなら下手な本より既存の処理系のソース読みまくるのが近道
520デフォルトの名無しさん
2022/01/22(土) 21:58:31.48ID:E9iIueP5 俺の気持ちを代弁してくれてたポエム
https://gist.github.com/phoe/7d24bdb1f2be76a02fecba8cfecbef38
https://gist.github.com/phoe/7d24bdb1f2be76a02fecba8cfecbef38
522デフォルトの名無しさん
2022/01/24(月) 20:39:39.47ID:xI9wwXQn ちゃんとエンドユーザー様までデプロイするのはめんどいのは確か
グラフィックス叩いたりするライブラリに依存するのはやむ無しだけど、純lispなライブラリはライセンスの許す限りスニペットに切り出して同梱してる
グラフィックス叩いたりするライブラリに依存するのはやむ無しだけど、純lispなライブラリはライセンスの許す限りスニペットに切り出して同梱してる
523デフォルトの名無しさん
2022/01/24(月) 21:07:29.09ID:e/3681Ma 継続が凄いって話は、かれこれ10年くらい聞いてたんだけど、結局は限定継続で十分だよね、
限定継続もあんまり応用ないね、って感じに落ち着いたのかな?
限定継続もあんまり応用ないね、って感じに落ち着いたのかな?
524デフォルトの名無しさん
2022/01/25(火) 11:38:40.17ID:GfuWsBWm 継続が凄いってなんだよ
継続ベースのlisp実装をschemeと言うのだから、そういう意味では凄い応用例だよ
継続ベースのlisp実装をschemeと言うのだから、そういう意味では凄い応用例だよ
525デフォルトの名無しさん
2022/01/25(火) 12:33:26.79ID:Do1EUgQ3 非限定継続ってjmcのambとかが該当するのか?
動作としてはバックトラックするだけだから特に継続概念が必須というわけではないけど、なんか楽しい
動作としてはバックトラックするだけだから特に継続概念が必須というわけではないけど、なんか楽しい
526デフォルトの名無しさん
2022/01/28(金) 01:56:11.96ID:hT9TavA0 形式定義できるのが継続の便利なところなんだよ。
バックトラックするだけとはいうが「バックトラックってなに?」というのを突き詰めていったときに「継続をこんなふうに受け渡してるでよ」と言えるの。
バックトラックするだけとはいうが「バックトラックってなに?」というのを突き詰めていったときに「継続をこんなふうに受け渡してるでよ」と言えるの。
527デフォルトの名無しさん
2022/01/28(金) 23:35:03.31ID:i9eS2qVS でも実際はambはただの愚直な探索だから遅いんじゃないの?
528デフォルトの名無しさん
2022/01/28(金) 23:54:45.12ID:hT9TavA0 原理的にはバックトラックと同じ速さ。
それが遅いというのならバックトラックでも遅い。
バックトラックより速い方法があってチューニングの手間をかけていいならそうすりゃいい。
それが遅いというのならバックトラックでも遅い。
バックトラックより速い方法があってチューニングの手間をかけていいならそうすりゃいい。
529デフォルトの名無しさん
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を移植しました…
久々にscm書いてみたんだけどsrfi1とMITとr6rsでfold, fold-left, reduce fold-right, reduce-right(とそのpair-版)が初期値の畳まれる位置や引数の左右スワップとか違ってて混乱した
とっくに誰かやってると思ったけど今後の為に:initial-valueと:from-endを取るcl式reduceを移植しました…
530はちみつ餃子 ◆8X2XSCHEME
2022/02/09(水) 12:14:56.74ID:9Cj+df9g scm はキーワード型がないけどキーワード引数をどういう風に渡すの?
531デフォルトの名無しさん
2022/02/09(水) 12:36:09.65ID:3KsDo8lO restに'symb突っ込んで泥臭く拾ってます
srfiにちゃんとした機構あった気がするけど、小道具レベルで依存はしたくないので
srfiにちゃんとした機構あった気がするけど、小道具レベルで依存はしたくないので
532はちみつ餃子 ◆8X2XSCHEME
2022/02/09(水) 23:48:43.20ID:9Cj+df9g ところで scm を使うのはなにか理由があるの?
単なる好みならそれはそれでいいんだけど
このスレで言及される Scheme 処理系は Gauche, Racket, Chicken あたりが多いので
scm 使いは珍しいなーと思った。
単なる好みならそれはそれでいいんだけど
このスレで言及される Scheme 処理系は Gauche, Racket, Chicken あたりが多いので
scm 使いは珍しいなーと思った。
533デフォルトの名無しさん
2022/02/10(木) 00:36:07.94ID:d8JzH9qO guile使ってるけど#:で自己評価シンボルになるな
よく見かける:の方はデフォルトで有効じゃなくて、オプション切り替えだったり
よく見かける:の方はデフォルトで有効じゃなくて、オプション切り替えだったり
534はちみつ餃子 ◆8X2XSCHEME
2022/02/10(木) 11:27:44.77ID:zyc1CtL/ Guile のキーワードはシンボルとは別の型。
(symbol? #:foo) は #f を返す。
(symbol? #:foo) は #f を返す。
535デフォルトの名無しさん
2022/02/10(木) 20:51:58.38ID:/6XFwXXi CLの掟とか知らないから名前付き引数はマクロでシコシコやってた思い出
536デフォルトの名無しさん
2022/03/22(火) 22:52:38.10ID:VhTpyHaP537デフォルトの名無しさん
2022/03/22(火) 23:07:01.10ID:jC3GI8nJ Lispエイリアンww
538デフォルトの名無しさん
2022/03/23(水) 05:57:57.32ID:M5tI2TdZ ほんまや
539_
2022/04/03(日) 20:41:08.96ID:2/Br4qMY LLVMベースの Common Lisp Clasp が1.0 になったよー
https://github.com/clasp-developers/clasp/releases/tag/1.0.0
https://github.com/clasp-developers/clasp/releases/tag/1.0.0
540デフォルトの名無しさん
2022/04/04(月) 01:15:26.65ID:H1vYw7XQ キタ━━━━(゚∀゚)━━━━!!
541デフォルトの名無しさん
2022/04/04(月) 15:23:18.85ID:lL1T2q6e542でーちゃんじゃないけど
2022/06/25(土) 21:10:35.30ID:AGenfzJY github.com/Soldier-B/ns.js/blob/master/ns.js#L3
543デフォルトの名無しさん
2022/06/26(日) 13:26:40.20ID:DTfGvOZF さとばん
544デフォルトの名無しさん
2022/11/07(月) 12:52:23.10ID:D9DaYQB4 svigiはなんて読めばいいの
545デフォルトの名無しさん
2022/11/07(月) 12:52:44.37ID:D9DaYQB4 木曽路的な
546はちみつ餃子 ◆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
アイスランド語で括弧の意味だというのはあのキャラの作者が発表している公式な情報だから
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
547デフォルトの名無しさん
2022/11/07(月) 16:54:40.26ID:D9DaYQB4548デフォルトの名無しさん
2022/11/07(月) 20:41:51.67ID:kjCGP1Rc549デフォルトの名無しさん
2022/12/12(月) 12:44:02.44ID:asaSA4nl 「命の輝き君」がマンホールの蓋に 轢死体と見分けがつかなくなってしまう [725951203]
https://hayabusa9.5ch.net/test/read.cgi/news/1670487647/
https://hayabusa9.5ch.net/test/read.cgi/news/1670487647/
550デフォルトの名無しさん
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)
って理解でいいの?
[lisp1.0+]label, [cl]labels = letrec + let name
[cl]flet ((f (args) fletbody)) body = let ((f (lambda (args) body)) letbody)
って理解でいいの?
551はちみつ餃子 ◆8X2XSCHEME
2023/01/08(日) 17:21:31.97ID:/n9SAwLy おおよそ似た雰囲気では書けたりするのかもしれないけど
単純に対応してるわけじゃなかったりもするからいいかどうかは状況によるんじゃないの。
単純に対応してるわけじゃなかったりもするからいいかどうかは状況によるんじゃないの。
552デフォルトの名無しさん
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のこれバグ?
とりあえず(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のこれバグ?
553デフォルトの名無しさん
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
とりあえず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
554デフォルトの名無しさん
2023/01/09(月) 16:15:24.76ID:2yNmR2Eh | 彡⌒ミ
\ (´・ω・`)名前のシャドウ化辺りって自分で処理系実装した子はわかると思うけどハゲる要因だから絶対関わらない方がいいと思う
(| |)::::
(γ /:::::::
し \:::
\ (´・ω・`)名前のシャドウ化辺りって自分で処理系実装した子はわかると思うけどハゲる要因だから絶対関わらない方がいいと思う
(| |)::::
(γ /:::::::
し \:::
555デフォルトの名無しさん
2023/01/09(月) 16:36:52.10ID:0CyucYY1 eclは有名だけど、embeddableの名前通りの用途で1MBちょいな処理系だから、そういうものと割り切って使うべき
funcallが冗長ならletのbodyにfuncallをconsするだけのmy-fletを作ればいいじゃない
(さらなる災禍を招きそう)
funcallが冗長ならletのbodyにfuncallをconsするだけのmy-fletを作ればいいじゃない
(さらなる災禍を招きそう)
556デフォルトの名無しさん
2023/01/09(月) 16:57:44.09ID:0CyucYY1 eclのlocked packageなる概念やcompile-timeの意味論に関連しそうなissue
2 yeas agoだけど
https://gitlab.com/embeddable-common-lisp/ecl/-/issues/574
2 yeas agoだけど
https://gitlab.com/embeddable-common-lisp/ecl/-/issues/574
557デフォルトの名無しさん
2023/01/10(火) 02:33:32.35ID:/i8qCr3o >>553
特定の名前の解決を決め打つ言語は多いし、そういうポリシーもありだと思う
普通でないのはcondition(warning)を挙げないところ
決め打つ名前(locked package?)が分かってる限りは、flet/labelsのレキシカル束縛リストから拾った名前がbody内の呼び出しformのcarに存在するか、ランタイムコストの無い自明な静的解析でconditionを挙げられるはず
特定の名前の解決を決め打つ言語は多いし、そういうポリシーもありだと思う
普通でないのはcondition(warning)を挙げないところ
決め打つ名前(locked package?)が分かってる限りは、flet/labelsのレキシカル束縛リストから拾った名前がbody内の呼び出しformのcarに存在するか、ランタイムコストの無い自明な静的解析でconditionを挙げられるはず
558デフォルトの名無しさん
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でテストはしたけど、スマホから手打ちなので変だったらごめん
等価と思って良いよ
伝統的な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でテストはしたけど、スマホから手打ちなので変だったらごめん
559はちみつ餃子 ◆8X2XSCHEME
2023/01/10(火) 13:31:12.96ID:TxpPtfKm >>557
スクリプト言語 (処理系) 的な想定だと実行開始時にテキストの解釈から毎回やるので
静的解析もランタイムの一部みたいな感じになる。
この場合に限って言えばどちらにせよ名前のルックアップはやるのだからそのときにわかるだろうとは思うけど
静的解析を頑張らないという方針はあり得るんじゃないの。
スクリプト言語 (処理系) 的な想定だと実行開始時にテキストの解釈から毎回やるので
静的解析もランタイムの一部みたいな感じになる。
この場合に限って言えばどちらにせよ名前のルックアップはやるのだからそのときにわかるだろうとは思うけど
静的解析を頑張らないという方針はあり得るんじゃないの。
560はちみつ餃子 ◆8X2XSCHEME
2023/01/11(水) 00:38:29.47ID:s0T2WgwN Gauche で検出されないエラーで (let ((0 1)) 0) みたいなのがあって、
実際にはオプティマイザが消去してしまうんだそうな。
文法の解析で通したものをオプティマイザがエラーとして弾くのも変な話だし、
オプティマイザが走査することがわかっているものを前段階でもチェックするのは二度手間だし、
オプティマイザを密結合してしまうのも保守しづらいし……
という葛藤があるのはわかる。
まあそれぞれに事情があるので原理的に可能だからといってそうすべきだとも言えない気がする。
実際にはオプティマイザが消去してしまうんだそうな。
文法の解析で通したものをオプティマイザがエラーとして弾くのも変な話だし、
オプティマイザが走査することがわかっているものを前段階でもチェックするのは二度手間だし、
オプティマイザを密結合してしまうのも保守しづらいし……
という葛藤があるのはわかる。
まあそれぞれに事情があるので原理的に可能だからといってそうすべきだとも言えない気がする。
561デフォルトの名無しさん
2023/01/11(水) 00:49:38.31ID:LBEzL6fs 0はシンボルじゃないから、文法解析を通しちゃ駄目だろw
562デフォルトの名無しさん
2023/01/11(水) 01:29:07.80ID:/IOcm4EW そういう手では絶対書かないだろう変なコードも、マクロ書いてるとまれによく発生するから困る
563デフォルトの名無しさん
2023/01/11(水) 01:59:04.27ID:/IOcm4EW カウンタ変数を捕捉更新しようとして、うっかり評価してしまったケースとか
564デフォルトの名無しさん
2023/01/11(水) 02:21:26.04ID:z40MB/0w 多分(let ((i (+ i 1))) i)が化けたのかな
565デフォルトの名無しさん
2023/01/11(水) 02:34:55.34ID:LWIYKuEk letの時点でオプティマイザに通してんのかな
let系はlambdaまで落として((lambda(i) i) (+ i 1))とすれば間違えようがないと思うのだが
let系はlambdaまで落として((lambda(i) i) (+ i 1))とすれば間違えようがないと思うのだが
566デフォルトの名無しさん
2023/01/11(水) 02:44:32.93ID:/IOcm4EW エスパー大会か?
(let ((i (+ i 1)))
(another-macro i))
another-macroは副作用目的で自明にiに展開したか、乗法的な関数を呼んだ(iの初期値0*n=0)
(let ((i (+ i 1)))
(another-macro i))
another-macroは副作用目的で自明にiに展開したか、乗法的な関数を呼んだ(iの初期値0*n=0)
567デフォルトの名無しさん
2023/01/11(水) 03:33:43.09ID:4gRHy1NM >>565
gancheは知らんけど、さすがにletはプリミティブな事が多いかと
むしろ最適化で読み飛ばすならlambdaまで還元してしまってはダメで、LETをヒューリスティックに認識する必要がある
仮に評価順を示す為にバッククォートでわざとらしく書くと
`(let ((,index ,(1+ stride))) ,(* index stride))
; (LET ((0 1)) 0)
(に等価な)展開とかがありがちかな
特に例に意味は無かったってオチだったりして
gancheは知らんけど、さすがにletはプリミティブな事が多いかと
むしろ最適化で読み飛ばすならlambdaまで還元してしまってはダメで、LETをヒューリスティックに認識する必要がある
仮に評価順を示す為にバッククォートでわざとらしく書くと
`(let ((,index ,(1+ stride))) ,(* index stride))
; (LET ((0 1)) 0)
(に等価な)展開とかがありがちかな
特に例に意味は無かったってオチだったりして
568デフォルトの名無しさん
2023/01/11(水) 03:56:23.35ID:/IOcm4EW defmacro/macroexpand方式だと特にだけど、(let ((0 1)) 0)みたいな残骸から推論する技能はとても大事に思う
書く時もそうだけど、人が書いたモノの後始末なら前提知識が無いのでなおさら
これだけ想像を膨らませてくれる貴重な(let ((0 1)) 0)すら消し飛ばされるならもうお手上げ
なんて文句を言いつつ、schemeでもついslibのdefmacroに手が伸びてしまうのだが
書く時もそうだけど、人が書いたモノの後始末なら前提知識が無いのでなおさら
これだけ想像を膨らませてくれる貴重な(let ((0 1)) 0)すら消し飛ばされるならもうお手上げ
なんて文句を言いつつ、schemeでもついslibのdefmacroに手が伸びてしまうのだが
569デフォルトの名無しさん
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))だけを見て決められない
論理的にどんな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))だけを見て決められない
570デフォルトの名無しさん
2023/01/11(水) 06:21:34.50ID:/IOcm4EW 一応値については正しいというだけで、もしbodyに(exit)や大域脱出が入ってても無視するのか?という問題はある
ill-formedな>>560すら無視するのだから、当然well-formedな(exit)も無視するのが自然だけど、実際のところはgaucheに訊いてください
ill-formedな>>560すら無視するのだから、当然well-formedな(exit)も無視するのが自然だけど、実際のところはgaucheに訊いてください
571はちみつ餃子 ◆8X2XSCHEME
2023/01/11(水) 17:03:18.22ID:s0T2WgwN572デフォルトの名無しさん
2023/01/11(水) 17:40:33.93ID:/IOcm4EW >>571
どうも、俺のも原理的には…という同じ意図の話だよ
eclやgaucheが有名実装では最もアグレッシブな感じなのかな?
(declaim (optimize (speed 0) debug safety)
が外せない俺には怖くて触れないよ
どうも、俺のも原理的には…という同じ意図の話だよ
eclやgaucheが有名実装では最もアグレッシブな感じなのかな?
(declaim (optimize (speed 0) debug safety)
が外せない俺には怖くて触れないよ
573デフォルトの名無しさん
2023/01/11(水) 18:02:49.87ID:/IOcm4EW なおeclのlocked package?の件、標準の宣言を全て付けても有効な模様…
574デフォルトの名無しさん
2023/01/11(水) 18:12:33.46ID:qLQaVlgq notinlineも効かないし独自機構だな
575はちみつ餃子 ◆8X2XSCHEME
2023/01/14(土) 01:01:49.57ID:9ctkhBjT >>572
> 有名実装では最もアグレッシブ
そんなことはないんじゃないかな。。
実行前の処理に時間をかけない (かけても総合的な性能向上にならない) という
判断でエラーチェックに消極的だけど最適化にも消極的だから。
> 有名実装では最もアグレッシブ
そんなことはないんじゃないかな。。
実行前の処理に時間をかけない (かけても総合的な性能向上にならない) という
判断でエラーチェックに消極的だけど最適化にも消極的だから。
576本田
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.
https://people.eecs.berkeley.edu/~bh/61a-pages/Scheme/
UCB Scheme is a modified version of STk 4.0.1 by Erick Gallesio.
577デフォルトの名無しさん
2023/01/26(木) 19:06:40.12ID:lq03KzKz USB Schemeじゃないのか
どっちかって言えばUSB Schemeが欲しいのだが
どっちかって言えばUSB Schemeが欲しいのだが
578デフォルトの名無しさん
2023/01/28(土) 14:07:46.81ID:BDgiT21v579本田
2023/01/29(日) 22:24:48.67ID:XMFhzyDs580はちみつ餃子 ◆8X2XSCHEME
2023/01/30(月) 00:59:07.34ID:kRDQpz8S そのリンクがどうしたっていうんだ?
何か思うところがあるなら話題に挙げるのはかまわんが
ただリンクを置いて去るのはやめて欲しいな。
ニュース系のネタならお知らせの意味で貼ったのかなと思うところだが、
そういう感じでもないみたいだしな。
何か思うところがあるなら話題に挙げるのはかまわんが
ただリンクを置いて去るのはやめて欲しいな。
ニュース系のネタならお知らせの意味で貼ったのかなと思うところだが、
そういう感じでもないみたいだしな。
581デフォルトの名無しさん
2023/01/30(月) 19:13:37.70ID:prACFehy そもそもダイナミックスコープの何がだめですか
Emacs lispはダイナミックスコープですが、
あちこちから呼ばれてる関数を、空関数で上書きして殺すとかできて便利です
Emacs lispの感覚でGIMPのスクリプト(scheme)を書こうとすると
なにか何でもかんでもラッパー渡し(いちいちcarをひとつ辿る)って感じです
ちなみにLispは普通の手続き型言語としてしか使ったことないです
そんな奴への説教とかあったら聞きたいです
マクロとか、「確かにif文を関数として実装するのは無理かもしれないし、
そういう時に使うのかな」くらいにしか解ってないです
Emacs lispはダイナミックスコープですが、
あちこちから呼ばれてる関数を、空関数で上書きして殺すとかできて便利です
Emacs lispの感覚でGIMPのスクリプト(scheme)を書こうとすると
なにか何でもかんでもラッパー渡し(いちいちcarをひとつ辿る)って感じです
ちなみにLispは普通の手続き型言語としてしか使ったことないです
そんな奴への説教とかあったら聞きたいです
マクロとか、「確かにif文を関数として実装するのは無理かもしれないし、
そういう時に使うのかな」くらいにしか解ってないです
582デフォルトの名無しさん
2023/01/30(月) 19:45:34.45ID:w7gs7hNq >>581
全然ダメじゃないよ。でも誰か(昨日のオレ)が余計なことをやって不審な挙動をしてるけど原因がさっぱり分からないというのは起こりやすいかもしれない。
全然ダメじゃないよ。でも誰か(昨日のオレ)が余計なことをやって不審な挙動をしてるけど原因がさっぱり分からないというのは起こりやすいかもしれない。
583デフォルトの名無しさん
2023/01/31(火) 01:40:41.84ID:t9l1A9G+ Lispではたまたまうまく動いてるように見えるけど変数宣言の無い言語でダイナミックスコープやると死ぬ
584はちみつ餃子 ◆8X2XSCHEME
2023/01/31(火) 10:19:46.67ID:XA5Y5Qfu >>581
元のプログラムを書き換えずに影響を差し込むことが出来るってのはアプリケーション拡張用として便利だけれど
元のプログラムが想定してない滅茶苦茶なことも出来ちゃうということと最適化が困難になるのが深刻な問題だと思う。
ユーザーが変な使い方をして変なことを起こす分には自業自得といえるにしても
今ではパッケージをネット上からダウンロードしてインストールまで自動だから
悪意あるコードが他のパッケージを好きなように変更できるようだと影響範囲が大きい。
たとえばウェブブラウザのアドオンなんかだど各アドオンは通信によって協調は出来るが
環境は共有しないようにすることで影響力を制限している。
参照しているものがことごとくいつでも変更される可能性があると
インライン化や畳み込みといったごく基本的な (しかし効果が高い) 最適化すらできない。
現代的な言語処理系に対して数十倍単位で遅いのはさすがに困る。
ものごとの良し悪しにはトレードオフがある。
どちらの問題もコードが小規模ならどうということはないので利点のほうが上回っていたのかもしれないが、
時代を経て巨大になりすぎた。 疎結合を意識した構成にしないと手に負えない。
元のプログラムを書き換えずに影響を差し込むことが出来るってのはアプリケーション拡張用として便利だけれど
元のプログラムが想定してない滅茶苦茶なことも出来ちゃうということと最適化が困難になるのが深刻な問題だと思う。
ユーザーが変な使い方をして変なことを起こす分には自業自得といえるにしても
今ではパッケージをネット上からダウンロードしてインストールまで自動だから
悪意あるコードが他のパッケージを好きなように変更できるようだと影響範囲が大きい。
たとえばウェブブラウザのアドオンなんかだど各アドオンは通信によって協調は出来るが
環境は共有しないようにすることで影響力を制限している。
参照しているものがことごとくいつでも変更される可能性があると
インライン化や畳み込みといったごく基本的な (しかし効果が高い) 最適化すらできない。
現代的な言語処理系に対して数十倍単位で遅いのはさすがに困る。
ものごとの良し悪しにはトレードオフがある。
どちらの問題もコードが小規模ならどうということはないので利点のほうが上回っていたのかもしれないが、
時代を経て巨大になりすぎた。 疎結合を意識した構成にしないと手に負えない。
585デフォルトの名無しさん
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…)が外、つまり同じレベルのフォームに影響する場合があるのが気持ち悪いから、明示的な後者を好む
定義をテキストとして全てダンプして、読み戻せる利点がある
cl/scheme(fluid-letとかそんな名前の拡張)のように基本レキシカルで、ローカル&ダイナミックは宣言が必要なら意図せず使う事は稀なはず
(form-in-scope? (declare (special x)) form-in-scope)
(locally (declare (special x)) (form-in-scope))
面倒だけど(declare…)が外、つまり同じレベルのフォームに影響する場合があるのが気持ち悪いから、明示的な後者を好む
586デフォルトの名無しさん
2023/01/31(火) 10:56:14.75ID:tSjB9eWW レキシカルな情報を取り込んでしまう(暗黙にクロージャを作る)クロージャにはテキスト表現が無いから、ダンプが出来ないのは致命的な欠点
よってダイナミックスコープ一択になる
pwshだと gci function:
bashだとdeclare -f (多分、よく知らん)
でダンプ、出力されるテキストを読み直せば(大体)環境が復元できる
pwsh方式だと{code}.GetNewClosure()でクロージャは明示的に得る
よってダイナミックスコープ一択になる
pwshだと gci function:
bashだとdeclare -f (多分、よく知らん)
でダンプ、出力されるテキストを読み直せば(大体)環境が復元できる
pwsh方式だと{code}.GetNewClosure()でクロージャは明示的に得る
587デフォルトの名無しさん
2023/01/31(火) 11:08:10.67ID:tSjB9eWW588はちみつ餃子 ◆8X2XSCHEME
2023/01/31(火) 11:28:43.20ID:XA5Y5Qfu >>587
GIMP の Scheme (Script-fu) は TinyScheme が使われている。 (昔は SIOD だった。)
まあ fluid-let くらいなら自分で書いてもたいした手間じゃないけどね。
GIMP の Scheme (Script-fu) は TinyScheme が使われている。 (昔は SIOD だった。)
まあ fluid-let くらいなら自分で書いてもたいした手間じゃないけどね。
589デフォルトの名無しさん
2023/01/31(火) 11:31:05.15ID:cAwVb56Q #<closure ...>が嫌ならいにしえのfunargを使えばok
別にレキシカル環境をリストで持ったって構わないわけで、印字表現が不透明なlispはインクリメンタルコンパイルやリストより効率の良いデータ構造を選んだ結果
厳密にはダイナミックスコープでないけれど、コード注入なら'ラムダ式を渡して廻っても同等の自由が得られる(call by name)
既存のコードの方でも準備が必要だけど
別にレキシカル環境をリストで持ったって構わないわけで、印字表現が不透明なlispはインクリメンタルコンパイルやリストより効率の良いデータ構造を選んだ結果
厳密にはダイナミックスコープでないけれど、コード注入なら'ラムダ式を渡して廻っても同等の自由が得られる(call by name)
既存のコードの方でも準備が必要だけど
590デフォルトの名無しさん
2023/01/31(火) 11:33:22.79ID:tSjB9eWW >>588
ええ…gnu公式の拡張言語とは一体なんだったのか
ええ…gnu公式の拡張言語とは一体なんだったのか
591はちみつ餃子 ◆8X2XSCHEME
2023/01/31(火) 12:23:06.03ID:XA5Y5Qfu >>590
アプリケーションに特有の機能はアプリケーション側で用意されたものを呼出して使うわけだし
言語側のライブラリはほどほどで足りるんで小さい処理系のほうが面倒がないというのはあるかも。
Guile はビルドするだけで面倒くさいが TinyScheme はファイル数個の簡単構成だし。
アプリケーションに特有の機能はアプリケーション側で用意されたものを呼出して使うわけだし
言語側のライブラリはほどほどで足りるんで小さい処理系のほうが面倒がないというのはあるかも。
Guile はビルドするだけで面倒くさいが TinyScheme はファイル数個の簡単構成だし。
592デフォルトの名無しさん
2023/01/31(火) 12:38:01.83ID:mFP57axK ローカルにダイナミックな束縛をやるなら、それ専用のprogvフォーム(clにある)はどう思われてるんだろ?
(progv 変数リスト
値リスト
body)
let系列の (変数 値)リスト慣習を転置(zip)した記法だけど、束縛が多くても縦にスペースを取らない
let慣習では変数 値はsetq/set!だけど、progvの変数リストは評価されるから、リード時にバッククオートでシンボルを埋め込むようなハックが不要
動的束縛を活用するようなメタな場面では特にだけど、埋め込む為だけにわざわざリーダを何度も通すのが歯痒い
多分に個人的な好みだと思うけど
(progv 変数リスト
値リスト
body)
let系列の (変数 値)リスト慣習を転置(zip)した記法だけど、束縛が多くても縦にスペースを取らない
let慣習では変数 値はsetq/set!だけど、progvの変数リストは評価されるから、リード時にバッククオートでシンボルを埋め込むようなハックが不要
動的束縛を活用するようなメタな場面では特にだけど、埋め込む為だけにわざわざリーダを何度も通すのが歯痒い
多分に個人的な好みだと思うけど
593デフォルトの名無しさん
2023/01/31(火) 13:07:01.68ID:tSjB9eWW >>592
転置されてるのと束縛リストの実行時評価は、おそらくlet風のマクロを書く時に便利だからかな
mapcar #'list let-like-binding-list
がprogvに渡せて、あと欠損値も勝手にnilで埋まる
あと機械的に名前を処理するならgensymもお忘れなく
転置されてるのと束縛リストの実行時評価は、おそらくlet風のマクロを書く時に便利だからかな
mapcar #'list let-like-binding-list
がprogvに渡せて、あと欠損値も勝手にnilで埋まる
あと機械的に名前を処理するならgensymもお忘れなく
594デフォルトの名無しさん
2023/01/31(火) 13:18:26.31ID:tSjB9eWW 例が悪かった
単にlistをmapcarするだけでは、let形式のリストをそのまま渡した方が早い
不定数の引数を取ってリストを返す関数で、自明なlist以外をmapcarするならかなり楽が出来るはず
しかし何に便利か今すぐ具体的な例は思い付かない()
単にlistをmapcarするだけでは、let形式のリストをそのまま渡した方が早い
不定数の引数を取ってリストを返す関数で、自明なlist以外をmapcarするならかなり楽が出来るはず
しかし何に便利か今すぐ具体的な例は思い付かない()
595デフォルトの名無しさん
2023/01/31(火) 14:00:30.21ID:tSjB9eWW596デフォルトの名無しさん
2023/01/31(火) 14:46:13.56ID:CmTey6Bh GNUは昔から他人の成果物の丸パクリしか脳が無い団体だよ
597デフォルトの名無しさん
2023/01/31(火) 15:18:25.22ID:AYYg8Thv emacsの膨大なテキスト処理関数群に依存していない純ロジックのみのelispコードなら資産になる
そんなの指折り数える量だろう
そんなの指折り数える量だろう
598デフォルトの名無しさん
2023/01/31(火) 15:38:47.41ID:sZCc+g+m ライセンス問題でどうしてもコードを触りたくないなら別だけど
何らかのlisp書きであれば、コピペしてその方言に適合するよう手直しする程度は自明な作業でしょう
何らかのlisp書きであれば、コピペしてその方言に適合するよう手直しする程度は自明な作業でしょう
599はちみつ餃子 ◆8X2XSCHEME
2023/02/01(水) 01:45:17.62ID:ySbq2UIa >>598
ダイナミックスコープとレキシカルスコープでは埋めがたい差があるし、モジュールやフェイズの方針なども大きな差だ。
伝統的に方言と称してはいるが個々に定義された別の言語なのでそんなに簡単に修正は出来ないよ。
私自身はそこそこ Scheme には習熟している自信があるが Common Lisp も Clojure も全然わからん。
C と JavaScript の外観はなんとなく似せてあるが静的型と動的型の違いという根本的な部分で違うからそう簡単に移植はできないのと同じような感じ。
ダイナミックスコープとレキシカルスコープでは埋めがたい差があるし、モジュールやフェイズの方針なども大きな差だ。
伝統的に方言と称してはいるが個々に定義された別の言語なのでそんなに簡単に修正は出来ないよ。
私自身はそこそこ Scheme には習熟している自信があるが Common Lisp も Clojure も全然わからん。
C と JavaScript の外観はなんとなく似せてあるが静的型と動的型の違いという根本的な部分で違うからそう簡単に移植はできないのと同じような感じ。
600デフォルトの名無しさん
2023/02/01(水) 06:05:03.14ID:BjxytPYm いっそ Emacs そのまま組み込んじゃうとかそんな方向に進まないかな…
近頃の環境ならそんなに重くないはずだし。
近頃の環境ならそんなに重くないはずだし。
601デフォルトの名無しさん
2023/02/01(水) 14:47:30.69ID:MmorO90J >>600
やってできなくはないのかもしれないよ
昔、zlibがまだなかった時代にDOSでzオプションの利くtarを使いたくて、
仕方なくtarとgzipをまとめて一つのバイナリにリンクしてしまって、
スタートアップでヒープを半分に割って、スタックをそれぞれに割り振って、
あとはバッファが一杯になるたびにtar側とgzip側をsetjmpとlongjmpで行ったり来たり、
解凍は問題ないんだけど圧縮がどうしても同じ結果にならなくて、発表せず一人で使ってた
やってできなくはないのかもしれないよ
昔、zlibがまだなかった時代にDOSでzオプションの利くtarを使いたくて、
仕方なくtarとgzipをまとめて一つのバイナリにリンクしてしまって、
スタートアップでヒープを半分に割って、スタックをそれぞれに割り振って、
あとはバッファが一杯になるたびにtar側とgzip側をsetjmpとlongjmpで行ったり来たり、
解凍は問題ないんだけど圧縮がどうしても同じ結果にならなくて、発表せず一人で使ってた
602デフォルトの名無しさん
2023/02/11(土) 19:10:46.38ID:iYjc3QSL オレオレSchemeでMineSweeper
ソースがSchemeで書かれている
ttp://ujip.ninja-web.net/schemeonjs/minesweeper.html
ソースがSchemeで書かれている
ttp://ujip.ninja-web.net/schemeonjs/minesweeper.html
603デフォルトの名無しさん
2023/02/11(土) 20:04:34.26ID:6efBUOB/ だからなんやねん
つか何年前から来たの?ってレベルの話だろ
つか何年前から来たの?ってレベルの話だろ
604デフォルトの名無しさん
2023/02/15(水) 12:56:30.42ID:Iq74I464 目くじら立てることかよ
605デフォルトの名無しさん
2023/03/05(日) 13:42:32.16ID:nmaj3sub オンラインでuLisp動かしてみようかとTinkerCADのArduonoUnoにソースコード流し込んでみたけどさすがに5000行は許してもらえないみたいだな。
606デフォルトの名無しさん
2023/04/24(月) 08:39:19.08ID:AD1D3xO/ 最適化されたCLは最適化されていないCよりは速い
昔Common LispでCより速いHTTPパーサを書いたとか言ってたのを見かけた
コードを見るとnodejsのCで書かれたHTTPパーサをパクったみたいな感じなのに
比較対象はなぜかどっかの個人がCで書いたHTTPパーサだった
その個人が晒してたソースのMakefileはデフォルトでは最適化なし
なぜ比較する前にCの方を最適化することを思いつかなかったのだろうか
というかなんでnodjsの方と比較しなかったんだ?
誰か理由わかります?
昔Common LispでCより速いHTTPパーサを書いたとか言ってたのを見かけた
コードを見るとnodejsのCで書かれたHTTPパーサをパクったみたいな感じなのに
比較対象はなぜかどっかの個人がCで書いたHTTPパーサだった
その個人が晒してたソースのMakefileはデフォルトでは最適化なし
なぜ比較する前にCの方を最適化することを思いつかなかったのだろうか
というかなんでnodjsの方と比較しなかったんだ?
誰か理由わかります?
607デフォルトの名無しさん
2023/04/24(月) 08:46:06.25ID:Z0B9bFh/ なぞなぞかな
608デフォルトの名無しさん
2023/04/25(火) 20:39:53.26ID:wy/j7fQc おじいちゃんそろそろマクロを飲む時間ですよ
609デフォルトの名無しさん
2023/05/24(水) 21:31:48.49ID:w5+jyJkb 氏のイキリ芸でしょ
610デフォルトの名無しさん
2023/06/20(火) 13:38:32.61ID:Dvlv0UV+ scheme処理系作ったりSICPで悟り開いたりしたけど今の使い方は実質電卓
スペース区切りの値そのまま貼り付けられて便利なんよなー
スペース区切りの値そのまま貼り付けられて便利なんよなー
611デフォルトの名無しさん
2023/08/18(金) 02:03:46.68ID:dtVdNVwB John Cowan 氏が R7RS-large の議長の座を降りることを表明した模様。
これからの体制については現時点は決まっていない。
これからの体制については現時点は決まっていない。
レスを投稿する
ニュース
- 中国「国連安保理の許可なしに日本攻撃可能」 Xで旧敵国条項に言及… ★9 [BFU★]
- 【赤坂ライブハウス刺傷】逃走していた自衛官の男(43)を殺人未遂の疑いで逮捕 警視庁 被害女性とは知人関係 [Ailuropoda melanoleuca★]
- 【千葉】コンビニに尿入りペットボトル並べた疑い、26歳男「むしゃくしゃして」…購入した客が飲もうとしたところ臭いに違和感 [ぐれ★]
- 中国官製報道「日本経済はもう持たない」にネット民ツッコミ「ニュースだけ見てたら日本はもう百回くらい爆発してる」 [1ゲットロボ★]
- 【STARTO ENTERTAINMENT】timelesz、メンバーの不適切言動を謝罪「不用意かつモラルに反した発言であった」 全員の署名入りでコメント [Ailuropoda melanoleuca★]
- 植田日銀総裁 「円安進行が物価高を起こしている」 ★4 [お断り★]
- 【ガチ正論】一般人「中国に規制制裁されて、『中国ムカつく』じゃなくて矛先が『許さんぞ高市』になってる奴、頭おかしいの?」 ★2 [153490809]
- やばいずっとスマホいじってても寂しいわ話そうよ
- お前らチンポ出せよ!!
- 【ぺこ専🐰】なんG 兎田ぺこら突発配信実況スレ🏡【ホロライブ▶】
- NHKニュースウオッチ9「日本側は対話にオープンな姿勢で安定した日中関係を築きたい考えなのに中国が意固地で糸口が見いだせない」 [904151406]
- 日中戦争起きたら5日で自衛隊壊滅するらしい。じゃあ徴兵も無いし、俺等が必死になって反対してやる理由なくね? [237216734]
