B
This commit is contained in:
parent
e5e8880e41
commit
518da4a923
1019 changed files with 15877 additions and 0 deletions
|
|
@ -0,0 +1,33 @@
|
|||
dim stack(5000, 3) # BASIC-256 lacks functions (as of ver. 0.9.6.66)
|
||||
stack[0,0] = 3 # M
|
||||
stack[0,1] = 7 # N
|
||||
lev = 0
|
||||
|
||||
gosub ackermann
|
||||
print "A("+stack[0,0]+","+stack[0,1]+") = "+stack[0,2]
|
||||
end
|
||||
|
||||
ackermann:
|
||||
if stack[lev,0]=0 then
|
||||
stack[lev,2] = stack[lev,1]+1
|
||||
return
|
||||
end if
|
||||
if stack[lev,1]=0 then
|
||||
lev = lev+1
|
||||
stack[lev,0] = stack[lev-1,0]-1
|
||||
stack[lev,1] = 1
|
||||
gosub ackermann
|
||||
stack[lev-1,2] = stack[lev,2]
|
||||
lev = lev-1
|
||||
return
|
||||
end if
|
||||
lev = lev+1
|
||||
stack[lev,0] = stack[lev-1,0]
|
||||
stack[lev,1] = stack[lev-1,1]-1
|
||||
gosub ackermann
|
||||
stack[lev,0] = stack[lev-1,0]-1
|
||||
stack[lev,1] = stack[lev,2]
|
||||
gosub ackermann
|
||||
stack[lev-1,2] = stack[lev,2]
|
||||
lev = lev-1
|
||||
return
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
# BASIC256 since 0.9.9.1 supports functions
|
||||
for m = 0 to 3
|
||||
for n = 0 to 4
|
||||
print m + " " + n + " " + ackermann(m,n)
|
||||
next n
|
||||
next m
|
||||
end
|
||||
|
||||
function ackermann(m,n)
|
||||
if m = 0 then
|
||||
ackermann = n+1
|
||||
else
|
||||
if n = 0 then
|
||||
ackermann = ackermann(m-1,1)
|
||||
else
|
||||
ackermann = ackermann(m-1,ackermann(m,n-1))
|
||||
endif
|
||||
end if
|
||||
end function
|
||||
7
Task/Ackermann-function/BBC-BASIC/ackermann-function.bbc
Normal file
7
Task/Ackermann-function/BBC-BASIC/ackermann-function.bbc
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
PRINT FNackermann(3, 7)
|
||||
END
|
||||
|
||||
DEF FNackermann(M%, N%)
|
||||
IF M% = 0 THEN = N% + 1
|
||||
IF N% = 0 THEN = FNackermann(M% - 1, 1)
|
||||
= FNackermann(M% - 1, FNackermann(M%, N%-1))
|
||||
11
Task/Ackermann-function/BCPL/ackermann-function.bcpl
Normal file
11
Task/Ackermann-function/BCPL/ackermann-function.bcpl
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
GET "libhdr"
|
||||
|
||||
LET ack(m, n) = m=0 -> n+1,
|
||||
n=0 -> ack(m-1, 1),
|
||||
ack(m-1, ack(m, n-1))
|
||||
|
||||
LET start() = VALOF
|
||||
{ FOR i = 0 TO 6 FOR m = 0 TO 3 DO
|
||||
writef("ack(%n, %n) = %n*n", m, n, ack(m,n))
|
||||
RESULTIS 0
|
||||
}
|
||||
31
Task/Ackermann-function/Batch-File/ackermann-function-1.bat
Normal file
31
Task/Ackermann-function/Batch-File/ackermann-function-1.bat
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
::Ackermann.cmd
|
||||
@echo off
|
||||
set depth=0
|
||||
:ack
|
||||
if %1==0 goto m0
|
||||
if %2==0 goto n0
|
||||
|
||||
:else
|
||||
set /a n=%2-1
|
||||
set /a depth+=1
|
||||
call :ack %1 %n%
|
||||
set t=%errorlevel%
|
||||
set /a depth-=1
|
||||
set /a m=%1-1
|
||||
set /a depth+=1
|
||||
call :ack %m% %t%
|
||||
set t=%errorlevel%
|
||||
set /a depth-=1
|
||||
if %depth%==0 ( exit %t% ) else ( exit /b %t% )
|
||||
|
||||
:m0
|
||||
set/a n=%2+1
|
||||
if %depth%==0 ( exit %n% ) else ( exit /b %n% )
|
||||
|
||||
:n0
|
||||
set /a m=%1-1
|
||||
set /a depth+=1
|
||||
call :ack %m% 1
|
||||
set t=%errorlevel%
|
||||
set /a depth-=1
|
||||
if %depth%==0 ( exit %t% ) else ( exit /b %t% )
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
::Ack.cmd
|
||||
@echo off
|
||||
cmd/c ackermann.cmd %1 %2
|
||||
echo Ackermann(%1, %2)=%errorlevel%
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
( Ack
|
||||
= m n
|
||||
. !arg:(?m,?n)
|
||||
& ( !m:0&!n+1
|
||||
| !n:0&Ack$(!m+-1,1)
|
||||
| Ack$(!m+-1,Ack$(!m,!n+-1))
|
||||
)
|
||||
);
|
||||
61
Task/Ackermann-function/Bracmat/ackermann-function-2.bracmat
Normal file
61
Task/Ackermann-function/Bracmat/ackermann-function-2.bracmat
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
( A
|
||||
= m n value key eq chain
|
||||
, find insert future stack va val
|
||||
. ( chain
|
||||
= key future skey
|
||||
. !arg:(?key.?future)
|
||||
& str$!key:?skey
|
||||
& (cache..insert)$(!skey..!future)
|
||||
&
|
||||
)
|
||||
& (find=.(cache..find)$(str$!arg))
|
||||
& ( insert
|
||||
= key value future v futureeq futurem skey
|
||||
. !arg:(?key.?value)
|
||||
& str$!key:?skey
|
||||
& ( (cache..find)$!skey:(?key.?v.?future)
|
||||
& (cache..remove)$!skey
|
||||
& (cache..insert)$(!skey.!value.)
|
||||
& ( !future:(?futurem.?futureeq)
|
||||
& (!futurem,!value.!futureeq)
|
||||
|
|
||||
)
|
||||
| (cache..insert)$(!skey.!value.)&
|
||||
)
|
||||
)
|
||||
& !arg:(?m,?n)
|
||||
& !n+1:?value
|
||||
& :?eq:?stack
|
||||
& whl
|
||||
' ( (!m,!n):?key
|
||||
& ( find$!key:(?.#%?value.?future)
|
||||
& insert$(!eq.!value) !future
|
||||
| !m:0
|
||||
& !n+1:?value
|
||||
& ( !eq:&insert$(!key.!value)
|
||||
| insert$(!key.!value) !stack:?stack
|
||||
& insert$(!eq.!value)
|
||||
)
|
||||
| !n:0
|
||||
& (!m+-1,1.!key)
|
||||
(!eq:|(!key.!eq))
|
||||
| find$(!m,!n+-1):(?.?val.?)
|
||||
& ( !val:#%
|
||||
& ( find$(!m+-1,!val):(?.?va.?)
|
||||
& !va:#%
|
||||
& insert$(!key.!va)
|
||||
| (!m+-1,!val.!eq)
|
||||
(!m,!n.!eq)
|
||||
)
|
||||
|
|
||||
)
|
||||
| chain$(!m,!n+-1.!m+-1.!key)
|
||||
& (!m,!n+-1.)
|
||||
(!eq:|(!key.!eq))
|
||||
)
|
||||
!stack
|
||||
: (?m,?n.?eq) ?stack
|
||||
)
|
||||
& !value
|
||||
)
|
||||
& new$hash:?cache
|
||||
11
Task/Ackermann-function/Bracmat/ackermann-function-3.bracmat
Normal file
11
Task/Ackermann-function/Bracmat/ackermann-function-3.bracmat
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
( AckFormula
|
||||
= m n
|
||||
. !arg:(?m,?n)
|
||||
& ( !m:0&!n+1
|
||||
| !m:1&!n+2
|
||||
| !m:2&2*!n+3
|
||||
| !m:3&2^(!n+3)+-3
|
||||
| !n:0&AckFormula$(!m+-1,1)
|
||||
| AckFormula$(!m+-1,AckFormula$(!m,!n+-1))
|
||||
)
|
||||
)
|
||||
7
Task/Ackermann-function/Brat/ackermann-function.brat
Normal file
7
Task/Ackermann-function/Brat/ackermann-function.brat
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
ackermann = { m, n |
|
||||
when { m == 0 } { n + 1 }
|
||||
{ m > 0 && n == 0 } { ackermann(m - 1, 1) }
|
||||
{ m > 0 && n > 0 } { ackermann(m - 1, ackermann(m, n - 1)) }
|
||||
}
|
||||
|
||||
p ackermann 3, 4 #Prints 125
|
||||
Loading…
Add table
Add a link
Reference in a new issue