「関数型プログラミング」や「関数型言語」の定義に普遍の共通認識は存在しませんが、複数の(いわゆる)関数型言語にしばらく触れてみると、共通して重視されている概念や考え方、設計パターン、機能と思われるものも見えてきます。
Haskell, Scala, Clojure, Elixirという性質の異なる4つの関数型言語での特徴的なプログラミングスタイルを吟味(= テイスティング)してみることを通して、関数型プログラミングの中核にありそうなもの、周辺にありそうなもの、(直接的には)無関係そうなものについて一緒に考えてみましょう🍷
取り上げる(かもしれない)キーワード: 関数とその組み合わせ方いろいろ, 変換 vs 命令, 式指向 vs 文指向(cf. コードの形), よくある設計パターン/言語機能, 参照透過性, 不変性と永続性, 合成可能性, データ指向 vs オブジェクト指向, 再利用性と抽象度(cf. 命名), メタプログラミングと言語処理系, 関数型プログラマのメンタルモデル
なるべく Beginner から Advanced まで対象と出来るよう努力します。タイトルを聞いて何かしら感情が動いた方であればおすすめです。
「Haskellは純粋関数型言語だから副作用がないらしいけど、入出力処理などはどうやるんだろう?」というような疑問を抱えている方は多いでしょう。本発表ではHaskellの歴史と現状を顧みて、そのような疑問が生まれる背景や、「Haskellは副作用がない」と考えることの問題点と、それを踏まえて「副作用があるHaskell」という認識が普及した未来について論じます。関数型プログラミングやHaskellを学習する際ありがちな「思考の憑きもの」を祓う発表になれば幸いです。
2018年にver.1.0がリリースされた新言語 Julia について、自己の経緯をベースに関数型プログラミング(以降 FP と略記)の観点で紹介・解説します。
Julia はマルチパラダイムを謳っており、特別 FP に特化した言語というわけではありません。所謂『関数型言語』と呼ばれる他言語にはよくあるけれど Julia にはない機能・言語仕様もあります。一方で、動的言語でありながら構造的に設計された型システムを持ち、多重ディスパッチという機構とそこから導かれる強力なポリモーフィズム、また
Lisp 由来の『真のマクロ』などのメタプログラミング機構を持っています。その辺りを足がかりに、以下のような内容について紹介・解説します。