のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,899人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    元スレEmacs Part 52

    emacs覧 / PC版 /
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter

    201 = :

    それ環境変数かカーネルのオプション依存じゃなかったか?

    202 = :

    >>197です。cygwin環境下のbashやfindやpythonを使ってたからからうまくいかなかった
    だけで,windowsネイティブにビルドされたpython使うことで目的は達成できました。

    >>199
    俺の勉強不足ではあるんだけどpowershellは文化が違い過ぎてスクリプトの
    小さいカスタマイズにさえ時間がかかってしまうのでできれば避けてる。

    >>200
    せっかくなのでしばらく使ってなかったEmacs Lisp入門を読みながら作ってみます。
    なんやかんやでコピペ以外でまともにemacs lisp触るのはmule-2.3以来かな。
    歳とったなぁ

    >>201
    UNIX系はファイル名長255バイトの実装しか知らないです。

    204 = :

    27.1でgnus-namazu.elが動かなくなってしまった。
    苦労してnnir+namazuにしてみたが、微妙。

    205 = :

    27.1試して古いelispでバッククオート云々のエラーが出て26に戻し中
    互換性失う変更点だけどこかにまとめてある?

    206 = :

    新版が出たらNEWSを見るのは太古から変わらん
    * Incompatible Lisp Changes in Emacs 27.1
    だけでなく新機能を知るためにも必須

    207 = :

    >>206
    ありがとう!
    ** Old-style backquotes now generate an error.
    に書いてあった。
    が、いままでWarning出ていたのか……気づかんかった……orz

    208 = :

    (‘ (hoge))のような書き方の事か
    エラーにする事もないと思うがな
    '(a b c)と(quote (a b c))
    (a b c)と(‘ (a b c))で一貫性がある
    警告出すぐらいが丁度良い

    209 = :

    いや、quoteって書かないと一貫性ないやん

    210 = :

    書くならbackquoteだが長過ぎる
    前者は構文でそれに対応した関数が存在するという一貫性の事を言っていた

    211 = :

    いやquoteは見た目は関数でも関数じゃないし
    そもそも ` を ‘ と書いてるし根本的に……

    212 = :

    >>211
    スペシャルフォームと言いたいんだろ?
    スペシャルフォームは一部の引数を評価しないだけの、ただの関数だ
    バッククオートはスマホで入力してるから何かおかしいなと思いながら変な記号を使ってしまったよ

    213 = :

    NEWS.19 だからもう30年以上前か
    *** You can now use Common Lisp syntax for the backquote and comma
    macros. Thus, you can now write `(x ,y z) instead of (` (x (, y) z)).

    NEWS.24 でははっきり Please remove とあるだけでなく
    The most common cause of trouble seems to be an old-style backquote
    まで書いてある
    ** Support for "old-style" backquotes, obsolete for 10+ years, has
    been further reduced. Now a backquote not followed by a space is
    always treated as a "new-style" backquote. Please remove all
    "old-style" backquotes from your code. If your code uses backquotes
    as documented in the Elisp manual, and compiles without warning, then
    you have nothing to do in this regard. Code not following the
    appropriate conventions may fail to compile.

    warning で will be remove soon と言ってた
    Warning: !! The file uses old-style backquotes !!
    This functionality has been obsolete for more than 10 years already
    and will be removed soon. See (elisp)Backquote in the manual.

    もう十分だよ

    そもそも 30年 も前から
    `(a b ,(+ 2 1) ,@(list 2 1))
    と書けたのに
    (` (a b (, (+ 2 1)) (,@ (list 2 1))))
    なんてわざわざ書く意味がわからん

    214 = :

    それからスペシャルフォームは関数じゃないぞ
    Lispにおいては厳密に区別されるぞ
    純Lispで区別されてるぞ
    スペシャルフォームを関数の一種だなんて言うと恥ずかしいぞ

    215 = :

    関数の一種はアウト
    関数みたいなものならセーフだったのに

    217 = :

    >>214
    俺がLispを実装したときに、スペシャルフォームも普通に関数として実装した
    そもそもEmacsのソース見ればそんなこと一目瞭然だ

    218 = :

    CommonLispに毒されきった身からすれば、
    `a

    (backquote a)
    なんであって
    `

    backquote
    に置換されるのは気持ち悪いということだろ。’aが(quote a)なんだから、一貫性という意味で(’a)も(quote a)となるようにしたら大混乱だろ。

    219 = :

    ちなみに、
    (defmacro backquote (structure) ...)
    (defalias '\` (symbol-function 'backquote))
    は、27.1でも定義してあって
    (backquote ,@(+ 1 2 3)) => 6
    はエラーにならずに実行できる
    俺の書き込みが色々間違ってたようだが、要するにまとめると
    '(a b c) => (a b c)
    `(a b c) => (a b c)
    (quote (a b c)) => (a b c)
    (backquote (a b c)) => (a b c)
    (' (a b c)) エラー
    (` (a b c)) 27.1からエラー
    エラーになった事でむしろちゃんと一貫した結果になった

    220 = :

    スペシャルフォームは関数の一種ではない
    あえて言うなら、関数がスペシャルフォームの一種

    221 = :

    「関数の引数はすべて評価される」と言うルールに抵触するから特殊形式は関数で無い。

    222 = :

    220以上のことを言ったらどうだ

    223 = :

    スペシャルフォームの中で全ての引数が評価されるものを関数と呼ぶ、でOK?

    224 = :

    盛大に恥をさらした >>217 は今頃どこで何をしているだろう……

    225 = :

    Lispには一見Cなんかの言語の変数の様に見えるけど変数じゃ無いとか、Cの関数みたいだけと関数じゃ無いとか…
    そう言うの多いよ。

    226 = :

    てか、Emacs のスレなのになんで Lisp 一般の話になってるん。

    227 = :

    Emacsの仕様変更にケチつけたやつがいてな
    そいつがLispの半可通だったのがケチつけた原因だったから
    迷惑で恥ずかしい、いや恥知らずな奴だった

    229 = :

    >>224
    呼んだか?
    何も間違ったこといってないぞ
    defvarで定義された変数はスペシャル変数という
    スペシャルフォームはスペシャルなフォームだ
    他にも式(expression)とも言ったりする
    (スペシャルじゃない)フォーム
    expression
    関数
    を正確に違いを定義して教えてくれ

    230 = :

    こんだけ偉そうに教えろと言っといて論破されたら大草原の小さな家

    231 = :

    package-installができる前から使っていて、古いまま $HOME/lispに置いてあった
    python-mode.el の中にバッククォートが使われていたのでした。なお最新verでは
    そんな記述はもうないので問題なし。以上、報告終わり

    C言語が一番なじんでいる身としてはLisp処理系ってどれにどっぷりつかればいいのかわからなかったけど
    結局 elisp を理解するのが「自分にとって」一番役に立つと思い知らされた一件でした

    232 = :

    スペシャルフォームを関数の一部だとか関数で書いたとかいう奴は
    まず defun で quote 等価の my-quote を書いて実証して欲しいな

    233 = :

    >>232
    関数がスペシャルフォームの一部というのは良い感じか

    234 = :

    例えば def-special-form ってのがあったとする
    quote っぽいスペシャルフォーム my-quote が

    (def-special-form my-quote (arg) arg)

    みたいに定義できるとして
    car っぽい関数 my-car なら cdr 部無視すればこんな感じで書ける

    (def-special-form my-car (car &rest cdr) (eval car))

    これは、関数がスペシャルフォームの一部である、という一例と言えなくもない

    235 = :

    >>233
    よくない感じ。スペシャルフォームはスペシャルフォームは関数じゃないというlispの文脈でつかわれるものだから。対して関数はlispじゃない文脈でつかえるから。

    236 = :

    Lispの関数の話をしていたのにソース言語の関数にすりかえですか
    困ったらこうくるだろうと予想してた通りだね
    「俺はLispの話はしていない」ってご飯論法の仲間だよな

    237 = :

    初心者が Lisp の実装を勉強する場合、実装言語の関数と Lisp の関数を混同して矛盾、理解がおかしくなることは良くある。
    メタ言語と対象言語の概念は区別せんとね。

    238 = :

    >>235
    まあこの世に同じ物なんてないんだけどね
    コンテキストは大抵違う

    239 = :

    そもそも Info の Elisp の 13.1 What Is a Function? に

    > Certain function-like objects, called “special forms” and “macros”,
    >also accept arguments to carry out computations. However, as explained
    >below, these are not considered functions in Emacs Lisp.

    スペシャルフォームは関数じゃないと明言されてるし

    >Here are important terms for functions and function-like objects:

    >“primitive”
    > A function which is callable from Lisp but is actually written in
    > C. Primitives are also called “built-in functions”, or “subrs”.
    > Examples include functions like ‘car’ and ‘append’. In addition,
    > all special forms (see below) are also considered primitives.

    ビルトイン関数やスペシャルフォームのような C で書かれたものには
    primitive という総称がちゃんとある

    Info すら見ないで Emacs Lisp を語らないで欲しい

    240 = :

    「info を読もう」か良いね。
    これにて終了。

    241 = :

    >>238
    うん。そこをビシッとついてギャフンというような議論がみたい。
    スペシャルフォームは関数だという主張はelispのあるべき姿というコンテキストなので、現在のelispから離れていても問題ないんだけど、主張してる方も反論してる方もさっぱり分かってない。なおかつもとのbackquote のはなしとも全然関係ない方向。

    242 = :

    べつに関数そのものだなんて読み方は誰もしないと思うよ
    なぜならbackquoteとつながってる話だから
    コンテキストを意識しないとあかんよチミ

    243 = :

    関数とスペシャルフォームの違いという定義すら知らない「恥ずかしい人」から
    Lispの関数と処理系記述言語で記述した関数を混同してごまかそうとする「恥知らず」を経て
    俯瞰者視点を装って当事者じゃないふりでごまかそうとする「厚顔無恥」へランクアップ

    244 = :

    ギャフン!

    245 = :

    へっ?

    246 = :

    “ スペシャルフォームは関数の一種だ”
    このフレーズを正当化しようとし続ける姿に涙が🤣

    247 = :

    >>243
    その、関数とスペシャルフォームの違い、を定義してみてよ

    248 = :

    定義っていうか、参考になるページを誰かが貼っておわりみたいな話題じゃないの?

    249 = :

    上で Emacs の info にあるって言ってたろう。

    250 = :

    emacs を起動して
    C-h i と押すと Info が起動する

    * Elisp: (elisp). The Emacs Lisp Reference Manual.

    という行に移動して ENTER
    m を押して、ミニバッファに functions と入力して ENTER
    m を押して what と入力して ENTER
    これで

    13.1 What Is a Function?

    が表示されるはず
    Info の使い方は ? を押すと表示されるぞ


    ←前へ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / emacs一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について