LLMの評価はPythonやJavaといった命令型言語に偏っており、HaskellやOCamlのような純粋関数型言語での実力は未知数。
そこで今回は、LLMによる関数型プログラミングのコード生成能力を包括的に評価した研究を紹介します。LLMに関数型言語でコードを書かせたとき、何が起きるのか体系的に調べられました。テストに通るかどうかだけでなく、生成されたコードが関数型の「お作法」に沿っているかどうかまで踏み込んで分析しています。

背景
関数型プログラミングという言葉を聞いたことがあるでしょうか。これは、PythonやJavaのような一般的なプログラミング言語とは異なる考え方でコードを書く手法です。
通常のプログラミングでは「この変数に値を入れて、次にその値を書き換えて…」というように、順番に状態を変えていく命令を並べます。一方、関数型プログラミングでは、一度決めた値は変更しないという原則のもと、数学の関数のように入力から出力を導き出す形でプログラムを組み立てます。
この「値を変更しない」という特徴は、一見すると不便に思えるかもしれません。しかし実際には、これがバグの温床となる「意図しない値の書き換え」を防ぎ、信頼性の高いソフトウェアを作る上で大きな強みになります。そのため、金融システムなど高い安全性が求められる分野では、関数型プログラミングが採用されることも珍しくありません。
ただし、関数型プログラミングには大きな壁があります。再帰やモナドといった独特の概念を理解する必要があり、命令型に慣れた開発者にとっては習得のハードルが高いのです。
ここで期待されるのが、LLMを活用したコーディング支援ツールです。GitHub CopilotやClaude Codeのようなツールが初心者の学習曲線を下げてくれるなら、関数型プログラミングの普及にも貢献できるかもしれません。しかし、これまでのLLM評価研究はPythonやJavaといった命令型言語に偏っており、関数型言語での実力はほとんど検証されてきませんでした。
本記事では、LLMが関数型言語でどの程度実用的なコードを生成できるのか、その能力と限界を明らかにした研究を詳しく見ていきます。