2008/11/23

【JavaScript】インタラクティブなJavaScript実行【これは便利】

JavaScriptのシェル改良版
http://muumoo.jp/news/2008/06/21/0jssh.html

[javascript]InteractiveJS その2
http://d.hatena.ne.jp/nak2k/20050911/p1

【scheme】【javascript】Hello world その2

schemeでHello world!!
参考はこちら
http://www.shido.info/lisp/scheme4.html

(define hello
  (lambda (name) 
    (string-append "Hello " name "!")))
(hello "valvallow")

出力結果
"Hello valvallow!"

(cons "Hello world" '())


出力結果
("Hello world")

(define sum3
  (lambda (a b c)
    (+ a b c)))
(sum3 1 2 3)


出力結果
6


最後の関数はJavaScriptで書くとこんな感じ?
あえてグローバル空間汚すと
sum3 = function (a, b, c) { return a+b+c; };
sum3(1, 2, 3)
//出力結果 6


定義してそのまま実行して、グローバル空間汚さないんだったら
(function () { return function (a,b,c) { return a+b+c; }; })()(1,2,3)
//出力結果 6


ってか。

【scheme】Hello world

schemeでHello world!!


参考はこちら
http://www.shido.info/lisp/scheme4.html


schemeは関数型言語
最近流行(?)のHaskellは純粋関数型言語らしいが、schemeはどうやら非純粋関数型言語らしい。

(define hello "Hello world") 
(define sayHello
    (lambda () hello)) 

hello
(sayHello)


実行結果
"Hello world"
"Hello world"


正直まだコメントの書き方も、変数や関数の名前付けの傾向もわかりませんw


(define hello "Hello world") ⇒ defineは引数を2つ取る組み込み関数
(define sayHello ⇒ 1つ目の引数がグローバル変数の名前
(lambda () hello)) ⇒ 2つ目の引数が変数の中身
⇒ ここでは1行目で定義したhelloグローバル変数の中身を出力するようにした
hello ⇒ 1行目で定義した変数の中身が出力される
(sayHello) ⇒ 2行目で定義した関数が実行された結果が出力される


関数型言語は、「さんしょうとうかせい」と「ふくさようがない」ということで、バグの少ない良いプログラムを書くことができるらしい。
C#のラムダはこういった関数型言語から影響を受けたらしい。
Rubyは、「MatzLisp」とか「Algolの仮面をかぶったLisp」とか呼ばれてるらしいね。
らしいばかりでスマソ。

【scheme】【JavaScript】関数定義(可変長引数)(C#でいうparams)

schemeでも関数の定義。
可変長引数について。

C#のparamsキーワード付き引数的な、JavaScriptのargumentsプロパティ的な。

そうそう、コメントの仕方もわかった♪
「;」で始まる行はコメントになるっぽい。

参考はこちら
http://www.shido.info/lisp/scheme4.html
(define three-args+
  (lambda (a b c . d)
    (list a b c d)))

(three-args+ 1 2 3)
;; => (1 2 3 ())

(three-args+ 1 2 3 4 5 6 7 8 9 10)
;; => (1 2 3 (4 5 6 7 8 9 10))

(define params+
  (lambda (a . p)
    (list a p)))

(params+ 1 2 4 5)
;; => (1 (2 4 5))

でも、引数が0個もしくは1個もしくは複数個とかできんのかなぁー。
JavaScriptだとこんな感じか?

(function () { return function () { return arguments; }; })()(1,2,3,4,5,6,7)
それとも?
(function () { return function () { var ret = []; for (var i = 0; i < arguments.length; i++)ret.push(arguments[i]); return ret; }; })()(1,2,3,4,5,6,7)

The Little Schemer, 4th Edition

2008/11/22

【scheme】Scheme(Lisp)はじめました。

Lispの方言(らしい)schemeをはじめました。
括弧だらけでおもしろいですw
ハッカーと画家」の影響です。


今度、参考書として「計算機プログラムの構造と解釈」でも買おうと思う。
訳が酷すぎるという噂なので、一応立ち読んでから決める。


開発環境は「DrScheme」というIDE(?)です。
ステップ実行でデバッグでっきます。
また、日本語にも対応しています。


詳しくは以下を参照
・インストール
もうひとつの Scheme 入門
http://www.shido.info/lisp/idx_scm.html


・日本語化
scm-startup
http://www.math.kyoto-u.ac.jp/~susumu/lecture/kjsen07/ex/scm-startup/index.html


↓ちなみにこんな感じ。↓
(cons "Sum of" (cons (cons 1 (cons 2 (cons 3 (cons 4 '())))) (cons "is" (cons 10 '()))))
出力結果 ⇒ ("Sum of" (1 2 3 4) "is" 10)


そういや、こないだRubyもはじめたところですw
「初めてのRuby」読みながら♪
この本は噂どおり良書っぽいです。
毎日昼休みにやってます♪