Re: [m-users.] Correct use of solutions.

"Sean Charles (emacstheviking)" <[email protected]>
Newsgroups gmane.comp.lang.mercury.general
Message-ID <[email protected]>
Thank you Julien and Volker.


I have ended up with this, which both works and has helped me increase my understanding of Mercury a little more!

show_targets(!IO) :-
    io.format("Available target languages and command line flags:\n", [], !IO),
    solutions((pred(Entry::out) is nondet :-
        target_name(_, Flag, Text),
        string.format("  %-20s -t %s", [ s(Text), s(Flag) ], Entry)
    ), Targets),
    io.write_list(Targets, "\n", io.print, !IO),
    io.nl(!IO).

    % All supported targets and their command line equivalents.
    %
:- pred target_name(supported_target, string, string).
:- mode target_name(in, out, out) is det.
:- mode target_name(out, out, out) is multi.

target_name(language_c, "c", "C").
target_name(language_python, "python", "Python - untyped").
target_name(language_pythont, "pythont", "Python - typed").
target_name(language_js, "js", "JavaScript").

When I run my tool with the '-T' option to list targets,

Available target languages and command line flags:
  C                    -t c
  JavaScript           -t js
  Python - typed       -t pythont
  Python - untyped     -t python


Perfect, thanks again!
:)
Sean


> On 29 Jul 2023, at 10:21, Volker Wysk <[email protected]> wrote:
> 
> Am Samstag, dem 29.07.2023 um 09:27 +0100 schrieb Sean Charles
> (emacstheviking):
>> I've been trying to produce a simple list of strings to output as the
>> response to a command line argument request to list the supported targets
>> of my transpiler, given I have a type and a predicate to return the
>> printable string for the language I thought solutions/2 was my answer, but
>> not so far! Again, it's a mixture of the terminology to my untutored brain
>> and the lack of any really clear guiding examples, in Prolog this stuff is
>> trivial!
>> 
>> 
>>     % Does -T / --targets.
>>     %
>> :- type supported_target
>>     --->    language_c
>>     ;       language_python
>>     ;       language_pythont
>>     ;       language_js.
>> 
>> :- pred show_targets(io::di, io::uo) is det.
>> 
>> 300:show_targets(!IO) :-
>> 301:    io.format("Available target languages:", [], !IO),
>> 302:    solutions(
>> 303:       (pred(A::out) is nondet :-
>> 304:            target_name(_, A)
>> 305:        ),
>> 306:       Targets
>> 307:    ),
>> 308:    io.print_line(Targets, !IO).
>> 
>> 
>> 
>> :- pred target_name(supported_target, string).
>> :- mode target_name(in, out) is det.
>> 
>> target_name(language_c, "Vanilla C").
>> target_name(language_python, "Vanilla Python").
>> target_name(language_pythont, "Typed Python").
>> target_name(language_js, "Vanilla JavaScript").
> 
> 
> I don't know if there's a way to return (nondeterministically) all things of
> an enumeration type. If there isn't, define one:
> 
> :- pred get_target(supported_target::out) is multi.
> 
> get_target(language_c).
> get_target(language_python).
> get_target(language_pythont).
> get_target(language_js).
> 
> 
> Then you can do:
> 
> solutions(
>  (pred(A::out) is multi :-
>      get_target(T), 
>      target_name(T, A)
>  ),
>  Targets)
> 
> 
> Cheers,
> Volker
> _______________________________________________
> users mailing list
> [email protected] <mailto:[email protected]>
> https://lists.mercurylang.org/listinfo/users

_______________________________________________
users mailing list
[email protected]
https://lists.mercurylang.org/listinfo/users
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.