Lisp Scheme Part41 (855レス)
Lisp Scheme Part41 http://mevius.5ch.net/test/read.cgi/tech/1531587928/
上
下
前
次
1-
新
通常表示
512バイト分割
レス栞
544: デフォルトの名無しさん [] 2022/11/07(月) 12:52:23.10 ID:D9DaYQB4 svigiはなんて読めばいいの http://mevius.5ch.net/test/read.cgi/tech/1531587928/544
545: デフォルトの名無しさん [] 2022/11/07(月) 12:52:44.37 ID:D9DaYQB4 木曽路的な http://mevius.5ch.net/test/read.cgi/tech/1531587928/545
546: はちみつ餃子 ◆8X2XSCHEME [sage] 2022/11/07(月) 13:59:37.65 ID: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 http://mevius.5ch.net/test/read.cgi/tech/1531587928/546
547: デフォルトの名無しさん [] 2022/11/07(月) 16:54:40.26 ID:D9DaYQB4 >>546 ありがとう 音素と発音記号は手堅いね http://mevius.5ch.net/test/read.cgi/tech/1531587928/547
548: デフォルトの名無しさん [sage] 2022/11/07(月) 20:41:51.67 ID:kjCGP1Rc >>546 ここでアイスランド語が言及されるとは驚きました、アイスランド語は実に濃ゆい言語ですね 教科書(Johns Hopkins) を買ったけれども、当然 1 ワードも読めませんでした http://mevius.5ch.net/test/read.cgi/tech/1531587928/548
549: デフォルトの名無しさん [sage] 2022/12/12(月) 12:44:02.44 ID:asaSA4nl 「命の輝き君」がマンホールの蓋に 轢死体と見分けがつかなくなってしまう [725951203] https://hayabusa9.5ch.net/test/read.cgi/news/1670487647/ http://mevius.5ch.net/test/read.cgi/tech/1531587928/549
550: デフォルトの名無しさん [sage] 2023/01/08(日) 12:42:17.07 ID:hPHqQTwv schemeはじめましたなんだけど [lisp1.0+]label, [cl]labels = letrec + let name [cl]flet ((f (args) fletbody)) body = let ((f (lambda (args) body)) letbody) って理解でいいの? http://mevius.5ch.net/test/read.cgi/tech/1531587928/550
551: はちみつ餃子 ◆8X2XSCHEME [sage] 2023/01/08(日) 17:21:31.97 ID:/n9SAwLy おおよそ似た雰囲気では書けたりするのかもしれないけど 単純に対応してるわけじゃなかったりもするからいいかどうかは状況によるんじゃないの。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/551
552: デフォルトの名無しさん [sage] 2023/01/08(日) 18:49:11.56 ID: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のこれバグ? http://mevius.5ch.net
/test/read.cgi/tech/1531587928/552
553: デフォルトの名無しさん [sage] 2023/01/09(月) 03:51:35.47 ID: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 http://mevius.5
ch.net/test/read.cgi/tech/1531587928/553
554: デフォルトの名無しさん [sage] 2023/01/09(月) 16:15:24.76 ID:2yNmR2Eh | 彡⌒ミ \ (´・ω・`)名前のシャドウ化辺りって自分で処理系実装した子はわかると思うけどハゲる要因だから絶対関わらない方がいいと思う (| |):::: (γ /::::::: し \::: http://mevius.5ch.net/test/read.cgi/tech/1531587928/554
555: デフォルトの名無しさん [sage] 2023/01/09(月) 16:36:52.10 ID:0CyucYY1 eclは有名だけど、embeddableの名前通りの用途で1MBちょいな処理系だから、そういうものと割り切って使うべき funcallが冗長ならletのbodyにfuncallをconsするだけのmy-fletを作ればいいじゃない (さらなる災禍を招きそう) http://mevius.5ch.net/test/read.cgi/tech/1531587928/555
556: デフォルトの名無しさん [sage] 2023/01/09(月) 16:57:44.09 ID:0CyucYY1 eclのlocked packageなる概念やcompile-timeの意味論に関連しそうなissue 2 yeas agoだけど https://gitlab.com/embeddable-common-lisp/ecl/-/issues/574 http://mevius.5ch.net/test/read.cgi/tech/1531587928/556
557: デフォルトの名無しさん [sage] 2023/01/10(火) 02:33:32.35 ID:/i8qCr3o >>553 特定の名前の解決を決め打つ言語は多いし、そういうポリシーもありだと思う 普通でないのはcondition(warning)を挙げないところ 決め打つ名前(locked package?)が分かってる限りは、flet/labelsのレキシカル束縛リストから拾った名前がbody内の呼び出しformのcarに存在するか、ランタイムコストの無い自明な静的解析でconditionを挙げられるはず http://mevius.5ch.net/test/read.cgi/tech/1531587928/557
558: デフォルトの名無しさん [sage] 2023/01/10(火) 03:18:54.37 ID:/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でテストはしたけど、スマホから手打ちなので変だったらごめん http://mevius.5ch.net/test/read.cgi/tech/1531587928/558
559: はちみつ餃子 ◆8X2XSCHEME [sage] 2023/01/10(火) 13:31:12.96 ID:TxpPtfKm >>557 スクリプト言語 (処理系) 的な想定だと実行開始時にテキストの解釈から毎回やるので 静的解析もランタイムの一部みたいな感じになる。 この場合に限って言えばどちらにせよ名前のルックアップはやるのだからそのときにわかるだろうとは思うけど 静的解析を頑張らないという方針はあり得るんじゃないの。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/559
560: はちみつ餃子 ◆8X2XSCHEME [sage] 2023/01/11(水) 00:38:29.47 ID:s0T2WgwN Gauche で検出されないエラーで (let ((0 1)) 0) みたいなのがあって、 実際にはオプティマイザが消去してしまうんだそうな。 文法の解析で通したものをオプティマイザがエラーとして弾くのも変な話だし、 オプティマイザが走査することがわかっているものを前段階でもチェックするのは二度手間だし、 オプティマイザを密結合してしまうのも保守しづらいし…… という葛藤があるのはわかる。 まあそれぞれに事情があるので原理的に可能だからといってそうすべきだ
とも言えない気がする。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/560
561: デフォルトの名無しさん [sage] 2023/01/11(水) 00:49:38.31 ID:LBEzL6fs 0はシンボルじゃないから、文法解析を通しちゃ駄目だろw http://mevius.5ch.net/test/read.cgi/tech/1531587928/561
562: デフォルトの名無しさん [sage] 2023/01/11(水) 01:29:07.80 ID:/IOcm4EW そういう手では絶対書かないだろう変なコードも、マクロ書いてるとまれによく発生するから困る http://mevius.5ch.net/test/read.cgi/tech/1531587928/562
563: デフォルトの名無しさん [sage] 2023/01/11(水) 01:59:04.27 ID:/IOcm4EW カウンタ変数を捕捉更新しようとして、うっかり評価してしまったケースとか http://mevius.5ch.net/test/read.cgi/tech/1531587928/563
564: デフォルトの名無しさん [sage] 2023/01/11(水) 02:21:26.04 ID:z40MB/0w 多分(let ((i (+ i 1))) i)が化けたのかな http://mevius.5ch.net/test/read.cgi/tech/1531587928/564
565: デフォルトの名無しさん [sage] 2023/01/11(水) 02:34:55.34 ID:LWIYKuEk letの時点でオプティマイザに通してんのかな let系はlambdaまで落として((lambda(i) i) (+ i 1))とすれば間違えようがないと思うのだが http://mevius.5ch.net/test/read.cgi/tech/1531587928/565
566: デフォルトの名無しさん [sage] 2023/01/11(水) 02:44:32.93 ID:/IOcm4EW エスパー大会か? (let ((i (+ i 1))) (another-macro i)) another-macroは副作用目的で自明にiに展開したか、乗法的な関数を呼んだ(iの初期値0*n=0) http://mevius.5ch.net/test/read.cgi/tech/1531587928/566
567: デフォルトの名無しさん [sage] 2023/01/11(水) 03:33:43.09 ID:4gRHy1NM >>565 gancheは知らんけど、さすがにletはプリミティブな事が多いかと むしろ最適化で読み飛ばすならlambdaまで還元してしまってはダメで、LETをヒューリスティックに認識する必要がある 仮に評価順を示す為にバッククォートでわざとらしく書くと `(let ((,index ,(1+ stride))) ,(* index stride)) ; (LET ((0 1)) 0) (に等価な)展開とかがありがちかな 特に例に意味は無かったってオチだったりして http://mevius.5ch.net/test/read.cgi/tech/1531587928/567
568: デフォルトの名無しさん [sage] 2023/01/11(水) 03:56:23.35 ID:/IOcm4EW defmacro/macroexpand方式だと特にだけど、(let ((0 1)) 0)みたいな残骸から推論する技能はとても大事に思う 書く時もそうだけど、人が書いたモノの後始末なら前提知識が無いのでなおさら これだけ想像を膨らませてくれる貴重な(let ((0 1)) 0)すら消し飛ばされるならもうお手上げ なんて文句を言いつつ、schemeでもついslibのdefmacroに手が伸びてしまうのだが http://mevius.5ch.net/test/read.cgi/tech/1531587928/568
569: デフォルトの名無しさん [sage] 2023/01/11(水) 06:03:42.65 ID:/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
))だけを見て決められない http://mevius.5ch.net/test/read.cgi/tech/1531587928/569
570: デフォルトの名無しさん [sage] 2023/01/11(水) 06:21:34.50 ID:/IOcm4EW 一応値については正しいというだけで、もしbodyに(exit)や大域脱出が入ってても無視するのか?という問題はある ill-formedな>>560すら無視するのだから、当然well-formedな(exit)も無視するのが自然だけど、実際のところはgaucheに訊いてください http://mevius.5ch.net/test/read.cgi/tech/1531587928/570
571: はちみつ餃子 ◆8X2XSCHEME [sage] 2023/01/11(水) 17:03:18.22 ID:s0T2WgwN >>570 念のために補足しておくけど >>560 のケースは捕捉されないエラー (現時点では捕捉することを意図的に諦めているエラー) であって Gauche の仕様として正しいというわけではないよ。 結果は未定義。 直接的に書いてしまった場合にしてもマクロ展開結果でこうなるにしても あくまでも誤っているプログラムだからね。 言いたかったのは >>557 に対してで、原理的に出来てもやらない事情の例として (私は ECL のことは全然知らないので) Gauc
he での例を出したってだけ。 http://mevius.5ch.net/test/read.cgi/tech/1531587928/571
572: デフォルトの名無しさん [sage] 2023/01/11(水) 17:40:33.93 ID:/IOcm4EW >>571 どうも、俺のも原理的には…という同じ意図の話だよ eclやgaucheが有名実装では最もアグレッシブな感じなのかな? (declaim (optimize (speed 0) debug safety) が外せない俺には怖くて触れないよ http://mevius.5ch.net/test/read.cgi/tech/1531587928/572
573: デフォルトの名無しさん [sage] 2023/01/11(水) 18:02:49.87 ID:/IOcm4EW なおeclのlocked package?の件、標準の宣言を全て付けても有効な模様… http://mevius.5ch.net/test/read.cgi/tech/1531587928/573
メモ帳
(0/65535文字)
上
下
前
次
1-
新
書
関
写
板
覧
索
設
栞
歴
あと 282 レスあります
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.010s