Wie würden Sie Set verwenden! in einer einfachen Prozedur f so, dass das Auswerten (+ (f 0) (f 1)) 0 zurückgibt, wenn die Argumente von + von links nach rechts ausgewertet werden, aber 1 zurückgibt, wenn die Argumente von rechts nach links ausgewertet werden?So verwenden Sie Set! in Schema Funktionen?
5
A
Antwort
6
Am einfachsten ist es wahrscheinlich, einen externen Zustand zu speichern und die Implementierung von f beeinflussen seinen Inhalt.
(define x 0)
(define (f n) (let ((tmp x)) (set! x n) tmp))
So x anfänglich 0 und jeder Aufruf f den aktuellen Wert von x zurückzukehren und das Argument als neuer Wert von x zu speichern. Somit wird (f 0) gefolgt von (f 1) beide 0 zurückgeben und den endgültigen x-Wert von 1 belassen. Während die Auswertung (f 1) gefolgt von (f 0) 0 ergibt, dann 1, mit einem endgültigen x von 0.
-1
Mit call/cc.
(define (f)
(call/cc
(lambda (c) (+ (c 0) (c 1)))))
(write (f))
innerhalb jeden Arguments +
Ursachen Aufrufe c f
unmittelbar zurückzukehren, wodurch man 0 oder 1 je nachdem, welche zuerst Argument ausgewertet wird.
Aber ich vermute, es wird immer von links nach rechts ausgewertet und somit 0 zurückgeben.
Verwandte Themen
- 1. So verwenden Sie MySQL-Funktionen in Propel
- 2. Verwenden Sie mich. in Funktionen
- 3. So vermeiden Sie complexTypes in XML-Schema
- 4. So überspringen Sie Funktionen?
- 5. HSQLDB prepareStatement ("SET SCHEMA?") Fehler
- 6. So verwenden Sie int16_t oder int32_t mit Funktionen wie scanf
- 7. So verwenden Sie mehrere Funktionen auf onsubmit-Schaltfläche
- 8. Python - So speichern Sie Funktionen
- 9. So erstellen Sie benutzerdefinierte Funktionen in SQLite
- 10. So führen Sie Funktionen in Postgres aus
- 11. So verwenden Sie die Schnittstelle in Konstante
- 12. So richten Sie Schema-aware XQuery ein
- 13. So verwenden Sie DropDownListFor
- 14. Wie verwenden Sie stls Funktionen wie for_each?
- 15. Verwenden von Zeichensatz in Schema
- 16. Wie Schema verwenden, in DMBS SAS-Verbindung
- 17. Verwenden Sie F # in Azure-Funktionen
- 18. So aktualisieren Sie das EventSource-Schema
- 19. C++: Verwenden Sie benutzerdefinierte generische Funktionen
- 20. So verwenden Sie ECC in iOS
- 21. So erstellen Sie Funktionen auf Paketebene?
- 22. So verwenden Sie SetTimeout() in Coffeescript
- 23. Verwenden Sie Schema-Namen in NHibernate Query - Version 1.2.0
- 24. In Schema, was ist der Sinn von "set!"?
- 25. So verwenden Sie einen URI in Java
- 26. So verwenden Sie async/erwarten in Typoskript
- 27. So verwenden Sie Transaktion in Eloquent Modell
- 28. So verwenden Sie LGSideMenuController
- 29. So verwenden Sie appStoreReceiptURL
- 30. So verwenden Sie Splitter