Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (define (prefix->list los)
- (local
- (
- ;list-tail: (listof symbol/number) number -> (listof symbol(number)
- ;Gib die Liste ab gegebenen Index wieder
- (define (list-tail loa num)
- (local
- (
- (define le (length loa))
- ;list-tail: (listof symbol/number) number (listof symbol/number) -> (listof symbol/number)
- ;Gib die Liste ab gegebenen Index wieder
- (define (list-tail loa num akk)
- (cond
- [(> num (sub1 le)) (error 'list-tail "index reaches a non-pair index")]
- [(= num (sub1 le)) (if (empty? akk)
- (list(list-ref loa num))
- (append akk (list (list-ref loa num)) empty))]
- [else (list-tail loa (add1 num) (append akk (list(list-ref loa num))))]
- )
- )
- )
- (list-tail loa num empty)
- )
- )
- ;recursive-length: (listof number/symbol/list) -> number
- ;Gib die rekursive Länge einer Liste an
- (define (recursive-length ls)
- (if (empty? ls)
- 0
- (if (not (list? (first ls)))
- (+ 1 (recursive-length (rest ls)))
- (+ (recursive-length (first ls)) (recursive-length (rest ls))))))
- (define operator (or (eq? (first los) '+)
- (eq? (first los) '-)
- (eq? (first los) '*)
- (eq? (first los) '/)))
- ;dice: symbol -> boolean
- ;Abfrage, ob es ein Würfel ist
- (define (dice d) (or (eq? d 'w4)
- (eq? d 'w6)
- (eq? d 'w8)
- (eq? d 'w10)
- (eq? d 'w12)
- (eq? d 'w20)
- (eq? d 'w100)))
- ;attribute: symbol -> boolean
- ;Abfrage, ob es sich um ein Attribut handelt
- (define (attribute a) (or (eq? a '%CO)
- (eq? a '%RE)
- (eq? a '%ST)
- (eq? a '%IN)
- (eq? a '%CH)))
- )
- (cond
- [(or (number? (first los)) (dice (first los)) (attribute (first los))) (first los)]
- [operator
- (local
- (
- (define first-operator (prefix->list (rest los)))
- (define second-operator
- (if (or (number? first-operator)(dice first-operator)(attribute first-operator))
- (prefix->list (list-tail los 2))
- (prefix->list (list-tail los (+ 1 (recursive-length first-operator))))))
- )
- (list
- (first los)
- first-operator
- second-operator))]
- )
- )
- )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement