2019-01-04

セッティング Amazon MBA Haskell コード センス レベル EmacsLisp いくつ 「-」 エスケープ みたい マニュアル Syntax Regular Expressions 「\」 ;=」 それぞれ ついで スペース ところ カフェ その後 やる気 howm ブログ

日常

帰宅した。

部屋の配線を問題なく終えたり、新しく購入した布団のセッティングしたり、Amazonで頼んでたものが届いたので使ってみたりした。

あとMBA冷たい・・・。

数学

目標に掲げたのでとりあえず三日ぐらいは頑張りたい。

Haskellコードとして学習内容を残しておこうとかいう数学どころか常識を理解していない人間

が発言しそうなことをし出したけど文章にすることによりアホすぎると判断し、やめることにした。

せいぜい電卓程度にしとこうね。

使った本。

高校数学+α:基礎と論理の物語

高校の途中から半分くらい引きこもりで授業ほとんど出てなくて(なお数学的センスもない)

算数もだが数学も全くできないので少しずつでもやり直していきたい。

その途中で数式(中学レベルぐらいしか想定されてない)の整形関数をEmacsLispで書いたりした。

EmacsLisp

正規表現で置換したいんだけどいくつかハマったりもして、例えば下記のコード

(replace-regexp-in-string "\s*\\([¥+¥-¥*/=<>\\(<=\\)\\(>=\\)]+\\)\s*" " \\1 " "1-3")

だが「1 - 3」になると想定して書いたが、実際には「1-3」でどうやら「-」は

「¥」でエスケープできない?みたいで、ならそのまま書こうとすると0-9みたいな表現になっているのか引っかからない。

調べてみるとマニュアルらしき所に記載されていた。特殊文字には含まれていないようだ。

34.3.1 Syntax of Regular Expressions

「\」でエスケープしたりしてみたけど特に効果はなかったので、下記のように順番を変えてみるとうまくいった。

(replace-regexp-in-string "\s*\\([-¥+¥*/=<>\\(<=\\)\\(>=\\)]+\\)\s*" " \\1 " "1-3")

これで数学、というか算数レベルの式の整形(空白を入れるだけだが)ができるようになった。

しかしながら、書いてて気がついたが、「-3」のような表現はどうなるんだろうか。

もちろん「- 3」 となり、「1+-3」も「1 +- 3」となってしまう。

どうすればいいんだ・・・(チンパン)。

そんなこんなで考え付いたのが下記コード。

(defun one-space-left-and-right-operator ()
  (interactive)
  (let* ((cur-str (buffer-substring (region-beginning) (region-end))))
    (delete-region (region-beginning) (region-end))
    (insert (replace-regexp-in-string "\\([-¥+¥*/=<>]+\\)- \\([0-9]+\\)" "\\1 -\\2"
                          (replace-regexp-in-string "\s*\\([-¥+¥*/=<>]+\\)\s*" " \\1 " cur-str)))))

一度でできないなら二度やればいい。それにしても名前がクソすぎる。

なお「>=」とかは一々書かなくても問題なかったことに気がついたので該当箇所は消した。

検証に利用したものは以下の二つでそれぞれ結果は想定通りとなった。

=> 1 + 2 - 3 * 4 / 5 < 6 > 7 <= 8 >= 9 = 10

=> 1 + -2 - 3 * 4 / -5 < 6 > -7 <= 8 >= 9 = 10

後ついでにスペースを全て消す関数も書いといた。実際にはありそうな気がするけど適当に探してなかったのでなかったと判断した。

これだけやるのにだいたい一時間かかった。何もいうまい。

さーて数学

といったところで人も混んできたのでカフェからは退散するなどした。

その後は動画みまくってた。自宅に帰った途端にやる気なくなるの草。

帰宅後

そういえばhowmが壊れて使えなくなってるんすよ。

というわけで直してみる。

今日やったこと

明日やること

comment:

Tweet

Home