langs a-z

This commit is contained in:
Ingy döt Net 2013-04-10 22:43:41 -07:00
parent db842d013d
commit d066446780
11389 changed files with 98361 additions and 1020 deletions

View file

@ -0,0 +1,24 @@
using System;
using System.Console;
module Hofstadter
{
F(n : int) : int
{
|0 => 1
|_ => n - M(F(n - 1))
}
M(n : int) : int
{
|0 => 0
|_ => n - F(M(n - 1))
}
Main() : void
{
foreach (n in [0 .. 20]) Write("{0} ", F(n));
WriteLine();
foreach (n in [0 .. 20]) Write("{0} ", M(n));
}
}

View file

@ -0,0 +1,7 @@
let rec f = function
| 0 -> 1
| n -> n - m(f(n-1))
and m = function
| 0 -> 0
| n -> n - f(m(n-1))
;;

View file

@ -0,0 +1,19 @@
class MutualRecursion {
function : Main(args : String[]) ~ Nil {
for(i := 0; i < 20; i+=1;) {
f(i)->PrintLine();
};
"---"->PrintLine();
for (i := 0; i < 20; i+=1;) {
m(i)->PrintLine();
};
}
function : f(n : Int) ~ Int {
return n = 0 ? 1 : n - m(f(n - 1));
}
function : m(n : Int) ~ Int {
return n = 0 ? 0 : n - f(m(n - 1));
}
}

View file

@ -0,0 +1,34 @@
#import <objc/Object.h>
@interface Hofstadter : Object
+ (int)M: (int)n;
+ (int)F: (int)n;
@end
@implementation Hofstadter
+ (int)M: (int)n
{
if ( n == 0 ) return 0;
return n - [self F: [self M: (n-1)]];
}
+ (int)F: (int)n
{
if ( n == 0 ) return 1;
return n - [self M: [self F: (n-1)]];
}
@end
int main()
{
int i;
for(i=0; i < 20; i++) {
printf("%3d ", [Hofstadter F: i]);
}
printf("\n");
for(i=0; i < 20; i++) {
printf("%3d ", [Hofstadter M: i]);
}
printf("\n");
return 0;
}

View file

@ -0,0 +1,19 @@
function r = F(n)
for i = 1:length(n)
if (n(i) == 0)
r(i) = 1;
else
r(i) = n(i) - M(F(n(i)-1));
endif
endfor
endfunction
function r = M(n)
for i = 1:length(n)
if (n(i) == 0)
r(i) = 0;
else
r(i) = n(i) - F(M(n(i)-1));
endif
endfor
endfunction

View file

@ -0,0 +1,5 @@
# testing
ra = F([0:19]);
rb = M([0:19]);
disp(ra);
disp(rb);

View file

@ -0,0 +1,17 @@
#include <order/interpreter.h>
#define ORDER_PP_DEF_8f \
ORDER_PP_FN(8fn(8N, \
8if(8is_0(8N), \
1, \
8sub(8N, 8m(8f(8dec(8N)))))))
#define ORDER_PP_DEF_8m \
ORDER_PP_FN(8fn(8N, \
8if(8is_0(8N), \
0, \
8sub(8N, 8f(8m(8dec(8N)))))))
//Test
ORDER_PP(8for_each_in_range(8fn(8N, 8print(8f(8N))), 0, 19))
ORDER_PP(8for_each_in_range(8fn(8N, 8print(8m(8N))), 0, 19))

View file

@ -0,0 +1,15 @@
declare
fun {F N}
if N == 0 then 1
elseif N > 0 then N - {M {F N-1}}
end
end
fun {M N}
if N == 0 then 0
elseif N > 0 then N - {F {M N-1}}
end
end
in
{Show {Map {List.number 0 9 1} F}}
{Show {Map {List.number 0 9 1} M}}

View file

@ -0,0 +1,2 @@
F(n)=if(n,n-M(F(n-1)),1)
M(n)=if(n,n-F(M(n-1)),0)

View file

@ -0,0 +1,20 @@
test: procedure options (main);
M: procedure (n) returns (fixed) recursive; /* 8/1/2010 */
declare n fixed;
if n <= 0 then return (0);
else return ( n - F(M(n-1)) );
end M;
F: procedure (n) returns (fixed) recursive;
declare n fixed;
if n <= 0 then return (1);
else return ( n - M(F(n-1)) );
end F;
declare i fixed;
do i = 1 to 15;
put skip list ( F(i), M(i) );
end;
end test;

View file

@ -0,0 +1,34 @@
Program MutualRecursion;
{M definition comes after F which uses it}
function M(n : Integer) : Integer; forward;
function F(n : Integer) : Integer;
begin
if n = 0 then
F := 1
else
F := n - M(F(n-1));
end;
function M(n : Integer) : Integer;
begin
if n = 0 then
M := 0
else
M := n - F(M(n-1));
end;
var
i : Integer;
begin
for i := 0 to 19 do begin
write(F(i) : 4)
end;
writeln;
for i := 0 to 19 do begin
write(M(i) : 4)
end;
writeln;
end.

View file

@ -0,0 +1,6 @@
multi F(0) { 1 }; multi M(0) { 0 }
multi F(\𝑛) { 𝑛 - M(F(𝑛 - 1)) }
multi M(\𝑛) { 𝑛 - F(M(𝑛 - 1)) }
say map &F, ^20;
say map &M, ^20;

View file

@ -0,0 +1,17 @@
/female{
/n exch def
n 0 eq
{1}
{
n n 1 sub female male sub
}ifelse
}def
/male{
/n exch def
n 0 eq
{0}
{
n n 1 sub male female sub
}ifelse
}def

View file

@ -0,0 +1,13 @@
/F {
{
{0 eq} {pop 1} is?
{0 gt} {dup 1 sub F M sub} is?
} cond
}.
/M {
{
{0 eq} {pop 0} is?
{0 gt} {dup 1 sub M F sub} is?
} cond
}.

View file

@ -0,0 +1,9 @@
function F($n) {
if ($n -eq 0) { return 1 }
return $n - (M (F ($n - 1)))
}
function M($n) {
if ($n -eq 0) { return 0 }
return $n - (F (M ($n - 1)))
}

View file

@ -0,0 +1,4 @@
F 0 = 1;
M 0 = 0;
F n = n - M(F(n-1)) if n>0;
M n = n - F(M(n-1)) if n>0;

View file

@ -0,0 +1,4 @@
> let females = map F (0..10); females;
[1,1,2,2,3,3,4,5,5,6,6]
> let males = map M (0..10); males;
[0,0,1,2,2,3,4,4,5,6,6]

View file

@ -0,0 +1,42 @@
Declare M(n)
Procedure F(n)
If n = 0
ProcedureReturn 1
ElseIf n > 0
ProcedureReturn n - M(F(n - 1))
EndIf
EndProcedure
Procedure M(n)
If n = 0
ProcedureReturn 0
ElseIf n > 0
ProcedureReturn n - F(M(n - 1))
EndIf
EndProcedure
Define i
If OpenConsole()
For i = 0 To 19
Print(Str(F(i)))
If i = 19
Continue
EndIf
Print(", ")
Next
PrintN("")
For i = 0 To 19
Print(Str(M(i)))
If i = 19
Continue
EndIf
Print(", ")
Next
Print(#CRLF$ + #CRLF$ + "Press ENTER to exit")
Input()
CloseConsole()
EndIf

View file

@ -0,0 +1,20 @@
REBOL [
Title: "Mutual Recursion"
Date: 2009-12-14
Author: oofoe
URL: http://rosettacode.org/wiki/Mutual_Recursion
References: [http://en.wikipedia.org/wiki/Hofstadter_sequence#Hofstadter_Female_and_Male_sequences]
]
f: func [
"Female."
n [integer!] "Value."
] [either 0 = n [1][n - m f n - 1]]
m: func [
"Male."
n [integer!] "Value."
] [either 0 = n [0][n - f m n - 1]]
fs: [] ms: [] for i 0 19 1 [append fs f i append ms m i]
print ["F:" mold fs crlf "M:" mold ms]

View file

@ -0,0 +1,19 @@
print "F sequence:";
for i = 0 to 20
print f(i);" ";
next i
print :print "M sequence:";
for i = 0 to 20
print m(i);" ";
next i
end
function f(n)
f = 1
if n <> 0 then f = n - m(f(n - 1))
end function
function m(n)
m = 0
if n <> 0 then m = n - f(m(n - 1))
end function

View file

@ -0,0 +1,15 @@
define('f(n)') :(f_end)
f f = eq(n,0) 1 :s(return)
f = n - m(f(n - 1)) :(return)
f_end
define('m(n)') :(m_end)
m m = eq(n,0) 0 :s(return)
m = n - f(m(n - 1)) :(return)
m_end
* # Test and display
L1 s1 = s1 m(i) ' ' ; s2 = s2 f(i) ' '
i = le(i,25) i + 1 :s(L1)
output = 'M: ' s1; output = 'F: ' s2
end

View file

@ -0,0 +1,39 @@
$ include "seed7_05.s7i";
const func integer: m (in integer: n) is forward;
const func integer: f (in integer: n) is func
result
var integer: res is 0;
begin
if n = 0 then
res := 1;
else
res := n - m(f(n - 1));
end if;
end func;
const func integer: m (in integer: n) is func
result
var integer: res is 0;
begin
if n = 0 then
res := 0;
else
res := n - f(m(n - 1));
end if;
end func;
const proc: main is func
local
var integer: i is 0;
begin
for i range 0 to 19 do
write(f(i) lpad 3);
end for;
writeln;
for i range 0 to 19 do
write(m(i) lpad 3);
end for;
writeln;
end func;

View file

@ -0,0 +1,5 @@
fun f 0 = 1
| f n = n - m (f (n-1))
and m 0 = 0
| m n = n - f (m (n-1))
;

View file

@ -0,0 +1,5 @@
val rec f = fn 0 => 1
| n => n - m (f (n-1))
and m = fn 0 => 0
| n => n - f (m (n-1))
;

View file

@ -0,0 +1,2 @@
Define F(n) = when(n=0, 1, n - M(F(n - 1)))
Define M(n) = when(n=0, 0, n - F(M(n - 1)))

View file

@ -0,0 +1,37 @@
@(define f (n out))
@ (local n1 fn1 mfn1)
@ (cases)
@ (bind n "0")
@ (bind out "1")
@ (or)
@ (next `!echo $(( @n - 1 ))`)
@ n1
@ (f n1 fn1)
@ (m fn1 mfn1)
@ (next `!echo $(( @n - @mfn1 ))`)
@ out
@ (end)
@(end)
@(define m (n out))
@ (local n1 mn1 fmn1)
@ (cases)
@ (bind n "0")
@ (bind out "0")
@ (or)
@ (next `!echo $(( @n - 1 ))`)
@ n1
@ (m n1 mn1)
@ (f mn1 fmn1)
@ (next `!echo $(( @n - @fmn1 ))`)
@ out
@ (end)
@(end)
@(next `!seq 0 15`)
@(collect :vars ())
@ n
@ (f n fn)
@ (m n mn)
@ (output)
f(@n) = @fn; m(@n) = @mn
@ (end)
@(end)

View file

@ -0,0 +1,32 @@
M()
{
local n
n=$1
if [[ $n -eq 0 ]]; then
echo -n 0
else
echo -n $(( n - $(F $(M $((n-1)) ) ) ))
fi
}
F()
{
local n
n=$1
if [[ $n -eq 0 ]]; then
echo -n 1
else
echo -n $(( n - $(M $(F $((n-1)) ) ) ))
fi
}
for((i=0; i < 20; i++)); do
F $i
echo -n " "
done
echo
for((i=0; i < 20; i++)); do
M $i
echo -n " "
done
echo

View file

@ -0,0 +1,8 @@
#import std
#import nat
#import sol
#fix general_function_fixer 0
F = ~&?\1! difference^/~& M+ F+ predecessor
M = ~&?\0! difference^/~& F+ M+ predecessor

View file

@ -0,0 +1,3 @@
#cast %nLW
test = ^(F*,M*) iota 20

View file

@ -0,0 +1,18 @@
code ChOut=8, CrLf=9, IntOut=11;
ffunc M; \forward-referenced function declaration
func F(N);
int N;
return if N=0 then 1 else N - M(F(N-1));
func M(N);
int N;
return if N=0 then 0 else N - F(M(N-1));
int I;
[for I:= 0 to 19 do [IntOut(0, F(I)); ChOut(0, ^ )];
CrLf(0);
for I:= 0 to 19 do [IntOut(0, M(I)); ChOut(0, ^ )];
CrLf(0);
]