*View this file with results and syntax highlighting [here](https://mlochbaum.github.io/BQN/doc/constant.html).* # Constant It's one of the simple ones: `f˙𝕩` is `f`. And `𝕨f˙𝕩`? It's `f`. Like the [identity functions](identity.md), Constant doesn't compute anything but just returns one of its inputs. It's somewhat different in that it's a deferred modifier, so you have to first apply Constant to its operand and *then* to some arguments for that non-event to happen. The design of BQN makes Constant unnecessary in most cases, because when a non-operation (number, character, array, namespace) is applied it already returns itself: `Ο€Λ™` is the same function as `Ο€`. If you've used much [tacit](tacit.md) programming, you've probably written a few [trains](train.md) like `2Γ—+` (twice the sum), which is nicer than the equivalent `2Λ™Γ—+`. However, a train has to end with a function, so you can't just put a number at the end. Applying `Λ™` is a convenient way to change the number from a subject to a function role. +Γ·2 # A number +Γ·2Λ™ # A function 3 (+Γ·2Λ™) 7 When programming with [first-class functions](functional.md), the constant application shortcut becomes a hazard! Consider the program `{π•¨βŒΎ(2βŠΈβŠ‘) 𝕩}` to insert `𝕨` into an array `𝕩` as an element. It works fine with a number, but with a function it's broken: ∞ {π•¨βŒΎ(2βŠΈβŠ‘) 𝕩} 1β€Ώ2β€Ώ3β€Ώ4 M ← - m {π•¨βŒΎ(2βŠΈβŠ‘) 𝕩} 1β€Ώ2β€Ώ3β€Ώ4 Here `m` is applied to `2βŠ‘π•©` even though we want to discard that value. Spelled as `m`, our [context-free grammar](context.md) knows it's a function argument, but this [doesn't affect](../problems.md#syntactic-type-erasure) later usage. [Under](under.md) always applies `𝔽` as a function. The proper definition of the insertion function should use a `Λ™`, like this: m {π•¨Λ™βŒΎ(2βŠΈβŠ‘) 𝕩} 1β€Ώ2β€Ώ3β€Ώ4