Prolog lets you specify a series of declarative logic statements (i.e. “X is an Apple”, “if X is an Apple then X is a fruit”). It can trace through all solutions to a problem. In the IDE this is done by pressing “;”. If you structure your program correctly, you can get the whole output to print to a file.
main :- set_prolog_flag(toplevel_print_options, [quoted(true)]), subset(['A', 'A#', 'B', 'C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#'], X), write(X), nl,fail;true. run :- main, halt.
This triggers a loop by failing each output – since the result is always considered a failure, Prolog looks for the next valid result. The first line of main sets output options – this ensures that long values are not truncated with an ellipsis. The second line is your function call. “Write” displays the results to the command line, and nl adds a line break. “Fail” causes the function to be re-evaluated with the next set of parameters, but ultimately main returns “true”, so that anything that calls it can continue on.
Run it like so:
swipl -s test.pl -t run > output.txt
The -s argument specifies a file containing declaration statements. -t specifies a default goal to evaluate.