import { VariableNames } from 'src/types/VariableNames' ; import { ExpressionParams , FunctionExpressionParams , CallExpressionParams , HighlightedVariableExpressionParams } from 'src/types/ExpressionParamTypes' ; export const highlighted = ( name ) : HighlightedVariableExpressionParams => ( { name , highlighted : true } ) ; const nest = ( f , x , n ) : ExpressionParams => { if ( n === 0 ) { return x ; } else { return [ f , nest ( f , x , n - 1 ) ] ; } } ; export const numberParams = ( f , x , n ) : FunctionExpressionParams => { return { arg : f , body : { arg : x , body : nest ( f , x , n ) } } ; } ; export const numberParamsHighlightNumber = ( f , x , n ) : FunctionExpressionParams => { return { arg : f , body : { arg : x , body : nest ( { name : f , highlighted : true } , x , n ) } } ; } ; export const numberParamsHighlightNonNumber = ( f , x , n ) : FunctionExpressionParams => { return { arg : f , body : { arg : x , body : nest ( f , { name : x , highlighted : true } , n ) } } ; } ; export const succParams = ( a , b , c ) : FunctionExpressionParams => { return { arg : a , body : { arg : b , body : { arg : c , body : [ b , [ a , b , c ] ] } } } ; } ; export const addParams = ( a , b , c , d ) : FunctionExpressionParams => { return { arg : a , body : { arg : b , body : { arg : c , body : { arg : d , body : [ [ a , c ] , [ [ b , c ] , d ] ] } } } } ; } ; export const predParams = ( a , b , c , d , e , f ) : FunctionExpressionParams => { return { arg : a , body : { arg : b , body : { arg : c , body : [ a , { arg : d , body : { arg : e , body : [ e , [ d , b ] ] } } , { arg : f , body : c } , { arg : f , body : f } ] } } } ; } ; export const multParams = ( a , b , c ) : FunctionExpressionParams => { return { arg : a , body : { arg : b , body : { arg : c , body : [ a , [ b , c ] ] } } } ; } ; export const isZeroParams = ( a , b , c , d , e , trueExpression , falseExpression , testExpression ) : CallExpressionParams => [ [ [ [ testExpression , { arg : e , body : { arg : a , body : { arg : b , body : b } } } ] , { arg : c , body : { arg : d , body : c } } ] , trueExpression ] , falseExpression ] ;