_Algol 60_

The "Algol 60" language for DrScheme impl       ,(compile-expression index context 'num))]
	       [else (raise-syntax-error
		      #f
		      "confused by variable"
		      array)]))]
         [($ a60:binary t argt op e1 e2)
	  (check-type t type expr)
          (at op
              `(,(as-builtin op) ,(compile-expression e1 context argt) ,(compile-expression e2 context argt)))]
         [($ a60:unary t argt op e1)
	  (check-type t type expr)
          (at op
              `(,(as-builtin op) ,(compile-expression e1 context argt)))]
         [($ a60:variable var subscripts)
          (let ([sub (lambda (wrap v)
                       (wrap
                        (if (null? subscripts)
                            v
                            `(array-ref ,v ,@(map (lambda (e) (compile-expression e context 'num)) subscripts)))))])
            (cond
              [(call-by-name-variable? var context)
               => (lambda (spec)
                    (check-spec-type spec type var)
                    (sub (lambda (val) `(coerce ',(spec-coerce-target spec) ,val)) `(get-value ,var)))]
	      [(primitive-variable? var context)
	       => (lambda (name)
		    (sub values
                         (datum->syntax-object
			  (current-compile-context)
			  name
			  var
			  var)))]
              [(and (procedure-result-variable? var context)
                    (not (eq? type 'func)))
               (unless (null? subscripts)
                 (raise-syntax-error "confused by subscripts" var))
               (let ([spec (procedure-result-spec var context)])
                 (check-spec-type spec type var)
                 (at var
                     `(coerce
                       ',(spec-coerce-target spec)
                       ,(procedure-result-variable-name var context))