私は楽しみのためにプログラミング言語をモデリングしており、構文はScala、特に関数定義に大きく影響されています。
私の言語は、def
構文(クラスメソッド)によって定義された関数と値に割り当てられた匿名関数(を使用して作成された)を区別しないため、設計上の問題が発生しました=>
- 実装と動作の両方の違いが取り除かれます。
その結果、次の2つの定義は同じ意味になります。
def square(x: Int) = x*x
val square = (x: Int) => x*x
後者の形式(即時の無名関数の割り当て)が通常の状況で使用される理由はありません- フォームの代わりにそれを使用することは単に可能def
です。
名前付き関数を定義するためにそのような重複した構文を使用すると、言語の直交性やその他の設計上の側面が損なわれますか?
メソッドと名前付き関数の短くて直感的な定義(を介してdef
)と匿名関数の短い定義(を使用=>
)が可能になるため、このソリューションを選択します。
編集:Scala は 2つを区別します。無名関数はdef
、Scalaで定義されたメソッドと同じではありません。違いは比較的微妙ですが、以前にリンクした投稿を参照してください。
val
表記法を使用して再帰関数を定義できますか?
fun
、再帰関数を定義するために使用する必要があります。
def
。これは、無名関数(x : Int) => x + 1
がオブジェクトであるという事実の単なる副作用であり、オブジェクトはを使用して値に割り当てることができますval f = ...
。言語設計者は、構文を許可しないために彼らの道を離れなければならなかっただろう。これは、(ほぼ)同じことを行う2つの異なる構文を明示的にサポートするように努力することとはまったく同じではありません。
However, assigning existing functions
文の終わりが抜けているようです