Gibt es ein Symbol oder ein bekanntes Idiom für die bedingte Funktion in einem der APL-Dialekte?Bedingte Funktion in APL
Ich bin sicher, dass ich etwas vermisse, weil es so ein grundlegendes Sprachelement ist. In anderen Sprachen heißt es bedingter Operator, aber ich werde diesen Begriff hier vermeiden, weil ein APL-Operator etwas ganz anderes ist.
Zum Beispiel C und Freunde haben x ? T : F
lispelt haben (if x T F)
Python T if x else F
und so weiter hat.
Ich weiß moderne APLs haben :If
und Freunde, aber sie sind zwingend notwendig, Aussagen Programmablauf zu steuern: sie keinen Wert zurückgibt, kann nicht in einem Ausdruck verwendet werden, und schon gar nicht auf Anordnungen von booleans angewandt werden. Sie haben einen ganz anderen Zweck, was bei mir in Ordnung ist.
Der einzige anständige Ausdruck, den ich einfiel eine funktionale Auswahl zu tun ist, (F T)[⎕IO+x]
, die nicht besonders für mich sieht eine Abkürzung oder lesbar, obwohl es wird die Arbeit getan, auch auf Arrays:
('no' 'yes')[⎕IO+(⍳5)∘.>(⍳5)]
no no no no no
yes no no no no
yes yes no no no
yes yes yes no no
yes yes yes yes no
Ich versuchte mit dem Squad ⌷
einen ähnlichen Ausdruck zu finden, scheiterte aber kläglich an booleschen Arrays. Selbst wenn ich könnte, müsste es immer noch ⎕IO
oder eine hardcoded 1 einbetten, was noch schlimmer ist, was die Lesbarkeit betrifft.
Bevor ich weitermachen und meine eigene if
definieren und sie auf jedem Programm verwenden, das ich jemals schreiben werde, gibt es irgendeinen Canon auf diesem? Fehle ich eine offensichtliche Funktion oder einen Operator?
(Gibt es APL-Programmierer auf SO? :-)
Danke. Ich komme von einem C-Hintergrund, so dass Indexursprung bei Null sehr sinnvoll für mich ist, aber ich wollte nicht gegen den "APL-Weg" gehen – Tobia
Tonnen von Iversons Papieren nehmen durchweg den Nullpunkt an. Es ist eine gute Wahl, wenn es vereinfacht, was Sie tun. –