[過去ログ] Lisp Scheme Part40 [転載禁止]©2ch.net (1002レス)
上下前次1-新
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
1(2): 2015/03/16(月)13:45 ID:EEYZoZ1i(1) AAS
Common Lisp、SchemeをはじめとするLisp族全般のスレです
■前スレ
Lisp Scheme Part39
2chスレ:tech
■テンプレ
外部リンク:wiki.fdiary.net
■関連スレ
【入門】Common Lisp その11【質問よろず】
2chスレ:tech
【Scheme】Schemeインタプリタ Mosh Part1【Lisp】
省5
876: はちみつ餃子 ◆8X2XSCHEME 2018/03/25(日)01:16 ID:vqcfoPV6(1) AAS
再帰とは関係なく全ての計算に関わってるよ。
877(2): 2018/03/25(日)23:02 ID:wjjQa2Mo(1) AAS
再帰の際に、例えば階乗計算で終端条件から戻ってきて
1*2*3*.......*(n-2)*(n-1)*nと掛けられるものも継続ですか?
878(1): 2018/03/26(月)04:28 ID:M0YORv20(1) AAS
>>877
再帰はなくても
関数からのreturn実行が
継続の適用そのものです
879: 2018/03/26(月)14:01 ID:YDvloqxD(1) AAS
>>878
ああ、その説明は見事ですね
880(1): はちみつ餃子 ◆8X2XSCHEME 2018/03/26(月)14:19 ID:S9VCdiyC(1/2) AAS
C ではアドレスが継続だと思えばだいたい合ってる。
環境が保存されないから Scheme より限定的だけども。
C だと実引数と一緒にリターンアドレスもプッシュするじゃん?
それと同じように Scheme でも戻ってくる継続を暗黙に渡してるんだよ。
Scheme の call/cc は gcc 拡張の __builtin_return_address みたいなもん。
881: 2018/03/26(月)16:22 ID:4JGFggle(1/2) AAS
俺Cわかんないんだよね^^;
882: はちみつ餃子 ◆8X2XSCHEME 2018/03/26(月)16:54 ID:S9VCdiyC(2/2) AAS
そっか〜
883: 2018/03/26(月)20:38 ID:4JGFggle(2/2) AAS
>>877はあってますか?
終端から戻ってきた値が、入れ子の外側、つまり継続に渡されて
さらに外側の継続に渡されて
継続がなくなったら値がプリントされる
というイメージなんだけど
884(2): 2018/03/26(月)22:41 ID:5QVYm+SC(1) AAS
Cで継続を保存しようとしたら、setjmpで保存してるもの(全レジスタの状態)とスタックの内容のコピーだろ(場合によってはかなりのサイズになるが)
885(1): ◆QZaw55cn4c 2018/03/26(月)23:22 ID:dvRuSlEv(1) AAS
>>884
setjmp/longjmp は、スタックポインタは保存してもスタックの内容のコピーはしない、だからネストの浅いところから深いところにジャンプできない
886: 2018/03/27(火)09:40 ID:82AcOlMQ(1) AAS
>>885
ん?だからsetjmpの内容とスタックの内容をコピーすると思いっきり書いたつもりだったが…
887: 2018/03/27(火)21:44 ID:vSyzL0sA(1/2) AAS
C++ coroutinesだとスタック全コピーも実装の有力な候補だな
888: 2018/03/27(火)22:03 ID:vSyzL0sA(2/2) AAS
というか、おととし最後に聞いたときには>>884の言う通りでほぼ決まりみたいな話だった
C/C++では何と、スタックの中を書き換えることができるのだ!
889: 2018/03/28(水)07:06 ID:lXnJ1NTY(1) AAS
Smalltalkならスタックフレームもオブジェクト
890(1): 2018/03/28(水)23:58 ID:qqTeUvjF(1) AAS
Smalltalkって業務で使ってるとこあるのかな
LISP系よりはありそうなんだが
891: 2018/03/29(木)06:38 ID:xL1sPJzZ(1) AAS
ヨーロッパや南米での事例が多いとか
外部リンク:medium.com今時-2017-のsmalltalkの始めかた-93c044820e1b
日本にも地味に仕事あるらしいけど守秘義務で見えにくい
スーパーの古いレジ(POSシステム)で使われているのを見かけたのはNEC系のこれか?
外部リンク:tech.nikkeibp.co.jp
省2
892: 2018/03/29(木)21:46 ID:aMjJrqbe(1) AAS
>>890
> Smalltalkって業務で使ってるとこあるのかな
> LISP系よりはありそうなんだが
少なくともアメリカでは実アプリをSmalltalkで作ってるケースはほとんどないんじゃないと思うが
プロトタイプをSmalltalkでちゃっちゃと作ってしまい動作確認をするってのはアメリカでも昔からさほど珍しくないそうだが
ちなみにCommon Lispはアメリカでは以前から実用アプリの記述言語としてそれなりの頻度で使われてるよ
893(1): 2018/03/30(金)01:39 ID:uMQPOtnG(1) AAS
>>880
スタックも含まないと継続にはならない
894(1): はちみつ餃子 ◆8X2XSCHEME 2018/03/30(金)04:37 ID:AQ2aJRgB(1/2) AAS
>>893
Scheme 用語で言う「環境」のことな。
それを含まないから限定的と説明しているわけ。
895: 2018/03/30(金)07:19 ID:wy67wuPJ(1) AAS
>>894
Cではと限定してんだから、普通にsetjmpと言ってほしいんだが…
IP(インストラクションポインタ)だけを指して限定的な継続言われても逆に分かりにくいと思うが
896: 2018/03/30(金)07:29 ID:YaBZvbti(1) AAS
環境をあえて使わない継続の応用はあっても
環境を含むことができない機構を(「限定的」と断ったとしても)継続だと言い張るのはオカシイよ
897: 2018/03/30(金)13:49 ID:a6Uq4iez(1) AAS
別に「限定継続/delimited continuation」ってものもあるしな
話がややこしくなるだけで理解の助けにならない
898: はちみつ餃子 ◆8X2XSCHEME 2018/03/30(金)16:49 ID:AQ2aJRgB(2/2) AAS
Racket で escape continuation って言ってるやつと近いかな。
899: 2018/04/08(日)19:00 ID:bJUCDaUD(1) AAS
schemeをjsに変換してreactやるとかelectronでGUIアプリ作るとかいう話ない?
900: 2018/04/08(日)19:55 ID:e7Arryer(1) AAS
scheme->jsの変換は簡単そうだね
継続使ってなければ
901(2): 2018/04/11(水)08:57 ID:smzFdsBm(1) AAS
そもそもJSにトランスパイルできる
まともなscheme処理系が無いだろう
902: 2018/04/12(木)03:16 ID:dUBwD102(1) AAS
loopがマジでわからん。
どうしたらいい?
903: 2018/04/12(木)05:13 ID:QxuUPFoE(1) AAS
loop マクロを自作してみる
904: 2018/04/12(木)07:42 ID:w4rNP/ma(1) AAS
実践Common Lispで覚えた
formatも同じく
905: 2018/04/13(金)01:48 ID:UkwKelSp(1) AAS
ocamlでさえjavascriptにコンパイル出来るというのにschemeも頑張ろうや
906: 2018/04/14(土)10:00 ID:BMT8UCYv(1/2) AAS
Scheme -> Clojure -> javascript の順番に変換するなら、
Clojure -> javascript はすでに自動変換だし、
Scheme -> Clojure も define -> def 等、機械的な置き換えである程度出来るから、
単純なプログラムを変換することは出来るけど、それほど需要がないから無いんじゃないの。
907: 2018/04/14(土)14:14 ID:Q/hh4lYx(1) AAS
つうかemscriptenで幾つかの実装が動いてるよね
ただそれだけで
908(2): 2018/04/14(土)17:47 ID:BMT8UCYv(2/2) AAS
emscripten で C言語 -> javascript に変換が可能だから、Chicken で Scheme -> C言語 に変換すれば、
Scheme -> C言語 -> javascript が実行できるハズか。うまく通らないコードもあるだろうけど。
909(1): 2018/04/16(月)14:28 ID:rldqSGZ/(1) AAS
>>908
そんなチキンなやり方が許されるとでも?
910: 2018/04/16(月)15:10 ID:cjXJGsOK(1) AAS
>>908 >Chicken
>>909 >チキン
日本語でおk
911: 2018/04/16(月)17:37 ID:Ao+0rxLU(1) AAS
なんだそのツッコミは
912: 2018/04/22(日)18:59 ID:kgMcoKG3(1) AAS
なるほどもっとキチンとやれと
913(1): 2018/04/22(日)23:13 ID:vfnhSJ7e(1) AAS
ところで「ブラウザでCLを動的にJSにトランスパイル可能なライブラリ」って聞いたら何が思い浮かびます?
914(1): 2018/04/23(月)13:04 ID:h3LGX4rw(1) AAS
>>913 (loop) >>901
915: 2018/04/23(月)16:29 ID:4n233aPE(1) AAS
>>914
ワロタww
916: 2018/05/02(水)09:24 ID:Ofc9Qt+3(1/2) AAS
質問です!
動的スコープってスタックに積み上げるだけで実現できるじゃないですか
静的スコープってどうやって実装すればいいんですか?ヒント下さい
917(1): はちみつ餃子 ◆8X2XSCHEME 2018/05/02(水)12:49 ID:g0SlpjdS(1) AAS
コンパイル (意味解析) 時にスタックを使えばいいんじゃないのかな。
918: 2018/05/02(水)13:03 ID:Ofc9Qt+3(2/2) AAS
>>917
なるほど、意味解析時にスコープの構造をスタックで再現しといて
eval時に該当するスタックを参照できればいいってことですよね。
なんだか、ソースマップみたいですね。ひとつひとつのAtomに該当するスコープの参照を持たせるとなると、なんか重くなりそうですね
919: 2018/05/11(金)15:15 ID:jYn7b+yh(1) AAS
Have you ever read The Little Schemer? => #t
Have you ever read The Seasoned Schemer? => #t
Have you ever read The Reasoned Schemer? => #t
Have you ever read The Little Prover? => #t
Have you ever read The Little Typer? => #f
What's The Little Typer? => Pie language book.
920: 2018/05/13(日)10:00 ID:V4PsQf4P(1/2) AAS
David Thrane Christiansen のやっている Idris や Pie language といえば、
依存型 (dependent type) を使用した Type-Driven Development かな。
定理証明系の次の話題としては順当なところ。
921: 2018/05/13(日)10:10 ID:fJNKI1KS(1) AAS
もうなんのことだかさっぱり
922: 2018/05/13(日)13:45 ID:V4PsQf4P(2/2) AAS
依存型についてのテキストはこれまでにこういうのが出てるよ。
Edwin Brady "Type-Driven Development with Idris"
Adam Chlipala "Certified Programming with Dependent Types"
Aaron Stump "Verified Functional Programming in Agda"
Edwin Brady と David Thrane Christiansen は協力して Idris を作ったひとで、
今回、Christiansen が Racket 上で Pie language を実装したみたい。
Pie languageの実装を理解させる本が出ることで Type-Driven Development の
低レベルでの詳細が明快になると期待できる感じかな。
923: 2018/05/23(水)20:15 ID:Au5e7VGg(1) AAS
僕の知り合いの知り合いができたパソコン一台でお金持ちになれるやり方
役に立つかもしれません
グーグルで検索するといいかも『ネットで稼ぐ方法 モニアレフヌノ』
VU7Z1
924(4): 2018/05/23(水)20:17 ID:ddkD19I+(1) AAS
ちょっと聞きたいんですけど
JSONをS式で書いたらどんな書き方になると思いますか?
(users . (
((Name . John)
(Age . 25))
((Name . Mike)
(Age . 24))
))
みたいな感じですか?
925: 2018/05/23(水)21:44 ID:8jCQObxo(1) AAS
cl-jsonとかで読み込んでみたら
926: はちみつ餃子 ◆8X2XSCHEME 2018/05/24(木)00:45 ID:jqqWnK8Z(1/2) AAS
>>924
Gauche だとこんな感じにマッピングされる。
外部リンク:practical-scheme.net
Sagittarius だとこう。
外部リンク[html]:ktakashi.github.io
XML だと SXML でほぼ統一されてるけど、JSON に関してはまだ揺らぎがある。
927: 2018/05/24(木)01:13 ID:NR1AW6HZ(1) AAS
素直に連想配列にした方が良いのか、それだと巨大なデータの時にアクセス効率が悪いからハッシュテーブルやdefstructした方が良いのかとか、一筋縄では行かないだろう
928: はちみつ餃子 ◆8X2XSCHEME 2018/05/24(木)01:32 ID:jqqWnK8Z(2/2) AAS
Expat みたいな方式で、オブジェクトの構築はユーザまかせにするってのもひとつの案かな。
まあ、 JSON が必要な場面は設定ファイルとかウェブ API の類とかだと思うので、
極端に巨大な JSON を仮定する必要はあまりないと思うが……。
929: 2018/05/27(日)13:45 ID:mYmUirqO(1) AAS
JSONをS式で書くといっても、いろいろやり方はあるよね。
Pie language みたいにDSLを使って、Name型、Age型、users型を定義すれば、
型推論、Type-Driven Development を導入できる。
930: 924 2018/05/27(日)13:52 ID:zSa68/cd(1) AAS
ほえー、難しいですな
931: 2018/05/27(日)20:34 ID:4TYKeuy0(1) AAS
結局pieてなに?
932: 2018/05/28(月)11:53 ID:IqAZvII/(1/3) AAS
PIE には、元々「インド・ヨーロッパ祖語」(Proto-Indo-European language) という意味があるらしい。
そこから転じて Type-Driven Development の祖語たれかし云々。
Pie言語のような Type-Driven Development と J-Bob(ACL2) の定理証明器の組み合わせによって、
新しいプログラミング・サイクルがもたらされる。
[1] 型を定義する(自動的に型チェックもされる)だけで、
[2] Type-Driven Development 環境が型定義から実行可能なプログラムの雛形を生成してくれる。
[3] プログラムの雛形に実装部分を書き加える。
[4] 書き加えた実装部分の数学的正しさを定理証明器でチェックする。
こんな感じで開発するだけでプログラムの正しさが保証付きで出来上がる。もちろんOOPでもOK。
将来、ほとんどの言語がこういう機能を持つと思われる。
933: 2018/05/28(月)11:59 ID:IqAZvII/(2/3) AAS
荒っぽく言うと、英文作成時にtypo checkerとgrammar checkerを併用すると、
正しい英文が簡単に書けてしまう。そのプログラミング言語版みたいなものかと。
934(1): はちみつ餃子 ◆8X2XSCHEME 2018/05/28(月)13:09 ID:wEzLaTj/(1/2) AAS
既存の XML や Json のデータからスキーマを構築するやつはどっかで見たことある。
935: 2018/05/28(月)13:24 ID:IqAZvII/(3/3) AAS
>>934
JSONスキーマつかってvalidationするやり方は、テスト駆動開発だからミスリード。
936(1): 2018/05/28(月)18:05 ID:Wvf3e53c(1) AAS
初心者なんだけど、qiitaでlispの勉強ブログやるのどう思う?
ブログとか自分の趣味ではないんだけど、勉強はかどるかと思って。
937: はちみつ餃子 ◆8X2XSCHEME 2018/05/28(月)23:57 ID:wEzLaTj/(2/2) AAS
>>936
いいと思うよ。
ただ、 Qiita はブログホスティングサービスではなく、
「知識を共有する」ということをコンセプトにしたサイトだから、
やったことを箇条書きにするだけとかコードが貼っているだけみたいなのではなく、
自分に続く人に参考になるような書き方を心がけてね。
938: 2018/05/29(火)21:14 ID:BqokYjF9(1) AAS
数行のコードをコンパイルしてみた
chickenでとても小さいバイナリが生成されて満足したあと
Racketが生成するバイナリの大きさに驚いた
そしてSBCLでやってみたらさらに5倍以上も大きくてビックリだわ
それぞれに理由があるのは分かるけど
939(1): 2018/05/30(水)09:11 ID:qfpDXvj8(1) AAS
実行ファイルのサイズがでかくても役に立つアプリだったらいいんじゃないの
役に立たないアプリだからサイズが小さくないとまずいって話かな
940: 2018/05/30(水)09:15 ID:PA9GXtrJ(1) AAS
ばかか?
941: 2018/05/30(水)09:59 ID:+JLqa4/r(1) AAS
SBCLで「ビックリ」したのはこれ
(eq 'abc 'abc) ;=> T
(eq 'アイウエオ 'アイウエオ) ;=> T
'アイウエオ ;=> アイウエオ
'㌰㌰ ;=> ピコピコ
(setf (sb-ext:readtable-normalization *readtable*) nil) すれば変換されなくなる
外部リンク[html]:www.sbcl.org
942(1): 924 2018/05/30(水)10:14 ID:yDgT1YjT(1) AAS
皆様に質問です!
JSCLみたいに「サーバサイドもクライアントサイドもlispで!」みたいな思想のやつって他にもありますか?
単にトランスパイラというわけでなく、ブラウザでevalできるのが理想なんですけど...
よろしくおねがいします!
943(1): 2018/05/30(水)12:19 ID:3TWGIpcw(1) AAS
>>942 (loop) >>901
944: 2018/05/30(水)12:35 ID:4OOLz1vE(1) AAS
>>939
自分はFDDの時代から使ってるような老害なので、バイナリは機能なりの大きさのほうが自然に感じるよ
まあ本体が小さくても巨大なランタイムが別にあるんだから同じだろと言われればそれまでだけど
945: 2018/05/30(水)12:43 ID:ExxmvTi1(1) AAS
スマホで無駄にデカイバイナリーは迷惑だけどPCアプリのサイズなんて気にしない。
昔はユーザーもアプリサイズやメモリー使用量に敏感だったけど、今はそんなこと気にしてないみたいだし。
946: 924 2018/05/30(水)14:05 ID:jr7ON4yo(1/3) AAS
>>943
なるほど、ありがとうございました。
947(3): 2018/05/30(水)14:20 ID:jr7ON4yo(2/3) AAS
すみません、LISP初心者ですが、追加の質問させてください!
JSCLを試してみようとgithubのGetting StartedとBuildの項目に挑戦しています。
外部リンク:github.com
サーバでnpm install -g jsclしたあと、jscl-replコマンドを打つことでreplが動くところまではできたのですが
GithubのBuildの項目のところでつまずいています。
git clone 外部リンク[git]:github.com
することでnode_modulesやpackage.jsonなどが存在するプロジェクトディレクトリ上部に
jsclディレクトリが作成されたのですが(一体これはなんでしょう?サンプルプログラム集なのでしょうか)
replで(jscl:bootstrap)を評価しても
ERROR: The symbol `"BOOTSTRAP"' is not external in the package #<PACKAGE JSCL>.
省9
948: 2018/05/30(水)19:57 ID:EPh+XEfw(1) AAS
SBCLは実行ファイルを圧縮して作成できる
40MBが10〜15MB位になるはず
それでもデカイけどね
ちなみに起動時間は全く変わらない
949: 947 2018/05/30(水)23:32 ID:jr7ON4yo(3/3) AAS
よく考えたらスタックオーバーフローとかで質問するべきだったかもしれません(´・ω・`;)
950(1): はちみつ餃子 ◆8X2XSCHEME 2018/05/31(木)00:05 ID:wCoAkDam(1) AAS
>>947
> 「あなたのLispにjscl.lispをロードし、ブートストラップ関数を呼び出して実装自体をコンパイルします」
マニュアルの文章は、あなたが使っている LISP 処理系の上で jscl.lisp をロードした上で (jscl:bootstrap) を評価せよという意味だと思うんだけど、
あなたがやっているのは jscl-repl を起動した中で (jscl:bootstrap) を評価しているように読める。
そうだとしたらそんなものは無いので無いというエラーになるのはわかる。
951: 947 2018/05/31(木)10:01 ID:eRJFRV4/(1) AAS
>>950
ご回答ありがとうございます!
つまりCLISPかなにか、適当な処理系をサーバにインストールして
そこから呼び出せばいいのですね!?
試してみます!
952: 2018/06/01(金)08:07 ID:vYR603xM(1) AAS
Land of Lispはおもしろいですか?
953: 2018/06/01(金)08:38 ID:pJKbzob1(1) AAS
マンガは面白い
954(1): 2018/06/30(土)04:32 ID:7M67VtrJ(1) AAS
stackoverflowってホントの初心者が質問してもいい雰囲気なん?
955(1): 2018/06/30(土)21:17 ID:68JzM2MV(1) AAS
>>954
雰囲気ってのが曖昧だけど、質問内容が馬鹿げたものでもどんどんしていいよ。
初心者の質問内容がしょうもないことなのは普通のこと。
だけど、質問の仕方にはある程度の作法がある。
外部リンク:ja.stackoverflow.com
「ホントの初心者」というのは自分が何を知りたいのか理解していないことが多いので、
回答できる質問に修正されるまでしつこくコメントされるかもしれないけど、
それは非難ではなく回答するために必要な対話なので、面倒くさがらないでね。
956: ◆QZaw55cn4c 2018/07/01(日)21:02 ID:7W/RE1b9(1) AAS
>>955
>自分が何を知りたいのか理解していないこと
それがわかるようであれば、回答を半分得たも同然ですね…
私にはわからないことが沢山あります、それが減る気配もない…
957(1): はちみつ餃子 ◆8X2XSCHEME 2018/07/03(火)11:46 ID:BKTruI85(1/2) AAS
Gauche の 0.9.6 リリースが近いらしい
958(1): 2018/07/03(火)19:48 ID:BYpLJ+yC(1) AAS
>>957
川合さん、未だメンテしてるのか。
ハワイで俳優業やってんじゃなかったけ?
959: はちみつ餃子 ◆8X2XSCHEME 2018/07/03(火)22:38 ID:BKTruI85(2/2) AAS
>>958
ずっと兼業してるみたいだよ。
俳優としての履歴はここに書かれているけど、 (実際には仕事につながらなかったオーディションも含めると) 2003 年からスタートしてる。
外部リンク[cgi]:practical-scheme.net
スクウェアの映画の仕事を終えてから Scheme Arts という名前で法人 (といっても史郎さんひとりの会社だが)
を立ち上げてコンサルティングの仕事を始めて、そのほんの少し後から平行して俳優としても活動してることになる。
960: はちみつ餃子 ◆8X2XSCHEME 2018/07/04(水)00:27 ID:afbTNZQQ(1) AAS
0.9.6 キタ――♪ o(゚∀゚o) (o゚∀゚o) (o゚∀゚)o キタ――♪
961: 2018/07/04(水)01:17 ID:OTzKBqUL(1) AAS
関数型言語で画像処理をやってみたいんだけれど
Common Lispで画像読み込みの定番ってある?
debianでcl-png使おうとしたらlibpng12が必要みたいで
使えませんでした。(libpng16ならある)
clwikiに載っているimageライブラリでドキュメントが充実してるのって
cl-pngが一番なんだけど。
962(1): 2018/07/04(水)07:25 ID:vo63HsfH(1) AAS
そーいやgimpがlisp系
963: 2018/07/04(水)21:49 ID:gFgZc5FG(1) AAS
KI1
964: はちみつ餃子 ◆8X2XSCHEME 2018/07/05(木)03:00 ID:l9X7uzb+(1) AAS
>>962
Scheme やね。
TinyScheme がベース。
R5RS のサブセットになってる。
965(1): 2018/07/06(金)01:28 ID:xqwQ2rU4(1) AAS
ラムダ計算と純lispはともにチューリング完全
だからlambdaだけで純lispが作れるはず
実際、cons,car,cdrは作れる
(define (my-cons a d) (lambda (f) (f a d)))
(define (my-car ad) (ad (lambda (a d) a)))
(define (my-cdr ad) (ad (lambda (a d) d)))
でも、atom?またはpair?はどう作ればいいの?
966(8): 2018/07/11(水)13:07 ID:7FwajRbN(1/7) AAS
教えてください。初心者です。
(defun test ()
(let ((result '(0 0 0 0 0 0 0)))
(format t "~{ ~a ~}" result)
(incf (nth 4 result) 7)
(incf (nth 6 result) 6)
result))
この関数なんですが、実行するたびに結果が変わるのです。
HOGE 28 > (test)
0 0 0 0 0 0 0
省9
967(1): 966 2018/07/11(水)13:41 ID:7FwajRbN(2/7) AAS
何でこうなるかは、何となくわからなくはないのですが(1回目の実行と2回目の実行で同じリストをletで束縛してるってことですよね?)、
letってそういう動作するのを想定して使わなきゃいけないものなのか、ってのがわかってないのです。
僕の理解では元の関数定義でいけそうな気がするのです。
968: 966 2018/07/11(水)15:14 ID:7FwajRbN(3/7) AAS
(defparameter *FOO* '(bar bar bar))
(defun hoge-is-foo (&optional (piyo nil))
(let ((hoge '(fuga fuga fuga)))
(if piyo (setf *foo* hoge))
(format t "HOGE: ~{ ~a ~}~%" hoge)
(format t "*FOO*: ~{ ~a ~}~%" *foo*)
(if (eq hoge *foo*)
(format t "HOGE IS FOO!~%")
(format t "HOGE IS NOT FOO!~%"))))
PIYO 82 > (hoge-is-foo)
省17
969(3): 2018/07/11(水)15:25 ID:16Hc9NDk(1/3) AAS
>>966
let の使い方というより、 quote されたリストの破壊的変更は literal object の変更にあたるから未定義動作になるはずで、そのせいで変な挙動になってるんだと思う。
ちなみに Allegro だと LispWorks と同じ挙動になった。
SBCL だと警告で "Destructive function SB-KERNEL:%RPLACA called on constant data: (0 0 0)." と出る。
で、繰り返し呼んでも毎回 (0 0 0 0 0 0) が返されるみたい。
970(1): 969 2018/07/11(水)16:28 ID:16Hc9NDk(2/3) AAS
>>967
あ、質問の趣旨が違うか。
(defun hoge ()
'(1 2 3))
があるときに、
(eq (hoge) (hoge))
は、同じリストを返すのだから常に T になるのか?って話かな
971(1): 966 2018/07/11(水)17:18 ID:7FwajRbN(4/7) AAS
>>970
966です。
僕が知りたかったのは>>969の内容です。どうもありがとうございました。
未定義動作なのですね。基本的にこのような破壊的代入は避けるってことですかね。
しかし、これが未定義だと、確率は低いでしょうけど、いつかどこかで事故が起こったりするんじゃないのかな。知らんけど。
972(1): 2018/07/11(水)19:41 ID:16Hc9NDk(3/3) AAS
>>971
うーん、リストを破壊的に変更する場合、上のようにリテラルを破壊するのもまずいし、リテラルでなくても部分共有されたリストだと予想外の場所に影響が及ぶので、自分は安全とわかってないとやらないです。
破壊的変更をするのが前提なら、 list 関数や言及されてるmake-listで新しく作ったり、 copy-list で複製してからいじったりすることが多いかも。
973(1): 2018/07/11(水)20:14 ID:VhV09Bdv(1) AAS
>>965
↓の isnil あたりを参考にすれば作れそう。
外部リンク:en.wikipedia.org
974: 966 2018/07/11(水)20:23 ID:7FwajRbN(5/7) AAS
>>972
破壊的な変更には注意が必要なこと自体は、入門書などを読んで知っていたのですが、
今回の例では関数を呼び出す度に別のリストをletが束縛するだろうjkと勝手に思っていました。
勉強になりました。ありがとうございます。
975(1): 2018/07/11(水)20:33 ID:Igjhxsb4(1) AAS
>>966
SBCLは警告が出るから出ないように修正するだけだし、無視しても意図した通りに動く
LispWorksは警告出ないの?
976: 966 2018/07/11(水)20:46 ID:7FwajRbN(6/7) AAS
>>975
でないっす。
977(2): 966 2018/07/11(水)21:11 ID:7FwajRbN(7/7) AAS
自分の環境でSBCLでやってみたら↓みたいになった。
個人的にはLispworksの挙動より意味不明かも。
(hoge-is-foo)はLispworksと同じ結果。
* (test)
0 0 0 0 0 0 0
(0 0 0 0 7 0 6)
* (test)
0 0 0 0 7 0 6
(0 0 0 0 7 0 6)
* (test)
省2
978: 2018/07/11(水)21:46 ID:zGhUAGhR(1) AAS
リテラルのリストに対する破壊的変更はダメ
っていうのはLand of Lisp(の訳注)で初めて知った
他の本やサイトでこれに関する注意を見た覚えがない
「literal object の変更にあたるから未定義動作になる」(>>969)ということは、リストに限らないんだね
[1]> (defun f () (let ((x "abc")) (format t "~S~%" x) (setf (elt x 0) #\!) x))
F
[2]> (f)
"abc"
"!bc"
[3]> (f)
省3
979: 2018/07/11(水)22:50 ID:nrnWofQI(1) AAS
CLHSで "The consequences are undefined if literal objects are destructively modified." って書いてあるページ
外部リンク[htm]:www.lispworks.com
そして、 literal の方には "appearing as data in a quote form" なんて書いてあるので (外部リンク[htm]:www.lispworks.com
quote の中身は literal, よって破壊的に変更すると undefined ..?
980(1): 2018/07/11(水)22:59 ID:vOu8ozZx(1) AAS
何故maxには:keyがつかえないの?
定義だから。いや、知ってるけどあってもええやん。
みんなreduceとか使ってやってんの?
981: はちみつ餃子 ◆8X2XSCHEME 2018/07/11(水)23:38 ID:RBgflsxh(1) AAS
リテラルの破壊が駄目ってのは割と一般的な気がする。
C がそうなってるのを知ってたので、
後に他の言語を学ぶときも意識して仕様をチェックしてる。
982: 2018/07/12(木)00:32 ID:bsVrPe++(1/2) AAS
>>977
SBCLは警告出すということは危険なコードと言うのを認識してコピーを作成してるんでしょ
ちなみにEmacsだとクオートされたリストの書き換えは問題ないからついやってしまうな
983: 2018/07/12(木)00:35 ID:bsVrPe++(2/2) AAS
>>977
すまん間違えた
普通にリテラル内が書き換えられてるって事か
984: 2018/07/12(木)12:25 ID:l643qOMO(1) AAS
>>973
なるほど、first側にatomかpairかのフラグを入れて、実際のリストの構造はsecond側に入れればいいのか。
ありがとう、この線でやってみる。
985(1): 2018/07/12(木)13:13 ID:QKPLqpS1(1) AAS
mapcarしてremove-if #'nullするのと、
mapcan使うのとどっちがおすすめなん。
986: 2018/07/12(木)17:19 ID:eSxWwMsY(1/2) AAS
>>985
filter 的な話?こういう
(mapcan #'(lambda (x) (and (numberp x) (list x)))
'(a 1 b c 3 4 d 5))
=> (1 3 4 5)
上の例は CLHS からの引用だけど (外部リンク:www.lispworks.com
そこで 「mapcan を使った idiom」とか言ってるから、 mapcan でいいんじゃないの。
987: 2018/07/12(木)18:20 ID:eSxWwMsY(2/2) AAS
>>980
:key を持つのは sequence か cons を扱う関数/マクロだけみたい。
max は数を扱う関数だから :key がない、くらいの理由なのではと予想。
で、僕だったらそういう状況は loop ~ maximize で書いちゃうな:
(loop with list = '((1 a) (100 b) (5 c))
for i in list
maximize (car i))
988: 2018/07/12(木)19:34 ID:D5ReHf3v(1) AAS
1の関連スレっているの?
どこもレス皆無なんだけど。
ここらへんは辛うじて今年レスがある。
【Lisp】プログラミング言語 Clojure #4【JVM】 [無断転載禁止]©2ch.net
2chスレ:tech
【GNU】Emacs Lisp 【Elisp】
2chスレ:tech
989(1): はちみつ餃子 ◆8X2XSCHEME 2018/07/12(木)20:31 ID:m8Dd1031(1) AAS
Lisp系だからってひとまとめにするには違いが大きすぎるし、
ちょっとしたことならともかく、
入り組んだ事柄を話すにはやっぱり専門のスレがよさそうな気もするし、
それぞれの言語でコミュニティがあるから、
5ch は雑談程度って割り切ってもいいのかもしれないとも思うし…。
990(1): 2018/07/13(金)23:56 ID:1D4AU09B(1) AAS
Maxima以外に実用出来るオープンソースの数式処理システムを知らないのだけど
Common Lispが優秀過ぎるからmaximaしかないのか
自分の知らない数式処理システムが他にあるのか
991: はちみつ餃子 ◆8X2XSCHEME 2018/07/14(土)01:56 ID:Eblv1Llg(1) AAS
>>990
俺が知ってるのだとこういうのもある。
外部リンク[html]:www.math.kobe-u.ac.jp
外部リンク:www.gap-system.org
貢献する人が多いと良くなっていくのは当然だし、
良くなるとまた人が集まってくるというスパイラルが出来るので、
一度人気が出るとあえて他の不人気のプロジェクトに手を出そうという人は
現れにくいんじゃない?
まあ、数式処理と一言で言っても数学の分野は広大だから、
今までコンピュータで扱えなかった分野のためのソフトが新たに出てくることだってあるだろうし、
省1
992(1): 2018/07/14(土)07:02 ID:0vuXs+dx(1) AAS
>>989
ええ……
Lispでスレ分割なんかしたら
過疎って仕様がないぞ
現に今過疎ってるのにもっと過疎る
993: 2018/07/14(土)09:15 ID:/GhuOfpQ(1) AAS
んじゃ関連サイトは過去スレを除きとりあえず残すけどええんか?
994: 2018/07/14(土)13:24 ID:rTAZMq1D(1) AAS
Emacs Lispは毛色が違う気がする
995: はちみつ餃子 ◆8X2XSCHEME 2018/07/15(日)00:24 ID:HERu1+Fl(1) AAS
>>992
分割しようってのじゃなくて、現時点でそれぞれにスレ立ってるやつがあるわけよ。
個別にスレ立ててるやつは、
ここでやるのはちょっと違うなと思ったからこそ立ってるわけでしょ?
統合するとなると違和感は有るよなっていう程度の話。
996(1): 2018/07/15(日)02:10 ID:oGr67yTf(1) AAS
このスレ以外ほぼ更新ないけど関連スレは残したよ。
3年以内に消費したいね。
Lisp Scheme Part41
2chスレ:tech
997: 2018/07/15(日)13:59 ID:QJDLEpU3(1/2) AAS
画像リンク[bmp]:dotup.org
998: 2018/07/15(日)14:01 ID:QJDLEpU3(2/2) AAS
ぬるぽ
999: 2018/07/15(日)15:09 ID:jvo4M5NJ(1/2) AAS
>>996
乙
1000: 2018/07/15(日)15:09 ID:jvo4M5NJ(2/2) AAS
1000
1001(1): 1001 ID:Thread(1/2) AAS
このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1217日 1時間 23分 46秒
1002(1): 1002 ID:Thread(2/2) AAS
5ちゃんねるの運営はプレミアム会員の皆さまに支えられています。
運営にご協力お願いいたします。
───────────────────
《プレミアム会員の主な特典》
★ 5ちゃんねる専用ブラウザからの広告除去
★ 5ちゃんねるの過去ログを取得
★ 書き込み規制の緩和
───────────────────
会員登録には個人情報は一切必要ありません。
月300円から匿名でご購入いただけます。
省4
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.343s*