追記

ɥozɐʞıɥ


2017-08-21 Clojure再び [長年日記]

_ [Clojure] ニュートン法で2の平方根を求める

Rustづいていたが並行してClojureも勉強するので計算機プログラムの構造と解釈 第2版を読んでいます。

ニュートン法で平方根を求めるのです。

iterateとlazy-seqでそれぞれ遅延評価を使っています。

修正しました。第一引数が有効数で第二引数が平方根で求める値です。初期値は1.で固定です。*1

(ns newton.core

(:gen-class))

(defn newton[[x y]]

(cons x (lazy-seq (newton [(/ (+' (/ y x) x ) 2) y]))))

(defn -main[& args]

(do

(println

(first

(first

(first

(filter

#(< (Math/abs (- (first (first %) ) (first (second %)))) (Float/parseFloat (first args)))

(partition 2 1

(iterate

(fn [[x y]] [(/ (+' (/ y x) x ) 2) y] ) [1. (Integer/parseInt (second args))])))))))

(println

(first

(first

(filter

#(< (Math/abs (- (first %) (second %))) (Float/parseFloat (first args)))

(partition 2 1 (newton [1. (Integer/parseInt (second args))]) )))))))

*1 8/23修正


2017-08-20 嵐の翌日 [長年日記]

_ [モフ太] 朝散歩

嵐の翌日です。

モフ太さんぽ
モフ太さんぽ posted by (C)ひかぞぉ

_ [Rust] Command Pattern

Command pattern - WikipediaをRustで実験。本当はもっtGenericsを使ったほうが良さそうなのだが。

trait Command {

fn execute(&self);

}

struct Switch<'a>{

closed_command: &'a Command,

opened_command: &'a Command

}

impl <'a>Switch<'a>{

fn new(cls: &'a Command, opn: &'a Command) -> Self{

Switch{

closed_command : cls,

opened_command : opn,

}

}

fn close(&self){

self.closed_command.execute();

}

fn open(&self){

self.opened_command.execute();

}

}

trait Switchable{

fn power_on(&self);

fn power_off(&self);

}

struct Light;

impl Switchable for Light{

fn power_on(&self){

println!("The light is on");

}

fn power_off(&self){

println!("The light is off");

}

}

struct CloseSwitchCommand<'a>{

switchable: &'a Switchable

}

impl<'a> CloseSwitchCommand<'a>{

fn new(cmd: &'a Switchable) -> Self{

CloseSwitchCommand{

switchable : cmd,

}

}

}

impl<'a> Command for CloseSwitchCommand<'a>{

fn execute(&self){

self.switchable.power_on();

}

}

impl<'a> OpenSwitchCommand<'a>{

fn new(cmd: &'a Switchable) -> Self{

OpenSwitchCommand{

switchable : cmd

}

}

}

impl<'a> Command for OpenSwitchCommand<'a>{

fn execute(&self) {

self.switchable.power_off();

}

}

use std::env;

use std::str;

fn main(){

let args: Vec<String> = env::args().collect();

let lamp = Light;

let switch_close = CloseSwitchCommand::new(&lamp);

let switch_open = OpenSwitchCommand::new(&lamp);

let switch = Switch::new(&switch_close,&switch_open);

let s: &str = &args[1];

match s{

"ON" => switch.open(),

"OFF" => switch.close(),

_ => println!("Argument ON or OFF is required!"),

}

}

_ [モフ太] 夕方散歩

モフ太さんぽ
モフ太さんぽ posted by (C)ひかぞぉ


2017-08-19 蒸し暑い [長年日記]

_ [モフ太] 朝散歩

蒸し暑くって眠れず早めに起きて散歩です

モフ太さんぽ
モフ太さんぽ posted by (C)ひかぞぉ

_ [Rust] Factory Method

Factory method pattern - WikipediaのC#のコードを焼き直してみました。

FactoryでIPeronを返そうとするとsizeが未定だと怒られたのでBoxで包んじゃいました。

trait IPerson{

fn get_name(&self) -> String;

}

struct Villager;

impl IPerson for Villager{

fn get_name(&self) -> String{

"Village Person".to_string()

}

}

struct CityPerson;

impl IPerson for CityPerson{

fn get_name(&self) -> String{

"City Person".to_string()

}

}

enum PersonType{

Rural,

Urban

}

struct Factory;

impl Factory {

fn get_person(typ: PersonType) -> Box<IPerson> {

match typ {

PersonType::Rural => Box::new(Villager),

PersonType::Urban => Box::new(CityPerson),

}

}

}

fn main(){

let p1 = Factory::get_person(PersonType::Rural);

let p2 = Factory::get_person(PersonType::Urban);

println!("{}",p1.get_name());

println!("{}",p2.get_name());

}

_ [モフ太] 夕方散歩

花火の前に散歩です。

モフ太さんぽ
モフ太さんぽ posted by (C)ひかぞぉ

_ 花火大会

今年は中止でしたー。



2002|09|10|11|12|
2003|01|02|03|04|05|06|07|08|09|10|11|12|
2004|01|02|03|04|05|06|07|08|09|10|11|12|
2005|01|02|03|04|05|06|07|08|09|10|11|12|
2006|01|02|03|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|
追記