カテゴリ
全体プログラミング scheme verilog 未分類 以前の記事
2016年 04月2016年 03月 2016年 02月 2016年 01月 2015年 12月 2015年 11月 2015年 10月 2015年 09月 2015年 08月 2015年 07月 2015年 06月 2015年 03月 お気に入りブログ
PHPで競技プログラミングメモ帳
最新のトラックバック
ライフログ
検索
タグ
racket
その他のジャンル
ブログパーツ
最新の記事
外部リンク
ファン
記事ランキング
ブログジャンル
画像一覧
|
「オブジェクト指向入門」の著者であるバートランド・メイヤー教授が2013年にTouch Of Classという本を出していて、初心者向けらしいのでとても興味があります。
ただ、Touch Of Classは876ページ!(「オブジェクト指向入門」の分冊と同じくらい) 本を高枕にすることができます。 本は高いしかさばるし、電子書籍は読む気がしない。 オブジェクト指向入門も10%も読んでないし、しばらく我慢しよう。 #
by tempurature
| 2016-01-13 00:09
| プログラミング
いよいよコーディングができる課題に入りました。
とはいえ、ビルドチェックしかしていないです。 E7.2 indexing
description: "2次元の点" -- (注意:EiffelStudio/このクラスのPropertiesはTransitional Syntaxに設定すること) class POINT feature x: REAL y: REAL -- 横座標と縦座標 rho: REAL is local m: SINGLE_MATH -- 原点(0,0)までの距離 do create m Result := m.sqrt(x*x+y*y) end theta: REAL is -- 横軸に対する角度 local tanval, atanval: REAL m :SINGLE_MATH do create m tanval := y / x atanval := m.arc_tangent(tanval) if tanval.is_nan then if x.abs < 1.0 and y.abs < 1.0 then Result := 0.0 else Result := tanval.nan end elseif tanval.is_negative_infinity then Result := -m.pi.truncated_to_real elseif tanval.is_positive_infinity then Result := m.pi.truncated_to_real else Result := atanval end end distance(p: POINT): REAL is -- pまでの距離 local m: SINGLE_MATH do create m Result := m.sqrt (sqr(x-p.x)+sqr(y-p.y)) end translate(a, b: REAL) is -- 水平方向にa, 垂直方向にbだけ移動する do x := x + a y := y + b end scale(factor: REAL) is -- factorを率として拡大縮小する do x := factor * x y := factor * y end rotate(p: POINT; angle: REAL) is -- pを中心にangle度回転させる local do translate(-p.x, -p.y) rotate_around_origin(angle) translate(p.x, p.y) end feature{POINT} sqr(r: REAL): REAL is -- 2乗する do Result := r * r end rotate_around_origin(angle: REAL) is -- 原点を中心にangle度回転させる local tmpx: REAL m: SINGLE_MATH do create m tmpx := rho * m.cosine (theta + angle) y := rho * m.sine (theta + angle) x := tmpx end end #
by tempurature
| 2016-01-12 22:46
| プログラミング
E7.1 システムがユーザ(赤)に関する情報を維持する必要のない問題領域でも、「ユーザ(赤※1)」というオブジェクトを識別できる。この場合、システムは通常の識別番号や、名前、アクセス特権などを必要としないが、システムは、要求に応え、必要な情報を即座に提供するために、ユーザ(青)を監視する必要はある。したがって、現実世界のもの(青)(この場合は、ユーザ(青))にサービスを提供するために、問題領域のモデルに対して対応するオブジェクトを追加する必要がある。 ※1 実際には「山田さん」、「田中さん」という名前のオブジェクトと考えたため。 E7.2 ※E6.1と同じ問題 #
by tempurature
| 2016-01-12 22:40
| プログラミング
Eiffelで関数型プログラミングができるみたいです。いまどきC++でもFPできるみたいなので当たり前といえば当たり前ですけど。で、Eiffel+FP=Satherという立ち位置だったみたいですがSatherは2000年を過ぎたあたりで開発中止になっているようです。
LispからみてHaskellはもっさりしていますが、Eiffelはさらにもっさりしています。Eiffelで関数型を定義するときは当然型宣言が必要ですし、呼び出すときにagentと記述しないといけないようです。 note
description: "Root for trivial system printing a message." author: "tempurature" class HELLO create make feature make -- Print a simple message. do io.put_string ("Hello World") io.put_new_line io.putreal (integral(agent sqr, 0, 1)) end step : REAL = 0.05 sqr(r:REAL) : REAL -- square function do Result := r * r end integral(f:FUNCTION[ANY, TUPLE[REAL], REAL]; a, b: REAL) : REAL -- calculate the integral of [a,b]. local x: REAL; i: INTEGER do from x := a until x > b loop Result := Result + f.item ([x]) * step i := i + 1 x := a + i * step end end end -- class HELLO #
by tempurature
| 2016-01-10 23:58
| プログラミング
E6.11 TYPES - DISPENSER[S, G] -- S as structure - STACK[G] = DISPENSER[STACK, G] - QUEUE[G] = DISPENSER[QUEUE, G] FUNCTIONS - put : DISPENSER[S, G] x G -> DISPENSER[S, G] - remove : DISPENSER[S, G] |> DISPENSER[S, G] - item : DISPENSER[S, G] |> G - empty : DISPENSER[S, G] -> BOOLEAN - new_stack : STACK[G] - new_queue : QUEUE[G] AXIOMS 任意のx:G, s:STACK[G], q:QUEUE[G], d:DISPENSER[S, G]に対して [A1] empty(new_stack) [A2] empty(new_queue) [A3] not empty(put(d, x)) [A4] item(put(s, x)) = x [A5] remove(put(s, x)) = s [A6] if empty(q) then item(put(q, x)) = x [A7] put(remove(q), x) = remove(put(q, x)) [A8] if empty(q) then empty(remove(put(q, x))) PRECONDITIONS - remove(d) require not empty(d) - item(d) require not empty(d) E6.12 TYPES - BOOLEAN FUNCTIONS - true : BOOLEAN - false : BOOLEAN - or : BOOLEAN x BOOLEAN -> BOOLEAN - and : BOOLEAN x BOOLEAN -> BOOLEAN AXIOMS 任意のa, b : BOOLEANに対して [A1] true = true -- true, falseで生成されるBOOLEANオブジェクトは [A2] false = false -- 単一元であることを示す [A3] or(true, b) = or(a, true) = true [A4] or(false, false) = false [A5] and(false, b) = and(a, false) = false [A6] and(true, true) = true E6.13 E6.14 数学的な内容なので断念 #
by tempurature
| 2016-01-10 18:54
| プログラミング
| ||||||||||||||||||||
ファン申請 |
||