Y combinator: Difference between revisions
Content added Content deleted
Line 315: | Line 315: | ||
</pre> |
</pre> |
||
--> |
--> |
||
The version below works with Algol 68 Genie 2.8.4 tested with linux kernel release 5.16.11-200.fc35.x86_64 |
|||
<lang algol68>BEGIN |
|||
# This version needs partial parameterisation in order to work # |
|||
# The commented code is JavaScript aka ECMAScript ES6 # |
|||
MODE F = PROC( INT ) INT ; |
|||
MODE Y = PROC( Y ) F ; |
|||
# Y = f => ( y => y( y ) )( y => f( arg => y( y )( arg ) ) ) ; # |
|||
PROC y = ( PROC( F ) F pff ) F: |
|||
( ( Y y ) F: y( y ) ) |
|||
( |
|||
( |
|||
( PROC( F ) F pff , Y y ) F: |
|||
pff( ( ( Y y , INT arg ) INT: y( y )( arg ) )( y , ) ) |
|||
)( pff , ) |
|||
) |
|||
; |
|||
# fibgen = fib => ( n => ( ( n === 0 ) ? 0 : ( n === 1 ) ? 1 : fib( n - 2 ) + fib( n - 1 ) ) ) ; # |
|||
PROC( F ) F fibgen = ( F fib ) F: |
|||
( ( F fib , INT n ) INT: CASE n IN 1 , 1 OUT fib( n - 2 ) + fib( n - 1 ) ESAC )( fib , ) |
|||
; |
|||
# for ( let i = 1 ; i <= 12 ; i++) { console.log( " " +Y( fibgen )( i ) ) ; } # |
|||
INT nofibs = 12 ; |
|||
print( ( "The first " , whole( nofibs , 0 ) , " fibonacci numbers." , newline ) ) ; |
|||
FOR i TO nofibs |
|||
DO |
|||
print( whole( y( fibgen )( i ) , -11 ) ) |
|||
OD ; |
|||
print( newline ) |
|||
END</lang> |
|||
=={{header|AppleScript}}== |
=={{header|AppleScript}}== |