|
最近のコメント
|
スーパーpre記法 シンタックスハイライト だと二重括弧が、註釈にならないみたい! これなしでLisp的なものを書くと変な事になる可能性が大 ← 自分
http://d.hatena.ne.jp/softether/20041001
電源がACだからじゃないか? と思った。
また、そう指摘する人もいる。
しかし、詳細が分かる範囲では、若干DCの人もいる様だ。
しかし、感電体験なしでACの人がいる事を考えれば、決してこの説が否定されたわけではない。
よく、configure と make までは普段使っているユーザでやって、make install だけ su なり sudo でやりましょう的な事が書いてあったりするけど意味あるのか?
まず、「普段使っているユーザ」に何でもできる様にしていない、って事実がある。これはどうしてか?
大きく考えると、間違えを犯す可能性があるからだと思う。これを仮定して、この「間違え」というのは、自分のオペミスか、悪い人に乗っとられてなにか、ってパターンがあると思う*1。
で、後者を考えると、「悪い人」がいつのまにか「普段使っているユーザ」の権限で make しているソースを書換えて、make install で自分でトロイの木馬の様なものをインストールてしまったら全々意味ないし、仮に root になる事のハードルが高いなら、イタズラされる事のハードルを下げているだけな気がする。
でも、前者を心配しているなら意味はあるかもしれないけど、プログラムをインストールしようとしているという目的が頭にあるなら、その時にそれ以外の事をやろうとするのか? 「rm -rf /」とか。僕が思いつくのは、目の前のコンピュータとは関係なしに、他人に声をかけられて席を外して、その間「悪い人」にイタズラされるという事かと思う。こういう危険があるかどうかは、環境によると思うけどログアウトなりして下さいって事になると思う。
何がいいたいかよく分からなんくなってきたけど、root で make install する事に特別メリットがある様には思えんのだよなぁ。root になる事のハードルが高いなら、ダウンロードから make install まで root でやるべきじゃないのかなぁ?
微分するやつ。web 見てもあんまり答え載ってなかった。
というかこれを sicp に出てきた関数だけでやったら、かなり面倒じゃないかと思う
という事で、かなりズルしてやった
(define-module deriv (use util.match) (use util.list) (use gauche.experimental.app) (use gauche.experimental.lamb) (export deriv)) (select-module deriv) (define variable? symbol?) (define (+ a b) (cond [(and (number? a) (number? b)) ((with-module scheme +) a b)] [(eqv? 0 a) b] [(eqv? 0 b) a] [else `(+ ,a ,b)])) (define (* a b) (cond [(and (number? a) (number? b)) ((with-module scheme *) a b)] [(or (eqv? 0 a) (eqv? 0 b)) 0] [(eqv? 1 a) b] [(eqv? 1 b) a] [else `(* ,a ,b)])) (define (** a b) (cond [(eqv? 0 b) 1] [(eqv? 1 b) a] [(eqv? 0 a) 0] [(eqv? 1 a) 1] [else `(** ,a ,b)])) (define (ope? exp) (memq exp '(+ - * / **))) (define (pri ope) (assoc-ref '((+ . 1) (- . 1) (* . 2) (/ . 2) (** . 3)) ope)) (define infix->prefix (letrec ((-> (^. [(? (.$ not list?) v1) v1] [(v1) (-> v1)] [(v1 o1 v2) `(,o1 ,(-> v1) ,(-> v2))] [(v1 o1 v2 o2 . rest) (if (>= (pri o1) (pri o2)) (-> `((,(-> v1) ,o1 ,(-> v2)) ,o2 . ,rest)) `(,o1 ,(-> v1) ,(-> `(,v2 ,o2 . ,rest))))]))) ->)) (define prefix->infix (letrec ((%add (lambda (pri-ope e res) (if (and (list? e) (ope? (car e)) (<= pri-ope (pri (car e)))) `(,@(-> e) . ,res) `(,(-> e) . ,res)))) (-> (^. [(? (.$ not list?) v) v] [(v) (-> v)] [((? ope? ope) l r) (let1 pri-ope (pri ope) ($ %add pri-ope l $ cons ope $ %add pri-ope r '()))] [malformed-exp (errorf "error: ~a" malformed-exp)]))) ->)) (define (%deriv var exp) (define %d (^. [(? number? _) 0] [(? variable? exp) (if (eq? exp var) 1 0)] [(x) (%d x)] [('+ a b) (+ (%d a) (%d b))] [('* a b) (+ (* a (%d b)) (* (%d a) b))] [('** u n) (* (* n (** u (+ n -1))) (%d u))] [exp (errorf "cannot differentiate: ~s with ~s" exp var)])) (%d exp)) (define (deriv var exp) ($ prefix->infix $ %deriv var $ infix->prefix exp)) (select-module user) (import deriv) ;; test (begin ($ print $ deriv 'x 'x) ($ print $ deriv 'x '(x)) ($ print $ deriv 'x '(x + 3)) ($ print $ deriv 'x '(x * y)) ($ print $ deriv 'x '(x + x)) ($ print $ deriv 'x '(2 * x * y)) ($ print $ deriv 'x '((x * y) * (x + 3))) ($ print $ deriv 'x '(2 * x + 4 * x)) ($ print $ deriv 'x '(x ** 4)) )
安倍晋三が総理になって、落されるまでが面白かった。まぁ、面白がっている場合かどうかは別として。
確かこの人が、総理になる前は北朝鮮に対して強行派みたいな感じで、それで名をはせた感じだった記憶がある
http://ja.wikipedia.org/wiki/%E5%AE%89%E5%80%8D%E6%99%8B%E4%B8%89
見たら経済制裁とかある
んでそれが当時、戦争相手というか対立する国を探していた米国の政策と一致したから調子が良かったらしいけど、後からイラクが大変になってきて北朝鮮はちょっと相手にしてられんくなってきて、安倍さん邪魔だからさようなら
という流れらしい。
*1:他にもあるだろうか?
ってのは、xmodmap 弄ってて名前だけ聞いた事あったけど、これにあった
http://www.paulgraham.com/symkey.html
あと SUPER は、パソコンのはwindowsキーになっているので、SUPERのままだなぁとか
http://d.hatena.ne.jp/propella/20070826/p1
話は変わるが、キャンプ中にまたアランさんの科学についての議論があって、いつもの事だけど僕は彼があまりにも科学を特別視しているのが理解できなかった。なぜたったこの数百年に起こった出来事が、そんなにも特別な事のように思えるのだろう。
これは結構そうだよなぁ、とか思っていたけど
http://pc.watch.impress.co.jp/docs/2006/0925/high43.htm
ケイ氏の目標は、子供の科学的・論理的思考力を高め、未来の大人社会の意識を改革することだ。
を考えると、科学っていっているのは物事に対しての考え方とか姿勢について言っているんじゃないかと思った。
そういう意味では、「この数百年に起った出来事」は、そういう考え方見につける為の練習にはなるのかもしれない。
#include <stdio.h> #include <stdlib.h> typedef struct List_ { int d; struct List_ *nx; } List; #define CONS(car,cdr) (&(List){.d=(car), .nx=(cdr)}) #define NIL NULL int main(void) { List *l1 = CONS(1,CONS(2,CONS(3,NIL))); List *i; for (i=l1; i; i=i->nx) printf("%d\n", i->d); return 0; }
とりあえず Lisp は、出来たからこれで Prolog とか何でも書けばいいと思う。
そういえば C99 だと、構造体のリテラルが書けたなぁと思って
typedef struct List_ { int d; struct List_ *nx; } List; List *l1 = &(List){.d=1, .nx= &(List){.d=2, .nx= &(List){.d=3, .nx=l1}}};
とか書いてみた。
l1 を グローバル変数とか static にすると、コンパイルできない。
「.nx=l1」のl1が定数でないからとの事。
コンパイラとしては l1 っていつの時点での l1 なの? って言いたいのかと思う。
これは、諦めてローカル変数でやってみる
#include <stdio.h> #include <stdlib.h> typedef struct List_ { int d; struct List_ *nx; } List; int main(void) { List *l1 = &(List){.d=1, .nx= &(List){.d=2, .nx= &(List){.d=3, .nx=l1}}}; List *i; for (i=l1; i; i=i->nx) printf("%d\n", i->d); return 0; }
無限ループするかな? とか思ったけど、「.nx=l1」の代入が、「l1 = ..」より早いらしく、変なメモリ見て死んだ。環境依存の動作かもしれない。
式の中で副作用が複数入ってたら、その実行順序は規定されないんだったっけ?
まぁとにかくダメ。
extern void *a; extern void *b; void *a = &b; void *b = &a;
は書ける。
でも、a,b を static にしようとすると、extern 書けなくなってダメ
でもそもそも、extern は相互参照させる為のものじゃない。
多分、関数のプロトタイプはあるけど、変数のプロトタイプは無いとかそういうのが問題。
構造体、共用体については、タグでこれを解決している。
どうしてもやりたかったら、実行時に代入するしかない?
でもそれだと、const にできなくなる。
上のやつだと、void * なのであまりに意味ないけど、ポインタ入りの構造体なら意味あるかも。
追記
http://d.hatena.ne.jp/RiSK/20101225/1293248494
仮定義というのがあるらしい。なるほどぉ
つか、C言語リファレンスマニュアルに載ってたと思ったけど、あんまり意味考えてなかった。
http://twitter.com/magosaki_ukeru/status/11240534530072576
http://twitter.com/magosaki_ukeru/status/11242858958823424
「ウィキ」ってのは、流れからして wikileaks っぽくて、こういう事を国務省がやっているってどうなんだろうか
僕とか、多分空気読めない系の人にとっては、言論の自由というか「何言っても良いですよ!」っていうポイントは重要だと思う
色々面白いものがあったけど、眠いのでこれだけ(動画も途中からだけど)。
http://www.youtube.com/watch?v=wBWabMcDPf4
なんというか凄いですね。
「自由の国」でもなんでもない的な。
(string-match "[^\\[]" "[") => nil (string-match "[\\[]" "[") => 0 (string-match "[^\\]]" "]") => nil (string-match "[\\]]" "]") => nil
最後のはおかしくないか?
% emacs --version GNU Emacs 23.2.1 Copyright (C) 2010 Free Software Foundation, Inc. GNU Emacs comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of Emacs under the terms of the GNU General Public License. For more information about these matters, see the file named COPYING.
|
最近のコメント
|