Advertisement
Guest User

lab4

a guest
Nov 9th, 2018
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 2.76 KB | None | 0 0
  1. (define (interpret vec sst)
  2.   (define (iterif j)
  3.     (if (equal? 'endif (vector-ref vec j))
  4.         j
  5.         (iterif (+ j 1))))
  6.   (define (def j lst)
  7.    (if (equal? 'end (vector-ref vec j))
  8.        (cons '(cons (vector-ref vec (+ i 1)) lst)) slv)
  9.        (def (+ j 1) (cons (vector-ref vec j) lst)))
  10.   (define lit (
  11.               ('+  '(main slv (cons (+ (car st) (cadr lst)) (sddr st)) (+ i 1)))
  12.               ('-  '(main slv (cons (- (car st) (cadr lst)) (sddr st)) (+ i 1)))
  13.               ('*  '(main slv (cons (* (car st) (cadr lst)) (sddr st)) (+ i 1)))
  14.               ('/  '(main slv (cons (quotient (car st) (cadr lst)) (sddr st)) (+ i 1)))
  15.               ('mod  '(main slv (cons (remainder (car st) (cadr lst)) (cddr st)) (+ i 1)))
  16.               ('neg '(main slv (cons (- (car st)) (cdr st)) (+ i 1)))
  17.               ('= '(main slv (cons (if (equal? (car st) (cadr st)) -1 0) (cddr st)) (+ i 1)))
  18.               ('> '(main slv (cons (if (> (car st) (cadr st)) -1 0) (cddr st)) (+ i 1)))
  19.               ('< '(main slv (cons (if (< (car st) (cadr st)) -1 0) (cddr st)) (+ i 1)))
  20.               ('not '(main slv (cons (if (equal? 0 (car st)) -1 0) (cdr st)) (+ i 1)))  
  21.               ('and '(main slv (cons (if (or (equal? 0 (car st)) (or equal? 0(cadr st))) 0 -1)) (cdr st)) (+ i 1))
  22.               ('or '(main slv (cons (if (and (equal? 0 (car st)) (or equal? 0(cadr st))) 0 -1)) (cdr st)) (+ i 1))
  23.               ('drop '(main slv (cdr st) (+ i 1)))
  24.               ('swap '(main slv (cons (cadr st) (cons (car st) (cddr st))) (+ i 1)))
  25.               ('dup '(main slv (cons (car st) st) (+ i 1)))
  26.               ('over '(main slv (cons (cadr st) st) (+ i 1)))
  27.               ('rot '(main slv (cons (caddr st) (cons (cadr st) (cons (car st) (cdddr st)))) (+ i 1)))
  28.               ; ('depth    Как сделать декларативно?
  29.               ('define '(main slv (def (+ i 1) '())) (+ i 1)) ;как встроить рекурсию в словарь   ;define пишется на встроеном языке нужно ли сделать отдельный словарь и вставлять значение вместо вызова функции
  30.               ('if '(if (equal? (- 1) (vector-ref (+ 1 i)))
  31.                         (main slv st (+ i 1))
  32.                         (main slv st (iterif (+ i 2)))))
  33.               ))          
  34.              
  35.   (define (main slv st i)  ;обязательны ли отложеные вычисления
  36.     (if (equal? i (+ 1 (vector-length vec)))
  37.         st
  38.         (if (number? (vector-ref vec i))
  39.             (main slv (cons (vector-ref vec i) st) (+ i 1))
  40.            (cdr (assq (vector-ref vec i) slv)))))
  41.   (main lit sst 0) )
  42.  
  43. (interpret #(1 2 +) '())
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement