Nemerle for OOP Programmers Week 1 (7)
前回からずいぶん(一ヶ月以上!)間が空いてしまいました.
演習問題が残っていたので,ちょうどいいリハビリになりました.
Exercise 1
Personクラスを作ってみる
using System; using System.Console; using Nemerle.Utility; class Person { [Accessor] firstName : string; [Accessor] lastName : string; [Accessor] birthDate : DateTime; public Age : int { get { def today : DateTime = DateTime.Now; mutable carry : int; if ((today.Month < birthDate.Month) || (today.Month == birthDate.Month) && (today.Day < birthDate.Day)) { carry = 1; } else { carry = 0; } today.Year - birthDate.Year - carry; } } public this(firstName : string, lastName : string, birthDate : DateTime) { this.firstName = firstName; this.lastName = lastName; this.birthDate = birthDate; } } def person = Person("scott", "tiger", DateTime.Parse("1999/11/11")); WriteLine(String.Format("FirstName:={0},LastName:={1},BirthDate:={2},Age={3}", person.FirstName, person.LastName, person.BirthDate, person.Age));
(どうでもいい話ですが,コンストラクタの第3引数はDateTime型にしておいたほうがいいでしょう.これを,内部ではDateTimeで持つけど外部インタフェースとしてはstring型とかにすると,一見ユーザフレンドリーに見えて非常にめんどくさいことになります.)
Excercise 3
Animalクラスを作ってみる
using System; using System.Console; using Nemerle.Utility; abstract class Animal { [Accessor] protected legs : int; public abstract Speak() : string; } class Dog : Animal { public this() { legs = 4; } public override Speak() : string { "Bow wow"; } } class Cat : Animal { public this() { legs = 4; } public override Speak() : string { "Meow"; } } class Human : Animal { public this() { legs = 2; } public override Speak() : string { "Hello"; } } def dog : Animal = Dog(); WriteLine("[Dog]"); WriteLine(String.Format("legs number is {0}", dog.Legs)); WriteLine(dog.Speak()); def cat : Animal = Cat(); WriteLine("[Cat]"); WriteLine(String.Format("legs number is {0}", cat.Legs)); WriteLine(cat.Speak()); def human : Animal = Human(); WriteLine("[Human]"); WriteLine(String.Format("legs number is {0}", human.Legs)); WriteLine(human.Speak());
Excercise 3
これは問題に出てくる以下のサイト
http://nemerle.org/~malekith/temp/chasing.n
がリンク切れになっていて回答不能です.