Upgrade to Pro — share decks privately, control downloads, hide ads and more …

余所では 聞かないPythonと関数型の話

Avatar for Atsushi Shibata Atsushi Shibata
September 11, 2024
5

余所では 聞かないPythonと関数型の話

「プログラミングと抽象化」という話題を軸に,Pythonと関数型プログラミングについて考えてみました。
主にオブジェクト指向,関数型プログラミング(FP)を「抽象化のレベルの違い」という視点で比較対照しています。
FPについて知見が少ないことについては十分自負しております。間違っている部分があると思いますが,なにとぞご容赦ください。

Avatar for Atsushi Shibata

Atsushi Shibata

September 11, 2024

Transcript

  1. ݱ࣮ੈք hp = 100 mp = 10 exp = 20

    level = 1 ந৅తੈք hp = 40 mp = 50 exp = 100 level = 2 σʔλߏ଄ ʮঢ়ଶʯΛ࢖ͬͨந৅Խ 
  2. ݱ࣮ੈք hp = 10 mp = 0 ந৅తੈք hp =

    5 mp = 0 hp = hp - 5 ܭࢉ ঢ়ଶͷมԽ ʮঢ়ଶʯΛ࢖ͬͨந৅Խ 
  3. ܭࢉ ม਺ ܭࢉ σʔλߏ଄ ม਺ σʔλߏ଄ hp = 5 mp

    = 10 exp = 20 level = 1 hp = 40 mp = 50 exp = 100 level = 2 hp = 40 mp = 40 exp = 100 level = 2 hp = 25 mp = 10 exp = 20 level = 1 ந৅Խͱͯ͠ͷʮ෭࡞༻ʯ ຐ๏࢖͍͕ຐ๏Λ࢖ͬͯ༐ऀͷମྗΛճ෮͢Δ
  4. ந৅ԽϚχΞͷ࣌୅ Ҏલ ߴ֊ؔ਺ map() filter() reduce() ແ໊ؔ਺ lambda x :

    x*x ந৅Խͦ͜ࢸߴʜʜ ϝϦοτ͸ ύϑΥʔϚϯε޲্ʜʜ
  5. # Given the list L, make a list of all

    strings # containing the substring S. sublist = filter(lambda s, substring=S: string.find(s, substring) != -1, L) ඒ͍͠Θʜʜ
  6. # Given the list L, make a list of all

    strings # containing the substring S. sublist = filter(lambda s, substring=S: string.find(s, substring) != -1, L) sublist = [ s for s in L if string.find(s, S) != -1 ] ͓લ͸͢Ͱʹؔ਺ܕ ࢲ͕ؔ਺ܕʹ ͓͍͔ͯͨ͠Βʜʜ
  7. ந৅Խ͸ʮ໨తʯΛ൐͏ hp = 100 mp = 10 exp = 20

    level = 1 100 10 20 1 pine = 2 apple = 3 fruit = pine+apple x = 3 y = 2 z = x+y ϓϩάϥϛϯάతந৅Խ ਺ֶతந৅Խ ՄಡੑΛ൐ͬͨ֓೦ ७ਮͳ਺ͷ֓೦
  8. Ξϊςʔγϣϯ type Vector = list[float] def scale(scalar: float, vector: Vector)

    -> Vector: return [scalar * num for num in vector] େ఍ͷΞϊςʔγϣϯ͸ ͨͩͷόϦσʔγϣϯΑ ؔ਺ܕతจԽ ܗࣜతূ໌Մೳੑ △ ×
  9. GVODUPPMT ෦෼ద༻ from functools import partial basetwo = partial(int, base=2)

    basetwo.__doc__ = 'Convert base 2 string to an int.' basetwo(‘10010') # int(‘10010’, base=2) IUUQTEPDTQZUIPOPSHKBMJCSBSZGVODUPPMTIUNM ΧϦʔԽͱ΋ ݴ͏Θʜʜ
  10. GVODUPPMT  σίϨʔλͱߴ֊ؔ਺ @cache def factorial(n): return n * factorial(n-1)

    if n else 1 def factorial(n): return n * factorial(n-1) if n else 1 cachedfactorial = cache(factorial)