Start to convert Newton-Raphson notebook to Joy kernel.

This commit is contained in:
Simon Forman 2021-11-24 13:44:38 -08:00
parent 865f06d93d
commit 688f880b9f
1 changed files with 69 additions and 15 deletions

View File

@ -10,15 +10,6 @@
"Cf. [\"Why Functional Programming Matters\" by John Hughes](https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf)"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"from notebook_preamble import J, V, define"
]
},
{
"cell_type": "markdown",
"metadata": {},
@ -47,15 +38,78 @@
"cell_type": "markdown",
"metadata": {},
"source": [
" a n over / + 2 /\n",
" a n a / + 2 /\n",
" a n/a + 2 /\n",
" a+n/a 2 /\n",
" (a+n/a)/2\n",
"Starting with $\\frac{(a_i+\\frac{n}{a_i})}{2}$ we can derive the Joy expression to compute it using abstract dummy variables to stand in for actual values. First undivide by two:\n",
"\n",
"$(a_i+\\frac{n}{a_i})$ `2 /`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Then unadd terms:\n",
"\n",
"$a_i$ $\\frac{n}{a_i}$ `+ 2 /`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Undivide again:\n",
"\n",
"$a_i$ $n$ $a_i$ `/ + 2 /`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finally deduplicate the $a_i$ term:\n",
"\n",
"$a_i$ $n$ `over / + 2 /`"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Let's try out this function `over / + 2 /` on an example:"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" 5 36 • over / + 2 /\n",
"5 36 5 • / + 2 /\n",
" 5 7 • + 2 /\n",
" 12 • 2 /\n",
" 12 2 • /\n",
" 6 • \n",
"\n",
"6"
]
}
],
"source": [
"clear\n",
"\n",
"5 36 [over / + 2 /] trace"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The function we want has the argument `n` in it:\n",
"\n",
" F == n over / + 2 /"
" n over / + 2 /"
]
},
{