Lisp Scheme Part41

2018/07/15(日) 02:05:28.62ID:oGr67yTf
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/
469デフォルトの名無しさん
垢版 |
2021/09/15(水) 04:41:28.63ID:mYoOhxQF
妄想も噂も似たような言い換えみたいなものなのに
何でそんな強い口調で言い換えを強要してくるんだ
470デフォルトの名無しさん
垢版 |
2021/09/15(水) 04:43:02.67ID:mYoOhxQF
何でそんな強い口調で言い換えを強要してくるんだ
2021/09/16(木) 00:32:04.26ID:4L00LZ3y
()に包めば言い換えないでも柔らかさを演出できる
()はすごいのだ
2021/09/16(木) 02:34:55.53ID:PaKnZlMf
465から別の話題になってて468まででひとつの会話の流れ.
つまりお前が勝手に被弾してるわけよ‥
2021/09/16(木) 07:32:28.90ID:d2OD6VRD
クオートしてエバらなければよろしい
2021/10/09(土) 23:58:58.03ID:6Ftx/1cj
sbcl2.1.9 windows版(amd64)入れてみたけど今まで起動直後に表示されてたWARNING(win版はスレッドまわりが壊れやすいけどそんなの対応してらんない!みたいなやつ)が表示されなくなって地味にうれしい
2021/10/10(日) 10:54:30.08ID:Td68Zwht
スレッド周りはpthreadのエミュレーションを自前で実装してたのを、直接Win32のAPIを呼ぶようになった
コードが一気にシンプルになったし、その時にバグの修正も行ったのだろう
2021/10/28(木) 23:14:45.49ID:61MCerNv
hhk限定モデル注文した
これでlisp書きまくるぞ
2021/10/29(金) 10:04:04.19ID:Wx77+vYW
[ )* ]
このキートップを作って売ったら儲かる!
2021/11/04(木) 15:30:13.66ID:Pg5ZjBDA
()と[]は入れ替えてる
スペースカデットの模造品とかないんだろうか
2021/11/19(金) 06:28:29.94ID:xMhA1wC0
roswell環境で.roswell/local-projects/が認識されないんだけど原因分かる人いない?
2021/11/28(日) 23:37:15.25ID:RhGEQvG/
roswell emacs
2021/11/29(月) 20:25:25.48ID:egtLBMKE
roswellは複雑すぎて分からん
2021/11/30(火) 11:59:55.55ID:mt2EOzfV
LISPマシン
https://youtu.be/4c8qJGlG9Ik
2021/12/01(水) 00:08:54.18ID:S5WVP6ck
quicklispとかroswellとか、全部一体化されたら使うわ
2021/12/08(水) 02:22:37.34ID:7SPCPFJp
https://mevius.5ch.net/test/read.cgi/tech/1333015632/688
485デフォルトの名無しさん
垢版 |
2021/12/15(水) 14:51:19.13ID:gD/y5IR+
Lispworks 8でた!
2021/12/15(水) 16:19:54.21ID:liRiJS5F
Chicken Scheme 5.3.0 が先月リリースされてたのに気づいてなかったわ。
2021/12/18(土) 20:20:58.46ID:wxlLyg04
Lispworksのpro版購入してる人いますか?
488_
垢版 |
2021/12/27(月) 16:17:35.40ID:kKbRMARZ
Release of LispWorks 8.0
http://www.lispworks.com/news/news39.html

LispworksってSBCL みたいなSIMDサポートありますか?
2021/12/27(月) 23:09:52.29ID:W+QyKxlb
週2日出社、週2日在宅の週4日勤務が最高の働き方だと提唱したい

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

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

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

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

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

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

【驚愕】5人に1人は本業よりも副業収入の方が多いことが判明w 本業よりも稼げる副業とはなんなのか??
2021/12/27(月) 23:20:39.96ID:rFnrNjhz
家でゲームやってる方が100倍楽しい
2021/12/28(火) 14:24:25.81ID:ikdMcku9
Gauche 0.9.11 リリース
2021/12/29(水) 00:16:33.25ID:CixWfOUS
>>491
でも来年も1.0は出ないんでしょう?
493_
垢版 |
2022/01/04(火) 06:23:02.11ID:rzEME/gD
>>491
Gauche 0.9.11-p1 リリース
Windows での問題修正のみみたい。

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

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

まだまだあんどきゅめんてっどなelモード探索も楽しい
2022/01/15(土) 20:48:11.65ID:lW+N/iWS
今度のMSXはCとLispとPythonが動くんだぞ
https://www.4gamer.net/games/999/G999905/20220113106/
2022/01/16(日) 15:41:52.89ID:13k9JV8z
ことしのlisp的抱負をひとつ...
2022/01/16(日) 17:06:35.43ID:qRjB4bc5
>>504
今一度!
3度目の挑戦ですが、sheme 手習いを読む、読み通す!!
2022/01/16(日) 22:33:47.36ID:UU19DhdN
同じく
あと、リスト遊び読む
2022/01/16(日) 22:57:05.20ID:hpGcG9O9
あくまで個人的感想だが、そういう風に勉強のために勉強するみたいなのは結局は上手くいかんのじゃないかと思う。
2022/01/16(日) 23:41:32.77ID:UU19DhdN
じゃあ、GAFAを超えるものを作るために勉強する!
2022/01/17(月) 05:54:03.53ID:F1CAOb16
>>507
仕事で使えば直ぐに覚えられるね
だがSchemeの仕事は無い
2022/01/17(月) 10:07:54.20ID:jU2WrI4n
成果物として作るんでなくてもちょっとした前処理程度のことをするときに使えばいいよ。
使い捨てるものを何で作ろうが文句は言わせん。
プライベートで使うんでもいいしな。
2022/01/17(月) 10:10:54.91ID:mRPHMZkx
ツール類は自分の慣れた言語で作ってしまうw
2022/01/17(月) 10:32:49.23ID:jU2WrI4n
俺は Scheme が一番慣れた言語だから……

こういうのがニワトリタマゴってやつかね。
慣れるために使いたいのに慣れてないから使わないってのでは
何も進まんでないか。
2022/01/17(月) 22:29:08.40ID:BbgRNbfx
scheme使いなら自作の処理系の1つや2つは持ってるよね
2022/01/18(火) 01:32:42.02ID:Q53p7HFH
いいえ。
2022/01/18(火) 23:30:17.32ID:Npm0ST7N
黒板とノートという万能処理系なら
2022/01/19(水) 12:17:51.13ID:YBAvI2MD
なにか作ろうと思うと結局cffiでcライブラリを呼び出して使ってるので、糊みたいな使い方しかしてないなぁ
2022/01/20(木) 02:19:42.06ID:3oKX7/s6
Ruby でも JavaScript でも Python でもだいたいそんなもんだろ。
2022/01/20(木) 19:02:36.89ID:GKs3JF21
scheme修行読んだら処理系書けるかな?
ちょっと読んでちっともわからなくて挫折したけど
2022/01/20(木) 21:08:50.31ID:Ibae9TV2
処理系作りたいなら下手な本より既存の処理系のソース読みまくるのが近道
2022/01/22(土) 21:58:31.48ID:E9iIueP5
俺の気持ちを代弁してくれてたポエム
https://gist.github.com/phoe/7d24bdb1f2be76a02fecba8cfecbef38
521_
垢版 |
2022/01/24(月) 12:23:44.52ID:J5Esvhno
>>520
斉藤由貴バージョンの
夢の中へ
が脳内再生された。
2022/01/24(月) 20:39:39.47ID:xI9wwXQn
ちゃんとエンドユーザー様までデプロイするのはめんどいのは確か

グラフィックス叩いたりするライブラリに依存するのはやむ無しだけど、純lispなライブラリはライセンスの許す限りスニペットに切り出して同梱してる
2022/01/24(月) 21:07:29.09ID:e/3681Ma
継続が凄いって話は、かれこれ10年くらい聞いてたんだけど、結局は限定継続で十分だよね、
限定継続もあんまり応用ないね、って感じに落ち着いたのかな?
2022/01/25(火) 11:38:40.17ID:GfuWsBWm
継続が凄いってなんだよ
継続ベースのlisp実装をschemeと言うのだから、そういう意味では凄い応用例だよ
2022/01/25(火) 12:33:26.79ID:Do1EUgQ3
非限定継続ってjmcのambとかが該当するのか?
動作としてはバックトラックするだけだから特に継続概念が必須というわけではないけど、なんか楽しい
2022/01/28(金) 01:56:11.96ID:hT9TavA0
形式定義できるのが継続の便利なところなんだよ。
バックトラックするだけとはいうが「バックトラックってなに?」というのを突き詰めていったときに「継続をこんなふうに受け渡してるでよ」と言えるの。
2022/01/28(金) 23:35:03.31ID:i9eS2qVS
でも実際はambはただの愚直な探索だから遅いんじゃないの?
2022/01/28(金) 23:54:45.12ID:hT9TavA0
原理的にはバックトラックと同じ速さ。
それが遅いというのならバックトラックでも遅い。
バックトラックより速い方法があってチューニングの手間をかけていいならそうすりゃいい。
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を移植しました…
2022/02/09(水) 12:14:56.74ID:9Cj+df9g
scm はキーワード型がないけどキーワード引数をどういう風に渡すの?
2022/02/09(水) 12:36:09.65ID:3KsDo8lO
restに'symb突っ込んで泥臭く拾ってます
srfiにちゃんとした機構あった気がするけど、小道具レベルで依存はしたくないので
2022/02/09(水) 23:48:43.20ID:9Cj+df9g
ところで scm を使うのはなにか理由があるの?
単なる好みならそれはそれでいいんだけど
このスレで言及される Scheme 処理系は Gauche, Racket, Chicken あたりが多いので
scm 使いは珍しいなーと思った。
2022/02/10(木) 00:36:07.94ID:d8JzH9qO
guile使ってるけど#:で自己評価シンボルになるな
よく見かける:の方はデフォルトで有効じゃなくて、オプション切り替えだったり
2022/02/10(木) 11:27:44.77ID:zyc1CtL/
Guile のキーワードはシンボルとは別の型。
(symbol? #:foo) は #f を返す。
2022/02/10(木) 20:51:58.38ID:/6XFwXXi
CLの掟とか知らないから名前付き引数はマクロでシコシコやってた思い出
2022/03/22(火) 22:52:38.10ID:VhTpyHaP
https://www.meti.go.jp/press/2021/03/20220322006/20220322006.html
2022/03/22(火) 23:07:01.10ID:jC3GI8nJ
Lispエイリアンww
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
2022/04/04(月) 01:15:26.65ID:H1vYw7XQ
キタ━━━━(゚∀゚)━━━━!!
2022/04/04(月) 15:23:18.85ID:lL1T2q6e
>>539
新興?処理系もまだ増えてるのね
良きことだ
542でーちゃんじゃないけど
垢版 |
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
木曽路的な
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
547デフォルトの名無しさん
垢版 |
2022/11/07(月) 16:54:40.26ID:D9DaYQB4
>>546
ありがとう
音素と発音記号は手堅いね
2022/11/07(月) 20:41:51.67ID:kjCGP1Rc
>>546
ここでアイスランド語が言及されるとは驚きました、アイスランド語は実に濃ゆい言語ですね
教科書(Johns Hopkins) を買ったけれども、当然 1 ワードも読めませんでした
2022/12/12(月) 12:44:02.44ID:asaSA4nl
「命の輝き君」がマンホールの蓋に  轢死体と見分けがつかなくなってしまう [725951203]
https://hayabusa9.5ch.net/test/read.cgi/news/1670487647/
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)
って理解でいいの?
2023/01/08(日) 17:21:31.97ID:/n9SAwLy
おおよそ似た雰囲気では書けたりするのかもしれないけど
単純に対応してるわけじゃなかったりもするからいいかどうかは状況によるんじゃないの。
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のこれバグ?
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
2023/01/09(月) 16:15:24.76ID:2yNmR2Eh
    |  彡⌒ミ
   \ (´・ω・`)名前のシャドウ化辺りって自分で処理系実装した子はわかると思うけどハゲる要因だから絶対関わらない方がいいと思う
     (|   |)::::
      (γ /:::::::
       し \:::
2023/01/09(月) 16:36:52.10ID:0CyucYY1
eclは有名だけど、embeddableの名前通りの用途で1MBちょいな処理系だから、そういうものと割り切って使うべき

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

決め打つ名前(locked package?)が分かってる限りは、flet/labelsのレキシカル束縛リストから拾った名前がbody内の呼び出しformのcarに存在するか、ランタイムコストの無い自明な静的解析でconditionを挙げられるはず
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でテストはしたけど、スマホから手打ちなので変だったらごめん
2023/01/10(火) 13:31:12.96ID:TxpPtfKm
>>557
スクリプト言語 (処理系) 的な想定だと実行開始時にテキストの解釈から毎回やるので
静的解析もランタイムの一部みたいな感じになる。
この場合に限って言えばどちらにせよ名前のルックアップはやるのだからそのときにわかるだろうとは思うけど
静的解析を頑張らないという方針はあり得るんじゃないの。
2023/01/11(水) 00:38:29.47ID:s0T2WgwN
Gauche で検出されないエラーで (let ((0 1)) 0) みたいなのがあって、
実際にはオプティマイザが消去してしまうんだそうな。

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

まあそれぞれに事情があるので原理的に可能だからといってそうすべきだとも言えない気がする。
2023/01/11(水) 00:49:38.31ID:LBEzL6fs
0はシンボルじゃないから、文法解析を通しちゃ駄目だろw
2023/01/11(水) 01:29:07.80ID:/IOcm4EW
そういう手では絶対書かないだろう変なコードも、マクロ書いてるとまれによく発生するから困る
2023/01/11(水) 01:59:04.27ID:/IOcm4EW
カウンタ変数を捕捉更新しようとして、うっかり評価してしまったケースとか
2023/01/11(水) 02:21:26.04ID:z40MB/0w
多分(let ((i (+ i 1))) i)が化けたのかな
2023/01/11(水) 02:34:55.34ID:LWIYKuEk
letの時点でオプティマイザに通してんのかな
let系はlambdaまで落として((lambda(i) i) (+ i 1))とすれば間違えようがないと思うのだが
2023/01/11(水) 02:44:32.93ID:/IOcm4EW
エスパー大会か?
(let ((i (+ i 1)))
(another-macro i))

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

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

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

なんて文句を言いつつ、schemeでもついslibのdefmacroに手が伸びてしまうのだが
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))だけを見て決められない
レスを投稿する

5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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