soukouki’s diary

誰かの役に立つ記事をかけたらいいなあ

サイ本読んだ感想(17章まで)

うーーん、

気に入らないところ

  • functionと書かないといけないとこ
  • 行末の;
    • CやJavaかよ!
      • まあ省略することはできるみたいだけど地雷が待ってるので避けとく
  • 関数名が長い
    • getElementById documentなんか長くね?
  • 言語に対応しきれていないブラウザ達
    • ・・・

まあトランスパイラ使えって言われたらどうしようもないですけど。

気に入ったところ

  • htmlとかとの連携がいい

この先使い込むに連れてだんだん増えていく(と思う)

gitでローカルブランチを追跡ブランチにする

検索しても出てこなかったのでメモとしても。

ワンライナーです。

少し無駄なことやってるかもです。

git push origin [branch]; git checkout master; git branch -d [branch]; git checkout --track origin/[branch]

pushして、一旦ブランチを消して、新しく追跡ブランチを作っているだけです。


git version 2.8.1.windows.1

git commit --amendの取り消し(powershell)

powershellユーザーです。

ここのページを見ながら、コピペでぺっと・・・

$ git reset --soft HEAD@{1}
error: unknown switch `e'
usage: git reset [--mixed | --soft | --hard | --merge | --keep] [-q] [<commit>]
   or: git reset [-q] <tree-ish> [--] <paths>...
   or: git reset --patch [<tree-ish>] [--] [<paths>...]

    -q, --quiet           be quiet, only report errors
    --mixed               reset HEAD and index
    --soft                reset only HEAD
    --hard                reset HEAD, index and working tree
    --merge               reset HEAD, index and working tree
    --keep                reset HEAD but keep local changes
    -p, --patch           select hunks interactively
    -N, --intent-to-add   record only the fact that removed paths will be added later

ファッ!

git reset --soft "HEAD@{1}"でいけます。

少しclojureに触れてみた感想

ringとか使ってました。

感想は「始めやすいlisp」という感じでした。

同じことをrubyschemeclojure(末尾再帰最適化なし・あり)で書いてみました(短いのであまり参考にはならないかもしれませんが・・・)


def power(a, b)
    power_i(a, a, b)
end

def power_i(result, a, b)
    if b <= 1
        result
    else
        power_i(result*a, a, b-1)
    end
end

# power(2, 4) => 16
# power(1, 10000) => SystemStackError: stack level too deep

2**4でいいじゃん

(define (power a b) (power-i a a b))

(define (power-i result a b)
    (if (<= b 1) result (power-i (* result a) a (- b 1))))

; (power 2 4) => 16
; (power 1 10000) => 1

初心者にはなんかややこしそうに見えます。

; シンボルをチェックするので依存するやつを先に書く
(defn power-i [result a b]
    (if (<= b 1) result (power-i (* result a) a (- b 1))))

(defn power [a b]
    (power-i a a b))

; (power 2 4) => 16
; (power 1 10000) => StackOverflowError   clojure.lang.Numbers.minus (Numbers.java:136)

; 末尾再帰最適化バージョン

(defn power-m [a b]
    (loop [result 1, b b]
        (if (<= b 0) result (recur (* result a) (- b 1)))))

; (power-m 2 4) => 16
; (power-m 1 10000) => 1

括弧の種類が複数あって初心者に優しいです。でも括弧の種類を変えるだけならschemeにもできる

今回のだとわからないですが、書き方によればリストなんて意識せずに書けます。


clojureファンの言い分

ruby 2.3.1p112 (2016-04-26 revision 54768) [x64-mingw32] Gauche scheme shell, version 0.9.4 [utf-8,wthreads], i686-pc-mingw32 Leiningen 2.7.1 on Java 1.8.0_111 Java HotSpot(TM) 64-Bit Server VM

文章の仕上がり微妙だな・・・


追記(2017-02-11)

rubydef power(a, b)

scheme(define (power a b)

clojure(defn power [a b]

括弧の囲い方がrubyとかに近いからかな?