
The Array Cast
Tacit #5
Podcast summary created with Snipd AI
Quick takeaways
- The concept of tacit programming involves converting hands-on experimentation and tacit knowledge into formulas for more efficient coding.
- Modifier trains, made up of adverbs and conjunctions, can create higher-order functions and operators, enhancing code flexibility.
- Parenthesizing within modifier trains allows for the construction of complex functions and operators, improving code organization and clarity.
- The search for the Holy Grail of combinators in programming languages aims to find special conjunction patterns for simplifying and optimizing code.
Deep dives
Tacit knowledge expressed through formula
Physicists learn about physics through hands-on experimentation and develop a tacit understanding of how things work. They then convert this tacit knowledge into formulas to express what they know.
Modifier trains and their applications
Modifier trains, consisting of adverbs and conjunctions, can be used to create a variety of combinators in programming languages. These combinators can form higher-order functions and operators, allowing for more flexible and concise code.
Parenthesizing in syntax and hierarchical structure
Parenthesizing within modifier trains can aid in grouping and clarifying the structure of expressions when working with adverbs, conjunctions, and other modifiers. It allows for more flexibility in constructing complex functions and operators.
The Holy Grail of combinatorial logic
The search for the Holy Grail of combinators involves finding the triple conjunction and the conjunction verb conjunction, where the outer conjunctions are the "hoof" and the "paw" combinator. These combinators can simplify and optimize code through their unique patterns and applications.
The challenge of ambivalence in APL-style languages
The discussion explores the ambivalence of glyphs in APL-style languages like APL, J, and BQN. Ambivalence refers to the practice of utilizing the same symbol to represent different meanings depending on the context, both as a monadic function and a dyadic function. The ambivalence was a result of the limited number of available symbols during the early development of APL. The debate revolves around the trade-off between the usefulness of ambivalence and the potential confusion it may introduce, especially in tacit programming. The idea of removing ambivalence or exploring alternative ways to represent functions and operators is discussed, with examples from other languages like Q and Jelly that have made design choices to address this issue.
The concept of modifier trains in APL-style languages
The episode delves into the concept of modifier trains, also known as operator trains, in APL-style languages. Modifier trains involve the composition of functions and operators to derive new functions or operators. The discussion highlights the practicality and challenges of using modifier trains, with a focus on their usefulness in tacit programming. Examples from J's invisible modifiers and possible implementations of hypothetical hyper operators in NARS2000 are mentioned. The episode also explores the notion of extending the framework of modifier trains to higher-order modifiers, such as hyper operators. The potential benefits, limitations, and complexity of incorporating such extensions are debated.
Refining the use of ambivalence and modifier trains in APL-style languages
The conversation continues by examining the benefits and limitations of ambivalence and modifier trains in APL-style languages. It is suggested that instead of introducing new combinations, there may be more value in refining the functionality of existing functions and operators. Function-centric programming is emphasized, as functions are generally easier to work with and offer flexibility for manipulations. The challenge of understanding and effectively using ambivalence and modifier trains is recognized, and the concept of utility in programming languages is emphasized. Practical considerations of usability and the trade-offs involved in adopting or removing certain language features, such as ambivalence and modifier trains, are also discussed.
The potential and limitations of hyper operators in APL-style languages
The episode concludes by exploring the concept of hyper operators in APL-style languages. Hyper operators refer to operators that modify or combine other operators, similar to how modifier trains modify or combine functions. The potential usefulness of hyper operators is debated, acknowledging their complexity and the challenges associated with their practical implementation. Possible approaches to hyper operators, such as defining them as higher-order modifier trains and the relevance of hyper operators in relation to the broader category theory, are discussed. The episode closes with a reflection on the exploration of advanced language features and the ongoing evolution of APL-style languages.
Array Cast - October 13, 2023
Show Notes
[01] 00:02:40 Minnowbrook conference https://aplwiki.com/wiki/APL_Implementer%27s_Workshop
Combinators https://en.wikipedia.org/wiki/Combinatory_logic#Examples_of_combinators
Tacit Programming https://mlochbaum.github.io/BQN/doc/tacit.html
Function Composition https://aplwiki.com/wiki/Function_composition
Tacit Episodes of the ArrayCast
Tacit #4 The Dyadic Hook https://www.arraycast.com/episodes/episode17-tacit4-the-dyadic-hook
Tacit #3 And Other Topics https://www.arraycast.com/episodes/episode15-tacit-3-and-other-topics
Tacit #2 Why Tacit? https://www.arraycast.com/episodes/episode11-why-tacit
Tacit #1 Tacit Programming https://www.arraycast.com/episodes/episode-09-tacit-programming
[02] 00:03:35 Arrayground https://apps.apple.com/us/app/arrayground/id6453522556
Conor's Uiua videos
Uiua - A New Array Language https://www.youtube.com/watch?v=iTC1EiX5bM0
BQN vs. Uiua https://www.youtube.com/watch?v=pq1k5USZZ9A
BQN vs. Uiua #2 https://www.youtube.com/watch?v=SpZJxbOf_jM
[03] 00:05:41 Stanley Jordan https://en.wikipedia.org/wiki/Stanley_Jordan
April, an APL Compiler for Common Lisp https://www.youtube.com/watch?v=AUEIgfj9koc
Andrew Sengul Episode of the ArrayCast https://www.arraycast.com/episodes/episode23-andrew-sengul
Uiua Episode of the ArrayCast https://www.arraycast.com/episodes/episode63-uiua
Game videos in BQN
Snake2 in 8 Minutes https://youtu.be/tOZde7zrsLM?si=N2jTdTZBlPEleCr0 https://youtu.be/wTIlQ1Ib-zE
Snake (longer version) https://youtu.be/wTIlQ1Ib-zE
A Game implemented in APL
Draculark in APL https://medium.com/@solarbreeze69/draculark-a-mudlarking-vampire-hunting-game-bbf40361bf1a
[04] 00:09:06 Forks https://code.jsoftware.com/wiki/Vocabulary/fork
Before and After in BQN https://mlochbaum.github.io/BQN/doc/hook.html
Invisible Modifiers https://code.jsoftware.com/wiki/Vocabulary/fork#invisiblemodifiers
Peter Mikkelson
https://pmikkelsen.com
https://www.dyalog.com/blog/2022/11/welcome-peter-mikkelsen/
[05] 00:14:52 Atop in J https://code.jsoftware.com/wiki/Vocabulary/at
Compose (Over) in J https://code.jsoftware.com/wiki/Vocabulary/ampv
Atop and Over BQN https://mlochbaum.github.io/BQN/doc/compose.htm
l
[06] 00:17:04 Henry Rich Episodes on the ArrayCast
Fold in J https://www.arraycast.com/episodes/episode50-fold
Henry Rich - Threads in J9.4 https://www.arraycast.com/episodes/episode48-henry-rich
Henry Rich presents J903 https://www.arraycast.com/episodes/episode18-henry-rich-presents-j903
Henry Rich's Deep Dive into J https://www.arraycast.com/episodes/episode-06-henry-richs-deep-dive-into-j
Invisible Modifiers Table https://code.jsoftware.com/wiki/Vocabulary/fork#invisiblemodifiers
Seymour Papert https://en.wikipedia.org/wiki/Seymour_Papert
[07] 00:20:10 NuVoc https://code.jsoftware.com/wiki/Vocabulary
Forks https://code.jsoftware.com/wiki/Vocabulary/fork
Modifier Trains https://code.jsoftware.com/wiki/Vocabulary/fork#invisiblemodifiers
Modifier Train Exploration https://code.jsoftware.com/wiki/Vocabulary/ModifierTrains
Modifier Train Exploration Discussion https://code.jsoftware.com/wiki/Talk:Vocabulary/ModifierTrains
[08] 00:24:23 Atop APL Paw glyph https://aplwiki.com/wiki/Atop_(operator)
Over APL Hoof glyph https://aplwiki.com/wiki/Over
[09] 00:44:44 Arity of functions https://en.wikipedia.org/wiki/Arity
Conjugate Monadic + https://code.jsoftware.com/wiki/Vocabulary/plus
Plus Dyadic + https://code.jsoftware.com/wiki/Vocabulary/plus#dyadic
[10] 00:54:55 Forks in the KAP Programming Language https://kapdemo.dhsdevelopments.com/kap-comparison.html#_fork
Forks modelled in the dfns workspace http://dfns.dyalog.com/n_fork.htm
[11] 01:00:35 Kadane's Algorithm https://en.wikipedia.org/wiki/Maximum_subarray_problem
[12] 01:06:24 Pepe's Trains - Past, Present and ... https://www.jsoftware.com/pipermail/programming/2017-October/049263.html
[13] 01:10:47 Dyadic Or BQN https://mlochbaum.github.io/BQN/doc/logic.html
Monadic Sort BQN https://mlochbaum.github.io/BQN/doc/order.html
[14] 01:15:23 Signum Monadic * https://code.jsoftware.com/wiki/Vocabulary/star
Times Dyadic * https://code.jsoftware.com/wiki/Vocabulary/star#dyadic
[15] 01:18:20 Jelly programming language
https://github.com/DennisMitchell/jellylanguage
https://aplwiki.com/wiki/Jelly
[16] 01:25:14 Zilde Empty https://aplwiki.com/wiki/Zilde
BQN's Nothing https://mlochbaum.github.io/BQN/help/nothing.html
Monadic and Dyadic Meanings https://aplwiki.com/wiki/Mnemonics#Pairing_monadic_and_dyadic_meanings
Overloading in BQN https://mlochbaum.github.io/BQN/commentary/overload.html
q Programming Language https://code.kx.com/q/
Overloading in q https://code.kx.com/q/ref/overloads
q Unary Forms https://code.kx.com/q/basics/exposed-infrastructure/#unary-forms
[17] 01:30:56 Michael Higginson Episode of ArrayCast https://www.arraycast.com/episodes/episode46-michael-higginson
Lynn Sutherland Nial Episode of ArrayCast https://www.arraycast.com/episodes/episode61-lynn-sutherland-and-nial
NARS2000 Programming Language https://www.nars2000.org/
Hyperators in NARS2000 https://wiki.nars2000.org/index.php?title=Anonymous_Functions/Operators/Hyperators
Hyperators in Dyalog https://dfns.dyalog.com/n_hyperators.htm
[18] 01:41:46 Category Theory https://en.wikipedia.org/wiki/Category_theory
[19] 01:45:25 Contact AT ArrayCast DOT Com