少しだけpythonで遊んでみた。

とりあえず、fizzbuzzでも作ってみよう。

# -*- coding: utf-8 -*-
# 上のように書くとマルチバイト文字が使えるようになる。
def fizzbuzz(n):
    if n%3 == 0 and n%5 == 0:
        return "fizzbuzz"
    elif n%3 == 0:
        return "fizz"
    
    elif n%5 == 0:
        return "buzz"
    else:
        return n

for i in range(1,101):
     print(fizzbuzz(i))

range(1,n)は、1からn-1までという意味みたい。

foldを作ってみよう。

(schemeのfold的な…rubyのinject的な…)
javascriptと同じ名前で、pythonにもあったような気がする。
思い出せないから、名前はfoldでいいや。
以下の3つを満たせばいいことにしよう。

  • 初期値を渡せる。
  • 式を渡せる(たぶん,lambda式)
  • それを使って1から10までの総和が計算できる。
#def fold(op, init, fold)
#ダメだ、lambdaの貰い方が分からない。

x = lambda x: x+1
print x(3)
#=> 4
#普通にlambda式を変数に束縛も可能。
#式で良いんだったっけ? > lambda
#確か、pythonだとlambdaは式だったような気がする

# def fold(a,expr, init):
#     for i in a:
#配列をforでiterateできるのか分からない。

a = [i for i in range(1,10,2)]
# 以前に覚えたリスト内包表記便利。

print a
# => [1, 3, 5, 7, 9]
# rangeは3つめの引数で交差も指定できる。

# for i in a:
#     print a[i]
#できたできた。
#そういえば、タプルなんていう型もあったような?
# for i in (1,2,3):
#     print i
# タプルって何に使うんだろ?
# (確か、変更不可能だったような気がする。
# yamlで書くような設定の読み込みとか?

#たぶん、これで書ける。

def fold(a,expr,init):
    re = init
    for i in a:
        re = expr(re, i)
    return re

一応近いものはできた。

re = fold([i for i in range(11)],
     lambda x,y: x+y,
     0)

print re # =>55

15分とか時間を指定して知らない言語で遊んでみることって

知らない言語の勉強を長々とやると、たくさんのerrorで勉強するのが嫌になるかもしれない。
でも短い時間なら、たとえ書いたプログラムが動かなかったとしても、
「どうしてあの時上手くいかなかったんだろ?」と思う程度で終了する。
(さらに、その日に考えたいものがみつかるので暇つぶしにもなるかもしれない)
そんなわけで、限られた時間の中で新しい言語の知らない部分を調べるのは、けっこう良いことかもしれない。

リフレクションの辺りを調べてみようかな?(15分間だけ)