Ich habe die folgenden Arten in Racket definiert:Anlage auf definierte Typen in Racket
(define-type vname (Pairof String Integer))
(define-type term (U vname (Listof (Pairof String term))))
(define-type subst (Listof (Pairof vname term)))
Wie würde ich eine Prozedur (lift s t)
mit Signatur definieren (-> subst term term)
, die auf konditioniert ist, ob t
vom Typ vname
oder (Listof (Pairof String term))
? Gibt es eine einfache Möglichkeit, den tatsächlichen Typ eines Union-Typs zu testen? Wenn ich stattdessen (define-type term (U String Integer))
hätte, könnte ich string?
verwenden, um zu testen, ob t
eine Zeichenfolge ist; Wie würde ich das auf meine Situation ausdehnen?
Aber wie würde ich definieren "Term" mit einer Struktur? – Simeon
Ich kenne Ihr Problem nicht. Aber es sieht so aus, als könnten Sie ein '(struct foo (str term)' und dann 'definieren (type-type (U vname (Listof foo))'. Sie könnten sogar eine Struktur definieren, um die Liste selbst zu umbrechen). – Gibstick