Lisp Scheme Part41 (855レス)
上下前次1-新
281: 2021/01/12(火)00:03 ID:XqNkUArk(1) AAS
連投してごめんだけど、環や分岐がポインタ使わず自在に描けるのはかしこいsetfの寄与もある、って書き忘れてた(schemeはset-cdr!だっけ)
念のため
282: 2021/01/13(水)22:45 ID:c60O+Iz7(1) AAS
>>279
興味深い内容をありがとう
ちょこちょこ遊んでいるだけなので到底そこまで使いこなせる気がしないけど、
データをプログラム中にストレートに表現して操作できるというのはよく分かる
他の言語だとデータを保持するためにわざわざクラス設計からしないと
いけないような強迫観念にかられるけど、lispはそういう気にならない
283: 2021/01/14(木)12:13 ID:/NlgSZrU(1) AAS
データ型を定義しないのはトイプログラムだけだけどな
Lispはリストだけ使うのが通だとか善意で広めないでくれよ
284: はちみつ餃子 ◆8X2XSCHEME 2021/01/14(木)22:43 ID:9qLPLWCT(1) AAS
(カッチリした型を中心にする言語に比べれば) 最初はラフに
書き始められるというのはあると思うよ。
でも、そのままだと千行くらいの規模でももうだいぶんキツいんじゃないかな。
人によってはコードを書く腕力 (?) というか強引に行けちゃう人もいるけど、
雑に試行錯誤できるということとそこから部品として確立するのは別の段階なので、
試行錯誤で弄ってるときと同じノリでどんどん拡大していったら
すぐわけわからんようになる。
世間で思われているよりは型定義はすると私も思う。
285(1): 2021/01/15(金)01:43 ID:Hai3vgIl(1) AAS
そういう後付けのボイラープーレトにはCLOSやジェネリックよりコンパイラマクロが便利ね
286: 2021/01/15(金)21:24 ID:6113KkR6(1) AAS
ここでいう型定義はdeftypeのことを指しているのでしょうか
287: はちみつ餃子 ◆8X2XSCHEME 2021/01/16(土)09:43 ID:uH9KWN6j(1) AAS
Common Lisp でなら deftype とか defclass とかいったものを使うことになるんかな。
私は Scheme しか知らんからよくわからんけど。
288(1): 2021/01/17(日)08:06 ID:MtDeBO+C(1/2) AAS
>>285
嘘でしょ
人口無能が生成した文かこれ
289(2): 2021/01/17(日)11:47 ID:9ajuvsmH(1) AAS
>>288
defgeneric/methodは勢いで書き上げた触りたくないコードに機能追加するにはコード触らなくちゃならない
型の付いていない複雑なconsはどうせdestructuring-bindして振り分けるしかないんだから分けてdefmethodする利点もない
define-compiler-macroなら一切既存のコードに触れる必要は無いからすごく便利だよ
既存のライブラリに手を入れたいけど、直接書き換えるとアップグレードで無かった事にされるから嫌、って時にも活躍する
もちろんリファクタリング出来るならした方がいいけど、取り敢えず動けば良い時の話ね
290(1): 2021/01/17(日)12:14 ID:fZnccXPg(1) AAS
この場合、 alist はどっち側に分類されるのかな…
個人的にはだいたい alist で済ませてるけど。
291: はちみつ餃子 ◆8X2XSCHEME 2021/01/17(日)12:16 ID:ERThMJgw(1) AAS
Lisp 的なスタイルだとかなり短いサイクルで開発が進むので、
リファクタリングしないまま手の付けられないほどグダグダになった状態は単にサイクルを
回すのが下手なように思うんだけど。
まあ上手くいってないときでもどうにかする方法があるのはありがたい話ではあるけどさ。
292: 2021/01/17(日)12:22 ID:16Ro+9sx(1/4) AAS
既存のコードには手を入れず振る舞いだけに着目して付け足して行くってスタイルはaspect oriented programmingとか言うんだっけな
まあ盲で付け足してゆく事と同義ではないが
293: 2021/01/17(日)12:36 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 2021/01/17(日)12:38 ID:16Ro+9sx(3/4) AAS
最後は(a (b c))が正しい、.が余計だった
なんかid変わってたけど289です
295: 289 2021/01/17(日)12:54 ID:16Ro+9sx(4/4) AAS
真意を掴めてなかった感がある
alist-pとplist-pを定義してる、よく見るし受け入れられてるイディオムだと思う
deftypeしておくといい
すると振り分けをdefmethodに任せる事が出来る
296(1): 2021/01/17(日)22:27 ID:MtDeBO+C(2/2) AAS
deftypeしたtypeはclassじゃないからdefmethodできない
コンパイラマクロはプログラムの意味をかえたらいかんし
パッチするなら別定義のファイルを追加でloadすれば上書きされるのでコンパイラマクロする意味0
嘘ノウハウいらないです・・・
297: 2021/01/17(日)23:38 ID:4VqziDiv(1) AAS
>>296
そうだっけ、ごめん確認してきます
298: 2021/01/20(水)01:48 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 ) …に展開される
外部リンク[html]:www-formal.stanford.edu
pdf17p
evalのボトムケースでもある大事なassoc、俺にはplist版は思いつかない
evenpが欲しいところだけど算術の定義がまだだし…
clのcx^nrがn=4までなのもcaddarまで使ってるからだろうかね
299(1): 2021/01/20(水)01:59 ID:9Gv1v6nA(2/2) AAS
ffとかappqとか見慣れない面白関数出てきて面白かった
first/restは単なるエイリアスでなくL-exp(線形リスプ?)における相似物としてちゃんと別に定義されてるとかも
あとpairがpairlisに改称した理由とか気になってる、次は1.5マニュアル読むか
小並感
300: 2021/01/22(金)02:54 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: 2021/01/22(金)08:32 ID:hEWi2BMh(1) AAS
jmcはラムダ教徒だったろうになあ
いくらlispが形式言語処理向けとはいえ、機械的に処理するには置換が面倒過ぎる
302: 2021/01/26(火)22:54 ID:+x6NTk+g(1/2) AAS
>>299
app(ly)-q(uote)?直訳するとこんな感じか
(defun appq (m)
(cond (null m) nil)
(t (cons (list 'quote (car m)))))
(appq (cdr m))
>(appq '(a b c d e))
; ('a 'b 'c 'd 'e)
(jmcの)applyは関数fをコレにconsしてS式 (#'f 'a 'b 'c ...)を得ると
common lispではformの先頭は関数名かラムダじゃないとダメなのでevalには'funcallか'applyを追加でconsする必要があるので、組み込みevalを使う限りは循環定義だな
303: 2021/01/26(火)23:06 ID:+x6NTk+g(2/2) AAS
誤解してた
M式apply[f; args]の引数はシンボルなのでS式のapplyに渡ってくるのはfunction fじゃなくてシンボルfか
グローバルでdefunしたfなら多分呼べるはず、試してないけど
304: 2021/01/28(木)03:52 ID:52TUUvk8(1) AAS
cons-car-cdr公理主義者への反発として最近妙に感心してしまったポエムを貼っとく
外部リンク:arxiv.org
本当の基本関数はc、a、d、rでした
paulのon lispに載ってる(explode 'bomb) → (B O M B)がハマりそうと思い、実装してみたは良いけどなんに使うんだコレ…
楽しいからいいか
305: 2021/02/06(土)00:01 ID:7zAE1WPt(1) AAS
cxrとconsは表裏一体なので片手落ち
r•c = idになるからこそ
car•cdr = c•a•r•c•d•r = ca•(r•c)•dr = cadr
と読める訳であって
cxr • cons= id を成り立たせるにはcxons = id となるようなo, n, sも定義せねばならない
後はまかせた
306: 2021/02/12(金)22:14 ID:rBgVuMm7(1) AAS
わたばさんのところ見て知ったけど
井田昌之先生のHPで
bit 1996-4、5月号、Guy L. Steele Jr.『Scheme 過去◇現在◇未来』(訳 井田昌之)
などの歴史資料PDFが読めるね
307: はちみつ餃子 ◆8X2XSCHEME 2021/02/15(月)14:15 ID:GNSRFiac(1) AAS
Racket のメジャーリリース。
外部リンク[html]:blog.racket-lang.org
ついに Chez Scheme の実行エンジンを組み込んだものがデフォになった。
308: 2021/02/16(火)17:43 ID:05vP8Ot3(1/2) AAS
普通のやつらを超えろおじさんのarcヲチするのにちょっとracketしてるけどフレンドリーかつ尖ってるね
どんどん尖ってゆけ
309(2): 2021/02/16(火)18:27 ID:6gVrqubW(1/2) AAS
グラハムさんは今はBel言語では
310(1): 2021/02/16(火)19:02 ID:05vP8Ot3(2/2) AAS
>>309
現在の俺がもしjmcだったら?とか言い出したので見限った
今ざっと目を通しても目新しいところ、興奮するところが全然ないんだなこれが
外部リンク[txt]:sep.yimg.com
ofは便利くらいの感想しか出ない
あと整数nをnth nへオバロは、逆なんじゃないかな?
push n へオバロならforthライクに発展できるのに
おじさんは自分に求められてるのは変態テクニックやインスピレーションだと自覚しろ
上下前次1-新書関写板覧索設栞歴
あと 545 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ
ぬこの手 ぬこTOP 0.027s