Lisp Scheme Part41 (858レス)
1-

202
(1): _ [sage] 2020/05/03(日) 15:45:23.91 ID:XyvLD4Kl(1) AAS
そうこうしているうち Racket 7.7 リリースされたよ。
https://blog.racket-lang.org/2020/05/racket-v7-7.html
個人的なトピックス
・イミュータブルで高速なハッシュテーブルHAMT(hash array mapped trie)がインプリされた。
・コンパイラの最適化でコードサイズ20%減。
・GC1,2割高速化。
・ドキュメント改善。
203: デフォルトの名無しさん [sage] 2020/05/03(日) 18:58:12.70 ID:BS5ww13P(1) AAS
今の Racket は
ChezScheme をバックエンドにしたやつと従来からのやつがどちらも配信されているけど、
これって将来的には一本化される予定ってあるのかな?
204
(1): デフォルトの名無しさん [] 2020/05/04(月) 08:02:38.27 ID:QFOyDpRt(1) AAS
hy言語をwindows10で使いたい
pip install hyは成功するが
コマンドプロンプトでhyと入力してもhyが実行されない
変なパスの設定がいる?
205: デフォルトの名無しさん [] 2020/05/04(月) 17:14:51.89 ID:WvOaLqMC(1) AAS
>>204
管理者権限でインストールしたなら C:\Program Files\Python37\Scripts だけど、
ユーザ権限なら %LocalAppData%\Programs\Python の下のどこからしい。
206: デフォルトの名無しさん [sage] 2020/05/07(木) 13:26:34.69 ID:fANici3H(1) AAS
>>202
キタ━━━━(゚∀゚)━━━━!!
207: デフォルトの名無しさん [] 2020/05/29(金) 15:53:20.54 ID:Xj9bBIl5(1) AAS
https://www.indeed.com/q-Lisp-jobs.html
ここで何度も募集かかってる企業って人が辞めるのも早いってこと?
防衛産業の企業は人気ないとかなのかな
208: デフォルトの名無しさん [] 2020/05/31(日) 00:46:42.64 ID:RkS0wDCU(1) AAS
Common Lispは使い込まないと頭に入ってこないが
Racketにはドキュメント読んだだけで頭にすっと入ってくる綺麗さがあった
最近のRacketって昔と同じ感じの綺麗なままなんだろうか

最近読んだRacketの() []の括弧を区別する方法のドキュメントがわかりにくくて
RacketもCommonLispと同じなってしまって,これならCommon Lispでいいじゃん
と思ったのだが
209: デフォルトの名無しさん [sage] 2020/05/31(日) 16:35:47.71 ID:6jrbJecg(1) AAS
> 最近読んだRacketの() []の括弧を区別する方法

racketがschemeから枝分かれして10年だがracketになるよりまえのr6rsからだろ
たまにしか書かない程度ならなんでも良いだろ大袈裟だな
210: はちみつ餃子 ◆8X2XSCHEME [sage] 2020/06/01(月) 02:26:33.76 ID:0yVOdbpz(1) AAS
Racket は元は教育用途で使われていたこともあってドキュメントはかなり整備されている部類だと思うが。
211: デフォルトの名無しさん [sage] 2020/06/02(火) 22:21:53.62 ID:0sTsfEfs(1) AAS
他の言語と比べてCommon Lispっぽい書き方、Schemeっぽい書き方ってどんな書き方ですかね
212: デフォルトの名無しさん [sage] 2020/06/03(水) 00:06:28.05 ID:OT4MJN13(1) AAS
そら末尾再帰をふんだんに使うとか変数はなるべく使わないとか
213: デフォルトの名無しさん [sage] 2020/06/03(水) 00:18:32.67 ID:5C2VTXl3(1) AAS
CLっぽい書き方はマクロを使いまくった超絶技巧だろう
Schemeっぽい書き方は兎に角無理矢理に再起呼び出しを使った超絶技巧な書き方だろう
214: デフォルトの名無しさん [sage] 2020/06/03(水) 01:17:24.97 ID:gRMTE3Wt(1) AAS
ダイナミックスコープ活用してるの見るとcommon lispだなぁって思う
215: デフォルトの名無しさん [sage] 2020/06/03(水) 09:04:50.18 ID:yr2/b+Mr(1) AAS
括弧のやまがある時点でlispっぽい。あとはまあ、ラムダ式とかもほかに普及してきてるから、マクロかなぁ。
216: デフォルトの名無しさん [] 2020/06/05(金) 13:14:24.46 ID:dnBRE6E+(1) AAS
hy言語良いのにpython使いが良さをわかってくれない
217: デフォルトの名無しさん [sage] 2020/06/05(金) 23:11:11.70 ID:gXepSjvX(1) AAS
見るからに検索に引っかからなそう
名前って大事だよね・・・
218
(1): デフォルトの名無しさん [sage] 2020/06/26(金) 20:41:33.71 ID:zhAvJTli(1) AAS
LispworksのprofessionalとhobbyistDVどう違うの?
219: デフォルトの名無しさん [sage] 2020/06/27(土) 16:06:22.83 ID:9QvR4hLZ(1) AAS
Lispworksのprofessional 32bitかhobbyistDV 64bitどっち買うか迷う
220: デフォルトの名無しさん [sage] 2020/06/29(月) 08:04:38.82 ID:bwiS8r2m(1) AAS
>>218
hobbyistDVは業務で使うことはできんくて作成したEXEも配布できないです
professionalは業務用途で無制限の配布ライセンス込みです
業務で使用するEXEの配布をするのが目的かどうかでしょうね
221
(1): デフォルトの名無しさん [] 2020/07/21(火) 23:47:51.88 ID:WS1OAOc5(1) AAS
Pythonぽい独自言語をpythonに変換したい
Lispは使わずpythonのパーサー使った方が楽だろうか
222: デフォルトの名無しさん [sage] 2020/07/22(水) 00:07:10.65 ID:Rr/gpg4T(1) AAS
>>221
PythonぽいならPythonに変換すればいいだろ!
223: デフォルトの名無しさん [] 2020/07/22(水) 19:30:54.17 ID:Cq/LgZJ4(1) AAS
hyこういう時に使えるのか
224: デフォルトの名無しさん [sage] 2020/08/21(金) 21:28:14.79 ID:l/GdGvyy(1) AAS
racketでデバッグするのは
DrRacketを使うしかない?
コマンドラインでデバッグできたらいいんだが
225: はちみつ餃子 ◆8X2XSCHEME [sage] 2020/08/24(月) 02:59:00.85 ID:ko9AntT7(1) AAS
デバッグってどういうレベルのことだろ。
REPL はあるんだからそこから実行してみればいいんじゃね。
226: デフォルトの名無しさん [] 2020/10/05(月) 07:37:00.61 ID:VkmQCekf(1) AAS
Python のpandasが日時関係処理充実しすぎて手放せない
しかしlispで似たことできるなら乗り換えたい
Pandasのデータからガントチャート作ってくれさえすればいいのだけど
Lispに相当するものないでしょうか
227: デフォルトの名無しさん [sage] 2020/10/05(月) 23:29:50.84 ID:+akcWJTJ(1) AAS
既に手放せないほどのものを漠然としたlispへの印象で乗り換えたら全てが満足したという話は寡聞にして知らない
228: デフォルトの名無しさん [] 2020/10/07(水) 06:01:50.72 ID:K2xU1fKa(1) AAS
pandasはRの劣化コピーで
Rはschemeと相性がいいから
Rに乗り換えると良いのでは?
229: デフォルトの名無しさん [sage] 2020/10/07(水) 11:49:58.33 ID:jq/8+j7g(1) AAS
邪道かもしれないが
hy使えばlisp でpandas使える
230: デフォルトの名無しさん [sage] 2020/10/16(金) 17:12:58.14 ID:PUF6e3pG(1) AAS
lispは他の言語に寄生して生きていくしかないね
pyレベルのライブラリなんて期待できないし
231: デフォルトの名無しさん [sage] 2020/10/16(金) 18:49:22.22 ID:gzagFIoh(1/2) AAS
Luaみたいな用途なら需要がある気がする
232: デフォルトの名無しさん [sage] 2020/10/16(金) 19:26:16.21 ID:eDnfO719(1) AAS
時期にcommon lisp でできるようになるかも
最近numpyのcommonlisp版作るnumcl ってプロジェクトあるし
233
(2): デフォルトの名無しさん [sage] 2020/10/16(金) 19:47:49.92 ID:gzagFIoh(2/2) AAS
カッコなし、字下げか空白だけで繋ぐlispとかあったら3レス分くらい流行るかも
234
(1): デフォルトの名無しさん [sage] 2020/10/16(金) 22:46:57.54 ID:uQ0QovW5(1/2) AAS
>>233
たとえば(/(+ 1 2 3 4 5) 5)はどうなるの

/
 +
  1 2 3 4 5
 5
こうかな?
235
(1): デフォルトの名無しさん [sage] 2020/10/16(金) 22:55:51.98 ID:uQ0QovW5(2/2) AAS
無限ループ
((lambda(x)(x x))(lambda(x)(x x)))
こういうのだと字下げだけでは対応できないから補助キーワードが必要になる
call
 lambda x
  call x x
 lambda x
  call x x
こうかな
無意味に行数が増える時点で自分的に却下だけど
236: はちみつ餃子 ◆8X2XSCHEME [sage] 2020/10/17(土) 01:28:29.67 ID:EbfBq8oa(1/2) AAS
>>233-235
Scheme での提案として存在はする。
https://srfi.schemers.org/srfi-49/srfi-49.html
でも使われているのを見たことは無いなー。

そこまで括弧が嫌いならあえて Lisp の系統の言語を使わなくても
他の選択肢はいくらでもあるわけだしな。
237
(1): デフォルトの名無しさん [sage] 2020/10/17(土) 09:40:24.61 ID:aI2oeiUv(1) AAS
なんていうか、何も変わらんなあ…
カッコがないのにカッコが見える
238: デフォルトの名無しさん [sage] 2020/10/17(土) 13:45:30.78 ID:FBaj+4Vy(1) AAS
AST をそのままかけるのが lisp の欠点であるし強みでもあるんだから、それが嫌なら他言語で AST をいじれるライブラリーを使ってかけって話だしね
239: はちみつ餃子 ◆8X2XSCHEME [sage] 2020/10/17(土) 16:11:43.70 ID:EbfBq8oa(2/2) AAS
>>237
Indentation-sensitive syntax ( I 式) は S 式との間での単純な変換規則なので
S 式を忘れて書けるほどの抽象度ではないという感覚はわかる。
むしろ脳内で S 式に展開しようとしてしまって変に負荷がかかる感じがある。
最初から I 式で学んでいればまた違う感覚なのかもしれないけど、
そういう学習ルートは確立してないしなぁ。
240
(1): デフォルトの名無しさん [sage] 2020/11/03(火) 18:17:12.28 ID:mQdztdM9(1) AAS
趣味プログラマでLispしか知らないんだけど、
みんなはやりたいことの応じて言語を使い分けてんの?
241: デフォルトの名無しさん [sage] 2020/11/04(水) 09:41:10.74 ID:lIQnEWld(1) AAS
>>240
そりゃ使い分ける
たとえば速さや移植性を重視するときは今でもCが手放せない
一時Rustも使ってみたけどLLVMに縛られるのでCに戻った
あと複雑なことをしないグループログラムだとPythonが楽
ネットを探せば必要なライブラリはだいたい手に入る
242
(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2020/11/04(水) 12:06:16.91 ID:gK1y19nz(1) AAS
なんだかんだで C だけは手放せない感じはあるかな。
低レイヤを支配してるのはやっぱ C だわ。
それもこれからは一部は Go や Rust に置き換わっていくとは思うけど。
243
(1): ◆QZaw55cn4c [sage] 2020/11/04(水) 19:46:38.68 ID:P7pHA7N2(1) AAS
>>242
>これからは一部は Go や Rust に置き換わっていくとは思うけど。

……
C で記述された lib を Go や Rust は気軽にコールできるのですか?
まさか…
244: はちみつ餃子 ◆8X2XSCHEME [sage] 2020/11/05(木) 17:06:21.53 ID:CL/4cqPq(1) AAS
>>243
そりゃ当然できるよ。 呼び出すだけなら難しい手間は何もない。
ただ、 C の側のコードの保証が弱すぎる。
たとえば (C側で) malloc で確保したメモリは Go や Rust の側でいつ解放するのが
正しいのかわからないのでそのあたりのつじつま合わせは手動で頑張るしかない。
多少のラッパーを書く必要はあったりする。
245: デフォルトの名無しさん [sage] 2020/11/14(土) 17:07:17.70 ID:sHUc2peo(1) AAS
趣味でやっててhyperspec引きながらやりたいことできるようにはなってきたんだけど、
ガッコで系統的勉強したわけじゃないし、自分でやっててもうちょっとええ方法あってもいいよなあとか思うんだけど、
なんかいい勉強方法ある?PAIPはイヤ。
246: デフォルトの名無しさん [sage] 2020/11/15(日) 01:33:48.20 ID:A4lXbstU(1) AAS
SICPとCTMCPとかどうかな。
LISPじゃなくてプログラミング全般を体系的に学ぶ話になるけど。
247: はちみつ餃子 ◆8X2XSCHEME [sage] 2020/11/15(日) 03:50:11.96 ID:x+/Z2zzY(1) AAS
日本語で書かれた Common Lisp の本はほとんど絶版になっちゃってるしなぁ……。

ガチの初心者なら Land of Lisp とかもアリかと思うけど、自分でリファレンスを調べられる程度ということになると
逆にちょうどよい書籍ってあまりない感じだよね。
248: デフォルトの名無しさん [sage] 2020/11/16(月) 14:24:47.42 ID:0hfDZfuV(1) AAS
使ってる処理系のソースを読んだり処理系を作ってみる
249: デフォルトの名無しさん [sage] 2020/11/16(月) 20:37:45.98 ID:ui1G6s5+(1) AAS
on lisp好き
let over lamda変態チックで好き
でも今はsmalltalkerになってしまったよ
250: デフォルトの名無しさん [sage] 2020/11/17(火) 01:49:08.02 ID:k3t+4yVm(1/2) AAS
lolのワクワク感はすごい、とりあえず写経したけど理解が追いついてないのでg!無し版を実装中

初心者だけどlisp関連の良書はかなりネットに上がってるよね、cltl2、onlisp,、lol、sicpなどなど
初心者だけど評判良さそうだからとホイホイ買ったのをネットで見付けてはヘコんでる
251: デフォルトの名無しさん [sage] 2020/11/17(火) 01:59:11.44 ID:k3t+4yVm(2/2) AAS
(大事なことなので)
252: デフォルトの名無しさん [sage] 2020/11/28(土) 21:43:05.36 ID:IG5x2Tcu(1) AAS
みんな、fletとかlabels使うの?
俺全然使わないんだけど。
253: デフォルトの名無しさん [sage] 2020/11/29(日) 02:14:37.33 ID:JzQZ+ZwM(1) AAS
labelsはよく使う
fletはネストが深くなって読みにくくなるので嫌い
254
(1): デフォルトの名無しさん [sage] 2020/12/01(火) 23:12:43.95 ID:Ul2ITO5q(1) AAS
スキーム手習いなんですけど
前の章までしっかり理解してから読み進めてくださいとのことですが
継続渡しから急に難しく感じます
そこまでが理解できてないってこと??
255: はちみつ餃子 ◆8X2XSCHEME [sage] 2020/12/02(水) 11:19:13.62 ID:wCsCmSK2(1/3) AAS
>>254
私はその本を持っていないから具体的なことはわからんけど、
不慣れな初心者にとって継続渡しは実際に難しいと思う。
でも「難しい」だけで「理解できない」わけじゃないならたぶん前章まで一応の理解はできてるんじゃないかな。
256
(2): デフォルトの名無しさん [sage] 2020/12/02(水) 12:39:58.54 ID:2sTDa/BO(1/4) AAS
継続渡しスタイルに書き換える方法がわからないではなくて継続渡しスタイルに書き換える意味がわからないからかな?
257
(1): はちみつ餃子 ◆8X2XSCHEME [sage] 2020/12/02(水) 13:45:58.76 ID:wCsCmSK2(2/3) AAS
ああ。 なるほど。
継続渡し形式でプログラムを書くことは実際にまず無いし便利でもないので
その点では意味不明と感じられても仕方がないことではあるな。

後の話 (第一級継続) に繋がる前振りだと思うので、
この時点ではパズルとでも思ってとりあえずこなすしかないわ。
258
(2): デフォルトの名無しさん [sage] 2020/12/02(水) 22:18:09.20 ID:3rT4yRJc(1) AAS
>>256
そんな感じです
例で挙げられてる渡される側の関数が何したいのかよくわからないし
多分、教育的に意図的にそうしてるのかもしれないけど
その意図がいまいちわからなくてモヤモヤするんですよね

>>257
一応追っかけることは出来るんですが
直で継続教えてもらったほうがわかりやすいような気がするのですが…
つまり、読めてないってことなんだろうなと
259: 256 [sage] 2020/12/02(水) 22:40:35.57 ID:2sTDa/BO(2/4) AAS
俺はsicpでcall-cc出てきてもさっぱり理解できなかったけど、
onlispで継続の実装を読んでやっと理解できた。

継続でできることってのは超高性能goto(?)が使えるようになることなんだけど、
そのためには継続渡しスタイルで今までの状態(実際はクロージャだけど)の全部または一部を渡して計算をしていくんだよ。
渡されたクロージャのどれかを呼び出す事によって以前の状態に復帰できる。

みたいなことだったと思う。空覚えなんで誰か突っ込んでね。

それと本のわからんところのコードを貼れば誰か解説してくれんじゃない。
260: デフォルトの名無しさん [sage] 2020/12/02(水) 22:45:58.51 ID:2sTDa/BO(3/4) AAS
超高性能gotoって書いてるのは普通の言語のgotoって同じ関数内でしかジャンプできないんだけど、
継続なら安全に関数間でもジャンプできるっていう意味。
261: デフォルトの名無しさん [sage] 2020/12/02(水) 22:48:34.44 ID:2sTDa/BO(4/4) AAS
継続はわかってしまえば当たり前でどこにでも存在してるんだけど、
継続を考えたやつは本当頭いいわとおもった。
262: はちみつ餃子 ◆8X2XSCHEME [sage] 2020/12/02(水) 23:20:42.42 ID:wCsCmSK2(3/3) AAS
>>258
「プログラミング言語 Scheme」や「プログラミング Gauche」でもそういう手順で説明されている。
ネット上で見つかる解説でもよくあるパターン。
http://www.shido.info/lisp/scheme_cc.html
http://www.nct9.ne.jp/m_hiroi/func/abcscm20.html

ようするに定番なんですわ……。
263: デフォルトの名無しさん [sage] 2020/12/03(木) 00:08:17.53 ID:BSRv8eBD(1) AAS
なんでも継続
http://practical-scheme.net/docs/cont-j.html

はよ完成させて
264: デフォルトの名無しさん [] 2020/12/03(木) 12:12:09.32 ID:vc9+WZu6(1) AAS
Landin's J operator の糖衣みたいなもんじゃ?
call-ccって.
265: デフォルトの名無しさん [sage] 2020/12/03(木) 14:15:21.78 ID:sf+VFKLQ(1) AAS
普段cl書きなんでこのまま動くか知らんが、雰囲気はたぶん
(define call/cc (lambda (func) (func (J (lambda x x)))
266: デフォルトの名無しさん [sage] 2020/12/03(木) 19:48:43.98 ID:1MHSKMz8(1) AAS
>>258
継続渡しの初期の用例にヒューイットのアクター理論があるように
並行性が絡むと有り難いこともあるけど
Schemeの規格にそういうのがないから

Gaucheを使ったウェブアプリサーバーにKahuaってのがあったけど
あれが継続渡しを使ってたはず
267: デフォルトの名無しさん [] 2020/12/04(金) 22:12:04.78 ID:9AUT9QCq(1) AAS
エンジニアが教えるの下手くそな理由を論理的に解説してみた【教育の本質】
https://www.youtube.com/watch?v=3YwyYSj-k2s

派遣エージェントの言う事は9割ウソである理由【カモられない方法】
https://www.youtube.com/watch?v=8DxQFLAuFqo&t=231s

IT業界のヤバすぎる落とし穴5選
https://www.youtube.com/watch?v=WPPCJ4o-mpA

絶対にエンジニアになってはいけない人とは【ハイクラス人材】
https://www.youtube.com/watch?v=kKUC7rZRUtc

りゅうけんKENTAマナブは怪しいアフィ勢だとベテランエンジニア(笑)に言われるらしいwww
https://www.youtube.com/watch?v=Cp7ByHiFk6Y

【個人で稼ぐ】会社を辞める前に習得しておくべきスキル5選
https://www.youtube.com/watch?v=8WB4O1V6YLg

【聞いてください】「会社員」という働き方の本当のヤバさ
https://www.youtube.com/watch?v=HbIAACbQkPc

サラリーマンが知らないフリーランスの真実
https://www.youtube.com/watch?v=vxVG8eAQbsc

268: デフォルトの名無しさん [sage] 2020/12/07(月) 13:18:23.95 ID:kze+rPTU(1) AAS
結局call/ccは実装読んだ方が早い
269: デフォルトの名無しさん [sage] 2020/12/08(火) 00:25:26.96 ID:g/rTchWW(1) AAS
そういう発想はschemeっぽくないと思う
これはコンピュータにかける魔法言語なんだからぁ
270: デフォルトの名無しさん [sage] 2020/12/08(火) 10:24:39.14 ID:7buWiz9t(1) AAS
schemeは知らんがclでcall/ccエミュってるぞ、こういうのは勉強になる
閲覧無料の論文もたくさん出てくるし、確かrosetta code(だったか)に少し残念だけど動く実装載ってた気がする
デフォでdynamic scopeのclの方が(エミュる)のはむしろ簡単な気がする
271: デフォルトの名無しさん [sage] 2020/12/10(木) 03:16:14.79 ID:FVBY7yTa(1) AAS
clデフォでdynamic scopeじゃないな
どういうcps実装なん
272: デフォルトの名無しさん [sage] 2020/12/10(木) 19:52:56.52 ID:m5YUCflP(1) AAS
dr.schemeを起動したらada lavelaceが表示された。12月10日が誕生日らしい。
273: デフォルトの名無しさん [sage] 2020/12/18(金) 00:23:57.39 ID:xE2tdWzM(1) AAS
3月にサスマンの新しい本が出ますね
274: デフォルトの名無しさん [sage] 2020/12/18(金) 00:35:54.39 ID:wHl77nxB(1) AAS
Software Design for Flexibility
How to Avoid Programming Yourself into a Corner
https://mitpress.mit.edu/books/software-design-flexibility
275: ◆QZaw55cn4c [sage] 2021/01/02(土) 01:05:03.40 ID:wp0Bo1A/(1) AAS
>>6
この冬、職場から休暇をいただいたことをきっかけに a little schemer への再チャレンジを始めました
2週間では >>6 までは進めなかったけれども、しつこくてべたな精読を今後も継続することにしました‥‥個人的な話でごめんなさい
276: デフォルトの名無しさん [sage] 2021/01/02(土) 09:30:41.51 ID:DXffwUjS(1) AAS
頑張れ
277: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/01/02(土) 12:55:01.66 ID:rf+zWHQf(1) AAS
2018 年の話題へスレ内でアンカーできるあたり、だいぶん進みの遅いスレだなぁ……

ところで先月、 Gauche の 0.9.10 がリリースされたよ。
278: デフォルトの名無しさん [sage] 2021/01/11(月) 12:28:40.23 ID:evx8yw3j(1) AAS
最近Clojureをさわって思ったんだけど、コンスって必要?ただのリストじゃだめなん?
279
(1): デフォルトの名無しさん [sage] 2021/01/11(月) 22:00:08.80 ID:TgqHKx3G(1/2) AAS
最近はlistと言いつつ狭義のlist(linked)じゃなくlinked arrayな事が多いけどclosureもそれかな?(触ってないごめん
(三十年前の言語だけど)Pythonのコード読んだけどそうだったはず
計算量の議論なんかだとlinked listとarrayは一長一短ってことになってるが、アーキテクチャと殆どのデータの性質によって連結配列が実質万能なんで仕方ないね
抽象データ型としてcons/car/cdrというインターフェイスを提供してるなら十分lispだよ

consがなんでそんな大事なのかというと、普通に使われる抽象データ型の中では最も表現力が高いこと
単に自由に伸ばせるリストのようなモノでは、構文上バイナリツリーより複雑な構造は書きにくい(ポインタを駆使しない限り)
consが提供されていれば自然に平面DAGが、そしてちょっと読みにくくなる程度で任意のグラフが表現できる

化学構造やグラフをconsで扱ってるけどほんと便利だよ
280: デフォルトの名無しさん [sage] 2021/01/11(月) 23:51:15.24 ID:TgqHKx3G(2/2) AAS
書きにくい/やすい、ってのは環や分岐がcarとcdrとconsだけで書けるって意味ね
これらのアクセサが提供されていない言語、例えはPythonやcではリストのインデックスに対応する参照/ポインタを明示的に取り出して記録し、アドレスを格納する必要がある
またアルゴリズムにかける時に素の型とポインタ型を区別して場合分けする必要まである
そのまま文字列として吐くのも実装しなくていいし(リンク先のインデックス表示が読みやすいとは言わないが)

PythonなんかだとオブジェクトがリッチなのでnetworkXのような巨大なライブラリを使えば木を超えた表現も自然にかけるので、一時浮気をしたが…

形式言語の分野だともう線形な文字列や二分木の括弧文法は研究され尽くしてるので、グラフ文法なんかが最近流行ってlisp系言語で論文書かれてるね
281: デフォルトの名無しさん [sage] 2021/01/12(火) 00:03:51.23 ID:XqNkUArk(1) AAS
連投してごめんだけど、環や分岐がポインタ使わず自在に描けるのはかしこいsetfの寄与もある、って書き忘れてた(schemeはset-cdr!だっけ)
念のため
282: デフォルトの名無しさん [sage] 2021/01/13(水) 22:45:17.14 ID:c60O+Iz7(1) AAS
>>279
興味深い内容をありがとう
ちょこちょこ遊んでいるだけなので到底そこまで使いこなせる気がしないけど、
データをプログラム中にストレートに表現して操作できるというのはよく分かる

他の言語だとデータを保持するためにわざわざクラス設計からしないと
いけないような強迫観念にかられるけど、lispはそういう気にならない
283: デフォルトの名無しさん [sage] 2021/01/14(木) 12:13:04.15 ID:/NlgSZrU(1) AAS
データ型を定義しないのはトイプログラムだけだけどな
Lispはリストだけ使うのが通だとか善意で広めないでくれよ
284: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/01/14(木) 22:43:13.17 ID:9qLPLWCT(1) AAS
(カッチリした型を中心にする言語に比べれば) 最初はラフに
書き始められるというのはあると思うよ。

でも、そのままだと千行くらいの規模でももうだいぶんキツいんじゃないかな。
人によってはコードを書く腕力 (?) というか強引に行けちゃう人もいるけど、
雑に試行錯誤できるということとそこから部品として確立するのは別の段階なので、
試行錯誤で弄ってるときと同じノリでどんどん拡大していったら
すぐわけわからんようになる。

世間で思われているよりは型定義はすると私も思う。
285
(1): デフォルトの名無しさん [sage] 2021/01/15(金) 01:43:39.29 ID:Hai3vgIl(1) AAS
そういう後付けのボイラープーレトにはCLOSやジェネリックよりコンパイラマクロが便利ね
286: デフォルトの名無しさん [sage] 2021/01/15(金) 21:24:11.84 ID:6113KkR6(1) AAS
ここでいう型定義はdeftypeのことを指しているのでしょうか
287: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/01/16(土) 09:43:26.51 ID:uH9KWN6j(1) AAS
Common Lisp でなら deftype とか defclass とかいったものを使うことになるんかな。
私は Scheme しか知らんからよくわからんけど。
288
(1): デフォルトの名無しさん [sage] 2021/01/17(日) 08:06:30.53 ID:MtDeBO+C(1/2) AAS
>>285
嘘でしょ
人口無能が生成した文かこれ
289
(2): デフォルトの名無しさん [sage] 2021/01/17(日) 11:47:31.37 ID:9ajuvsmH(1) AAS
>>288
defgeneric/methodは勢いで書き上げた触りたくないコードに機能追加するにはコード触らなくちゃならない
型の付いていない複雑なconsはどうせdestructuring-bindして振り分けるしかないんだから分けてdefmethodする利点もない
define-compiler-macroなら一切既存のコードに触れる必要は無いからすごく便利だよ
既存のライブラリに手を入れたいけど、直接書き換えるとアップグレードで無かった事にされるから嫌、って時にも活躍する

もちろんリファクタリング出来るならした方がいいけど、取り敢えず動けば良い時の話ね
290
(1): デフォルトの名無しさん [sage] 2021/01/17(日) 12:14:47.80 ID:fZnccXPg(1) AAS
この場合、 alist はどっち側に分類されるのかな…
個人的にはだいたい alist で済ませてるけど。
291: はちみつ餃子 ◆8X2XSCHEME [sage] 2021/01/17(日) 12:16:55.56 ID:ERThMJgw(1) AAS
Lisp 的なスタイルだとかなり短いサイクルで開発が進むので、
リファクタリングしないまま手の付けられないほどグダグダになった状態は単にサイクルを
回すのが下手なように思うんだけど。

まあ上手くいってないときでもどうにかする方法があるのはありがたい話ではあるけどさ。
292: デフォルトの名無しさん [sage] 2021/01/17(日) 12:22:48.91 ID:16Ro+9sx(1/4) AAS
既存のコードには手を入れず振る舞いだけに着目して付け足して行くってスタイルはaspect oriented programmingとか言うんだっけな
まあ盲で付け足してゆく事と同義ではないが
293: デフォルトの名無しさん [sage] 2021/01/17(日) 12:36:52.37 ID:16Ro+9sx(2/4) AAS
>>290
plistの方が好きだな、pprintでkey-valのカラムに並べられるし、alistが要求されれば一段flattenすれば済む
consの数も同じだし好みでは

ただvalがlistだと(a . (b c))=(a b c)とformatされてしまうので(a . ((b c))) = (a . (b c))と書いてる
aとリストのペアなので意味的にも正しいはず
294: 289 [sage] 2021/01/17(日) 12:38:34.26 ID:16Ro+9sx(3/4) AAS
最後は(a (b c))が正しい、.が余計だった

なんかid変わってたけど289です
295: 289 [sage] 2021/01/17(日) 12:54:42.47 ID:16Ro+9sx(4/4) AAS
真意を掴めてなかった感がある
alist-pとplist-pを定義してる、よく見るし受け入れられてるイディオムだと思う
deftypeしておくといい
すると振り分けをdefmethodに任せる事が出来る
296
(1): デフォルトの名無しさん [sage] 2021/01/17(日) 22:27:16.25 ID:MtDeBO+C(2/2) AAS
deftypeしたtypeはclassじゃないからdefmethodできない
コンパイラマクロはプログラムの意味をかえたらいかんし
パッチするなら別定義のファイルを追加でloadすれば上書きされるのでコンパイラマクロする意味0
嘘ノウハウいらないです・・・
297: デフォルトの名無しさん [sage] 2021/01/17(日) 23:38:13.35 ID:4VqziDiv(1) AAS
>>296
そうだっけ、ごめん確認してきます
298: デフォルトの名無しさん [sage] 2021/01/20(水) 01:48:17.88 ID:9Gv1v6nA(1/2) AAS
alist vs plist はalistの方がassocが(lisp的な意味で)簡潔になるから?で一票
assoc[x;y] = eq[caar[y];x] → cadar[y];T → assoc[x;cdr[y]]]
M式、[x→y; ...はapplyによってS式(QUOTE (COND (x y ) …に展開される

http://www-formal.stanford.edu/jmc/recursive.html
pdf17p

evalのボトムケースでもある大事なassoc、俺にはplist版は思いつかない
evenpが欲しいところだけど算術の定義がまだだし…

clのcx^nrがn=4までなのもcaddarまで使ってるからだろうかね
299
(1): デフォルトの名無しさん [sage] 2021/01/20(水) 01:59:40.44 ID:9Gv1v6nA(2/2) AAS
ffとかappqとか見慣れない面白関数出てきて面白かった
first/restは単なるエイリアスでなくL-exp(線形リスプ?)における相似物としてちゃんと別に定義されてるとかも

あとpairがpairlisに改称した理由とか気になってる、次は1.5マニュアル読むか
小並感
300: デフォルトの名無しさん [sage] 2021/01/22(金) 02:54:51.68 ID:GlnM3g/q(1) AAS
consesのカッコのネストを無視して初めのシンボルを返すffは、左端の簡約だけで導出が決まる特性を持つコンビネータ計算(SKなど)にとても重宝する関数だよ
applyを.と見なせば(論理学記法で)SKx = ((S K) x)はcons((S . K) . x)と等価
.
/ \
. x
/ \
S K
(ff ((S . K) . x)) ; => S

ffでSを得て、そこへのaccessor は(dfs 'S '((S . K) . x))で4行程度で実装出来る、carで潜る時にはpush 'car、cdrならpush 'car、その枝で見つからなかったときにはpopでSへのアクセサ(car car)が得られて、そのノードを公式に従ってsetf '公式すれば導出完了

lispと言えばラムダってイメージあるとおもうけど、むしろコンビータと相性が良い、特にclのラムダは細かなコントロールを求めた代償として明示的なapply/funcallが必要だからなあ
あとdotprintとか定義しとくと便利ね
301: デフォルトの名無しさん [sage] 2021/01/22(金) 08:32:42.17 ID:hEWi2BMh(1) AAS
jmcはラムダ教徒だったろうになあ
いくらlispが形式言語処理向けとはいえ、機械的に処理するには置換が面倒過ぎる
1-
あと 557 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.025s