表現としてのすべて


私はF - Countの学習の旅で、私は“すべてが表現されている”という概念に遭遇しました.私が詳細に入る前に、ちょうど表現と声明の違いをはっきりさせましょう.
私は、表現が価値に評価する何かと考えるのが好きです.算術演算、三項演算子、関数演算結果などが含まれます.
// arithmetic expression that evalues to 36
5 * 6

// function call that evalues to 120
factorial(5)

// ternary operator that evalues to 9
isEven(11) ? 8 : 9 
これらのすべてが変数に格納できる値にどのように評価するかに注目してください.それでは、声明の例を見てみましょう.
// assignment
let b = 7

// branching
if (x % 7) {
    // some code goes here
} else {
    // some code goes here
}

// loops
while (true) { /* some code */ }
for (let i = 0; i < 10; i++) { /* some code */ }
あなたが新しい言語を設計していると言いましょう、そして、あなたは表現と声明のこの任意の区別が好きではありません.
if文が本体の最後の値を返すことによってif文と三項式を組み合わせて起動できます.
let a = if (b > 10) {
    /* some code */
    5
} else {
    /* some code */
    3
}

You can refer to for why blocks expressions evaluate to the last value in their bodies.


どのような間/ループのために?彼らの機能は簡単に再帰で複製することができますので、それらを取り除く.たとえば次のようになります.
let i = 0;
while (i < 10) {
    print("hello world")
    i++
}
以下のように再帰を使用するように変換できます:
let loop = (i, end) => {
    if (i < end) {
        print("hello world")
        loop(i + 1, end)
    }
}

loop(0, 10)
これはlet文を残します.ML言語では、我々はMathematicsに触発された式を作ろうとしている
(* this is the same as (5 * 5) + 1 *)
let x = 5 in (x * x) + 1
前の例では、変数に代入できません.代わりに、xのキーワードの後、5が値でinになると言います.
let文は、inキーワード以降の式をとるため、式自体が式であるため、次のようにします.
let x = 5 in (let y = 6 in x + y)
括弧を削除して書式設定を行うと、次のようになります.
let x = 5 in
let y = 6 in
x + y
では、なぜこれが重要なのか?さて、私は、純粋な関数型プログラミング言語が突然変異と副作用を避ける傾向がある理由を理解するのに重要です.