この質問のために、のは実際に評価される値を強制することができる3つのものがあるとしましょう:
- その値でのパターンマッチング
- 引数への値の適用
- それを最初の引数として使用する
seq
実際の状況は少し複雑ですが、ここでは重要ではありません。
さらに、この強制は一部の外部式のコンテキストでのみ発生するため、これらを「抽象的な方法で強制的に評価する」と考えるのではなく、外部式の評価をその価値の評価これは、例えば、seq x x
が強制的にx
を強制しない理由です。なぜなら、それはとにかく式の最終的な値なのですから。外側の式(値がx
)が評価されるとき、それは冗長であるx
も評価する必要があります。
最後に、未定義の値を強制することに依存する値自体は、未定義です。
各式を通って行く:
seq undef1() = undefined
この場合undef1
では未定義であり、そしてseq undef1 x
は、その値x
あり、undef1
の評価に依存する式です。したがって、seq
の第2引数が何であるとしても、式全体は未定義です。この場合
seq undef2() =()
、undef2
は不定、それをされている適用した結果ありません。 seq undef2 x
は、値がx
の式であり、評価結果はundef2
です。これにより問題は発生せず、seq
の最初の引数は破棄されるため、式の値は()
になります。
undef2() = undefined
この場合、undef2
を直接適用しています。式undef2()
は、undef2
(これは問題ありません)の評価に依存し、の適用結果(この場合はundefined
)と評価されます。第4のケースと
コントラストこの:式の値は未定義ですundef1
を、評価に依存し、したがって、その式全体であるので、この場合は
undef1() = undefined
は、我々は、undef1
を適用しています。これは前の式と同じ "値"です。undef2
を使用していますが、非常に異なる理由があります。
優れています。ありがとうございました。 Hehe、ええ、 – user21154