pick
| Input Stack: |
⇨ |
Output Stack: |
Copy an item from a specific position in the stack and place the copy on top. The original
item remains in its position while a duplicate is added to the top of the stack. This allows
non-destructive access to stack items at arbitrary depths.
Parameters
- ...: The current stack contents with at least (n+1) items
- n: Zero-based index of the item to copy (0 = top item, 1 = second item, etc.)
Behavior
- Non-destructive copying: Original stack items remain in their positions
- Index-based access: Uses zero-based indexing (0 = top, 1 = second from top, etc.)
- Stack growth: Adds one more item (the copied item) to the stack
- Bounds checking: Index must be valid for current stack depth
Examples
Picking the top item (index 0) - equivalent to :dup:
a,0,:pick
| Pos | Input | Output |
| 0 |
0 |
a |
| 1 |
a |
a |
Picking the top item from a two-item stack:
a,b,0,:pick
| Pos | Input | Output |
| 0 |
0 |
b |
| 1 |
b |
b |
| 2 |
a |
a |
Picking the second item (index 1) - equivalent to :over:
a,b,1,:pick
| Pos | Input | Output |
| 0 |
1 |
a |
| 1 |
b |
b |
| 2 |
a |
a |
Equivalences
0,:pick ≡ :dup (copy top item)
1,:pick ≡ :over (copy second item)
- :dup - Copy top item (equivalent to
0,:pick)
- :over - Copy second item (equivalent to
1,:pick)
- :roll - Move (not copy) item to top of stack
- :depth - Check stack size before picking
- :swap - Exchange top two items
Since: 1.5.0