Jeffrey Meunier ha un Curry implicita macro here, che utilizza defmacro. Mi stavo chiedendo se qualcuno lo abbia mai scritto con le regole della sintassi?Corrispondenza implicita in Schema con regole di sintassi?
risposta
Esistono numerose implementazioni di curry per Scheme: nessuna può essere elegante come Haskell, poiché le funzioni sono sempre funzioni unarie, quindi tutto può essere curato. (Ma questo può naturalmente essere implementato in uno schema sufficientemente potente come Racket.)
Come per la macro che hai scavato - è piuttosto brutto: non solo usa una macro non igienica, è anche chiamando eval
esplicitamente, e si basa su un'implementazione di ambienti ecc ma è facile farlo con un semplice syntax-rules
macro. AFAICT, questo è ciò che implementa:
(define-syntax-rule (clambda (x ... . r) b ...)
(let ([len (length '(x ...))] [real (lambda (x ... . r) b ...)])
(let loop ([argss '()] [n 0])
(lambda args
(let ([n (+ n (length args))] [argss (cons args argss)])
(if (>= n len)
(apply real (apply append (reverse argss)))
(loop argss n)))))))
Ma c'è una nota importante qui. La pagina di riferimento indica che un problema della versione della funzione è esplicito, ma ha anche un vantaggio importante: con l'implementazione della macro è necessario definire una funzione utilizzando clambda
, mentre la versione funzionale può essere utilizzata con qualsiasi versione integrata funzione. In molte implementazioni di Scheme ci sono strutture per ispezionare l'aritmetica di una funzione, e usando questo è possibile implementare una versione di funzione currying che sa quando chiamare la funzione originale.
- 1. Regole di conversione implicita di argomenti di template
- 2. Sintassi e regole di evidenziazione della sintassi
- 3. Regole semantiche/Regole dell'albero della sintassi astratta
- 4. regole di corrispondenza dato un input (algoritmo)
- 5. Corrispondenza dell'array secondario nell'array. Schema nello schema
- 6. Gamma comportamento carattere jolly corrispondenza con regole di confronto-sensitive
- 7. Schema di sintassi del carattere di parsing
- 8. Sintassi di espressioni regolari per "corrispondenza nulla"?
- 9. Prolog precedenza degli operatori e regole di corrispondenza
- 10. ERRORE: errore di sintassi in corrispondenza o vicino a "utente"
- 11. Postgresql: errore di sintassi in corrispondenza o vicino a "-"
- 12. SQL Server - Regole di analisi schema/codice - Quali sono le regole incluse?
- 13. regole di sintassi per Lazarus Pascal procedurali "Unità"
- 14. Spiegare le regole di sintassi e l'ambito per "typedef"
- 15. Conversione implicita con operatore
- 16. Conversione implicita in Runnable?
- 17. Creazione di hash implicita incoerente in Ruby?
- 18. illegale mix di regole di confronto (utf8_unicode_ci, implicita) e (utf8_general_ci, implicito) per il funzionamento '='
- 19. Sintassi di Groovy per la corrispondenza delle espressioni regolari
- 20. Errore di sintassi in corrispondenza o vicino a "utente" quando si aggiunge il vincolo Postgres
- 21. Classe tipo stringa C++ con conversione implicita
- 22. Come vengono utilizzati i pattern vettoriali nelle regole della sintassi?
- 23. conversione implicita float/int
- 24. Qual è la sintassi per byte_size nella corrispondenza del modello?
- 25. Versione implicita di IsAssignableFrom?
- 26. regole di sicurezza di base con Firebase
- 27. Schema in Emacs esplode schema di colori
- 28. Sintassi durante l'impostazione dello schema per Pyspark.sql utilizzando StructType
- 29. Classe implicita rispetto alla conversione implicita in tratto
- 30. Inizializzazione implicita del ciclo di loop