2017-10-15 3 views
2

Ich versuche, einige Funktionalität ähnlich wie Schema zu erreichen, indem Sie rohe Operatoren definieren und übergeben. In Schema können Sieperl6 Übergeben von Operatoren als Argumente

(define x +) (x 1 2) 

und dieser Vorgang wird Ihnen 3. Perl6 beantworten, muss ich irgendwie den Bediener in einer anderen Funktion in Auftrag, das gleiche zu erreichen:

sub x($a) { $a * 2; } 
sub y($m, $n) { $m($n); } 
say y(&x, 3); # gives you 6 
say y(+, 3) # this is error 

Gibt es ein einfacher Weg, um Bediener und Funktionen zu übergeben?

Danke.

Antwort

6

I Schema nicht tun, aber

(define x +) 

möchte etwas entsprechen

my constant &x = &infix:<+>; 

Dann

say x(1,2) 

Wille Ausgang 3 als auch.

Es gibt auch eine Kurzschreibweise &[+] für die Weitergabe von Operatoren, wenn Sie den oben verwendeten kanonischen Namen zu umständlich finden.

Beachten Sie, dass ich nicht ganz sicher bin, was Sie mit Ihrem Perl6-Code zu tun versucht haben, da dieser sich vom Schema-Snippet unterscheidet.

+0

Danke Christoph! "constant" und "& [+]" sind für mich beide neue Konzepte. Ich habe heute etwas gelernt! Vielen Dank !! – lisprogtor