質問

私は最近気づいたフレーズはのコンセプトである「ポイントを自由」スタイル...

は、まず、そこにこのの質問はだった、と< href = "https://stackoverflow.com/questions/907306/confusion-about-currying-and-point-free-style-in-haskell">も、この1 のます。

そこで、私は彼らが「されて議論する価値があるかもしれないもう一つの話題に言及し、ここでのrel="noreferrer"> href="http://lambda-the-ultimate.org/node/3331"

「ポイント自由」スタイルは何ですか?誰かが簡潔な説明を与えることはできますか?それは「自動」カリー化とは何かを持っていますか?

私のレベルのアイデアを得るために - 私は、スキーム自分自身を教えてきた、とシンプルなSchemeインタプリタを書かれている...私は「暗黙の」カリー化とは何かを理解し、私は任意のHaskellのか、MLを知りません<。 / P>

他のヒント

ポイントフリースタイルは、関数が関数合成によって定義されていることを、定義されている関数の引数を明示的に言及されていないことを意味します。

は、

のような二つの機能を持っている場合
square :: a -> a
square x = x*x

inc :: a -> a
inc x = x+1

あなたはx*x+1を算出し、1にこの2つの機能を結合したい場合、あなたはこのように「ポイント・フル」それを定義することができます:

f :: a -> a
f x = inc (square x)

ポイント・無料の代替は、引数xについて話をしないで次のようになります。

f :: a -> a
f = inc . square

ポイント自由なスタイルは、コードが明示的にそれは彼らが存在し、使用されているにもかかわらず、引数をだ言及していないことを意味します。

これは、機能の働き方のHaskellで働きます。

たとえばます:

myTake = take

は一つの引数を取る関数を返します、したがって、引数はあなたがあまりにも場合を除き、明示的な型に理由はありません。

ここでは他のライブラリなしで活字体で一例です。

interface Transaction {
  amount: number;
}

class Test {
  public getPositiveNumbers(transactions: Transaction[]) {
    return transactions.filter(this.isPositive);

    //return transactions.filter((transaction: {amount: number} => transaction.amount > 0));
  }

  public getBigNumbers(transactions: Transaction[]) {
    // point-free
    return transactions.filter(this.moreThan(10));

    // not point-free
    // return transactions.filter((transaction: any) => transaction.amount > 10);
  }

  private isPositive(transaction: Transaction) {
    return transactions.amount > 0;
  }

  private moreThan(amount: number) {
    return (transaction: Transaction) => {
      return transactions.amount > amount;
    }
  }
}

あなたはポイントフリースタイルは、より「流暢」と読みやすくなります見ることができます。

scroll top