1

I would like to print the function definition of any nested function when printing the definition of the outer function. Example:

g:{sin x}
f:{cos g x}

When I print f I get {cos g x} but I want to get {cos {sin x} x}

Thanks for the help

1 Answer 1

4

From what I am aware it is not possible to achieve that with in-build functions.

You can attempt to write your own function that does that but it will be a pain in the end. Something like this maybe:

q)m:string[v]!string value each v:value[f][3] except `

which creates a dictionary m :

q)m
,"g"| "{sin x}"

When given a function value returns a list containing (bytecode;parameters;locals(context;globals);constants[0];...;constants[n];definition)

However, if we pass a symbol to value it returns the value of that symbol (or function definition in this case).

You can then use ssr to replace the functions in f with the function definitions stored in your dictionary m.

q)ssr/[last value[f];key m;value m]
"{cos {sin x} x}"

but to ensure that your function is stable and adaptable to different functions would be very difficult.

For more details about how value have a look here: https://code.kx.com/q/ref/metadata/#value

For ssr check this link: https://code.kx.com/q/ref/strings/#ssr

Sign up to request clarification or add additional context in comments.

1 Comment

Note - your value[f][9] is version specific. Value only returns 5 items in v3.4 and prior. last might work for now but could be subject to change

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.