(wat-aro)

生きてます

MySQL5.7.11でユーザを追加できない.

環境はdebian8, mysql5.7.11. mysql> grant all on blog_app.* to 'foo'@localhost identified by 'hogehoge'; ERROR 1054 (42S22): Unknown column 'password_last_changed' in 'mysql.user' 以上のようなエラーが出ました. 対処方法は以下になります. $ …

Rubyの正規表現でそれぞれのケースへの変換

今日は正規表現に苦しんだので練習しました。 snake_case、camel_Case、Pascal_Caseのそれぞれへの変換です。 capitalizeなくても書けるけど一応。 m[0].upcase + m[1..-1]はちょっと汚いですしね。 Rubular使えばテストケースが期待通りのマッチになるまで…

FLEXBOX FROGGYチートシート

FLEXBOX FROGGYをクリアしたのでやりながらまとめたものを貼ります. Flexboxはここでやった部分しかしりませんが,これだけでも便利ですね. コンテナ全体 justify-content 水平方向への寄せなど flex-start: 左寄せ flex-end: 右寄せ center: 中央寄せ spa…

fjordのリモートインターンに参加しました

昨日別ブログにも書きましたが,向こうはやめてこっちに書いていきます. コードを書いてごはんが食べられるように頑張ります.

プログラミングの基礎を読み終わった.

プログラミングの基礎 (Computer Science Library)作者: 浅井健一出版社/メーカー: サイエンス社発売日: 2007/03メディア: 単行本購入: 17人 クリック: 409回この商品を含むブログ (126件) を見る 演習問題をほぼ解いて一週間くらいかかりました. タイトル…

プログラミングの基礎 16.4 最初の完動プログラム

プログラミングの基礎で作ったメトロネットワーク最短路問題の解答. ダイクストラ法を使い求める. ここまでのメトロネットワーク最短路問題に関係する問題の解答すべてここに書いてある. (* サポートページからダウンロードしたglobal_ekimei_listとgloba…

OCamlの無名関数は再帰を定義できない?

わたろーです. 今プログラミングの基礎 (Computer Science Library)を読んでいます. これはOCamlとデザインレシピでプログラミングの基礎を学ぶという内容なのですが, 名前のない関数という節で気になる文章がありました. 14.4 名前のない関数 p145 名前…

プログラミング初心者がSICP(計算機プログラムの構造と解釈)を読んでみた

読む前の状態と動機 読み始めた時点でプログラミング歴約1年 もうひとつのscheme入門でプログラミングに入門するも,高階関数で挫折. Ruby本二冊,Rails Tutorialを二周. 他読み始めたけど途中で飽きた本が何冊か. 仕事(非IT)が忙しく,プログラミング…

SICP 問題 5.50

4.1節の超循環評価器を5.5で作った翻訳系でコンパイルする. 問題5.50 – SICP(計算機プログラムの構造と解釈)その302 : Serendip - Webデザイン・プログラミング http://himoiku.cocolog-nifty.com/blog/2008/07/sicp550_f385.html ここを参考にしました.…

SICP 問題 5.49

compileとassembleを機械計算として持ち,REPLを行うレジスタ計算機を設計する. はじめ,assembleを命令列の上でやる方法がわからずに,compile-and-assembleという手続きを作り, それを機械演算として登録してRCEPLを実装したが, 問題5.49 – SICP(計算…

SICP 問題 5.48

ECEVALのrepl上でコンパイル出来るようにする. これで動くかなって思ったら動いた. ただトレースした命令列を見ると, apply-dispatchからprimitive-procedureにジャンプせずに先頭に戻っている. なぜそうなるのかわからない. ;; 環境を拡張してprimitiv…

SICP 問題 5.47

コンパイルした手続きから積極制御評価器で定義した手続きを使えるようにする. (define (compile-procedure-call target linkage) (let ((primitive-branch (make-label 'primitive-branch)) (compiled-branch (make-label 'compiled-branch)) (compound-br…

SICP 問題 5.46

5.45と同様に今度はフィボナッチ数列の計算でそれぞれ比べる. gosh> (define fib ;;一回目以外は省略 (make-machine (list (list '< <) (list '- -) (list '+ +)) '(controller (assign continue (label fib-done)) fib-loop (test (op <) (reg n) (const 2…

SICP 問題 5.45

コンパイルした階乗計算,積極制御評価器の階乗計算,特殊目的計算機のプッシュ数,最大スタック深さを調べて比較する. まずはコンパイルしたものから gosh> (compile-and-go '(define (factorial n) (if (= n 1) 1 (* (factorial (- n 1)) n)))) (total-pu…

SICP 問題 5.44

基本手続きの名前を含む式の正しいコードを翻訳するため,翻訳時環境を調べるようにする. (cond ((self-evaluating? exp) (compile-self-evaluating exp target linkage)) ((variable? exp) (compile-variable exp target linkage ct-env)) ((quoted? exp) …

SICP 問題 5.43

内部定義を吐き出してコンパイルする. まず4.16で作ったscan-out-definesがこれ. (define (scan-out-defines body) (define (split-defines proc-body defines non-defines) (cond ((null? proc-body) (cons (reverse defines) (reverse non-defines))) ((…

SICP 問題 5.42

compile-variableとcompile-assignmentを文面アドレスを使った検索に対応 (define (compile-variable exp target linkage ct-env) (let ((address (find-variable exp ct-env))) (end-with-linkage linkage (if (eq? address 'not-found) (make-instruction-…

SICP 問題 5.41

翻訳時環境に対する変数の文面アドレスを返す手続きfind-variableの実装 (define (find-variable var ct-env) (define (env-loop frame-address env) (define (scan variable-address frame) (cond ((null? frame) (env-loop (+ frame-address 1) (enclosing…

SICP 問題 5.40

翻訳時環境を維持し,compile-lambda-bodyで拡張するように変更する. (define (compile-lambda-body exp proc-entry ct-env) ;; ct-envを追加 (let ((formals (lambda-parameters exp))) (append-instruction-sequences (make-instruction-sequence '(env p…

SICP 問題 5.39

文面アドレスと実行時環境とり値を検索するlexical-address-lookupと 値を変更するlexical-address-set!を実装する. ;;; 文面アドレスを使って変数の値を探す (define (lexical-address-lookup lex-add r-env) (let ((frame (frame-values (list-ref r-env …

SICP 問題 5.38d

+と*について任意個の被演算子の式が使えるように拡張する. ここに書いた手続きを変更もしくは追加する. 3つ以上の引数の時はarg1に畳み込んで計算していく. (define (compile-open-code exp target linkage ct-env) (cond ((= (length exp) 3) (compile…

SICP 問題 5.38c

元のcompileによる出力と5.38abでcompile-open-codeを追加したコンパイラの出力を比べる. 命令列が約半分になっている. compile-open-codeを追加したコンパイラの出力 ((env) (val) ((assign val (op make-compiled-procedure) (label entry1) (reg env)) …

SICP 問題 5.38ab

+ - * = はopen-codeとして (reg val (op +) (reg arg1) (reg arg2)) の形で処理できるようにする. (define (open-code? exp) (memq (car exp) '(= * - +))) (define (compile exp target linkage) (cond ((self-evaluating? exp) (compile-self-evaluating…

SICP 5.5.5 翻訳系

schemeの式をレジスタマシンのシミュレータの命令列に翻訳するコード. 理解するためにコメントを出来るだけつけた (load "./eval.scm") ;;; make-branchのための手続き (define label-counter 0) (define (new-label-number) (set! label-counter (+ 1 labe…

SICP 問題 5.37

preservingを修正して常にsaveとrestoreをさせ,修正前と後を比較する. 修正前 (define (preserving regs seq1 seq2) (if (null? regs) (append-instruction-sequences seq1 seq2) (let ((first-reg (car regs))) ;first-regが (if (and (needs-register? s…

SICP 問題 5.36

本文の被演算子の適用順はoperandをreverseしてから連結していくので右から左になっている. これを左から右に変更する. ;;; 最初のreverseをなくす (define (construct-arglist operand-codes) (if (null? operand-codes) (make-instruction-sequence '() …

SICP 問題 5.35

本文の図5.18 の翻訳出力の例から翻訳前の式を導く. 答え (compile '(define (f x) (+ x (g (+ x 2)))) 'val 'next) 実行結果(整形済み) ((env) (val) ((assign val (op make-compiled-procedure) (label entry12) (reg env)) (goto (label after-lambda1…

SICP 問題 5.34

反復的階乗手続きをコンパイルし,再帰版との本質的な違いを示せ. 反復的階乗手続きの内容を説明する. (compile '(define (factorial n) (define (iter product counter) (if (> counter n) product (iter (* counter product) (+ counter 1)))) (iter 1 1…

SICP 問題 5.33

以下の2つの翻訳結果を比較してその相違を説明する. (compile '(define (factorial n) (if (= n 1) 1 (* (factorial (- n 1)) n))) 'val 'next) (compile '(define (factorial n) (if (= n 1) 1 (* n (factorial (- n 1))))) 'val 'next) 一つ目を出力して…

SICP 問題 5.32

a: 演算子が記号である場合の組み合わせの式を別のクラスと認識し,そういう式を最適化する. operatorがvariableであればenvをsaveしない. ev-application (save continue) (assign unev (op operands) (reg exp)) (assign exp (op operator) (reg exp)) (…