Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
2
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

代数的データ構造 in JavaScript

JavaScriptには代数的データ型はありませんが、case値を関数で定義することによって代数的データ型を表すことが出来ます。

match関数の作成

currency.js
var match = (data, pattern) => {
    return data(pattern);
};

代数的データ型のパターンマッチを行うための関数です。

ex: 通貨を代数的データとして表す

Haskellの場合
data currency = yen | dollar
currency.js
// case yen
var yen = () => {
    return (pattern) => {
        return pattern.yen;
    };
};

// case dollar
var dollar = () => {
    return (pattern) => {
        return pattern.dollar;
    };
};
  • case値を関数で定義しているところがポイントです。

ex: 通貨に対応する単位を取り出すパターンマッチ例

currency.js
// 単位を取り出す
var unit = (currency) => {
    return match(currency, {
        yen: "¥",
        dollar: "$"
    });
};


// 使用例
console.log(unit(yen())) // ¥
console.log(unit(dollar())) // $

まとめ

「関数型プログラミングの基礎 JavaScriptを使って学ぶ」では、リストを上記の代数的データ構造を用いて表し、関数型プログラミングの手法が解説されています。

参考書

  • 関数型プログラミングの基礎 JavaScriptを使って学ぶ (amazon)

関数型プログラミングとはなんぞやというところから、
Haskelなどの関数型プログラミング言語で用意されている関数(reduce, map, foldrなど)をJavaScriptで順序立てて説明してくれているので、直接関数型プログラミング言語による解説では得られない知見が学べます。
また何気なく使っているプログラミングの専門用語も丁寧に解説されており、プログラミングをあらためて勉強し直すにも最適の参考書だと思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
2
Help us understand the problem. What are the problem?