home *** CD-ROM | disk | FTP | other *** search
- ;;; -*- Mode: Lisp; Package: Maxima; Syntax: Common-Lisp; Base: 10 -*- ;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; The data in this file contains enhancments. ;;;;;
- ;;; ;;;;;
- ;;; Copyright (c) 1984,1987 by William Schelter,University of Texas ;;;;;
- ;;; All rights reserved ;;;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
- ;;; (c) Copyright 1981 Massachusetts Institute of Technology ;;;
- ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
- (in-package "MAXIMA")
- (macsyma-module runtim)
-
- ;; This file contains functions which are also defined as macros in the
- ;; standard Macsyma environment. They are defined here for the benefit
- ;; interpreted code in the fix file. This file is used only in the ITS
- ;; implementation, as the Macsyma macros are present at runtime in large
- ;; address space systems.
-
- ;; The above comment is idiotic. These functions are open-codeable,
- ;; and defined as macros only for efficiency. However, the correct
- ;; way to hack efficiency is through compiler:optimizers, which is
- ;; what we use now. This file is no longer its-only.
-
- ;; Defined in LIBMAX;MAXMAC.
-
- ;(DEFUN COPY (L) (SUBST NIL NIL L))
- ;(DEFUN COPY1 (X) (APPEND X NIL))
-
- ;; Defined in RAT;RATMAC.
-
- ;(DEFUN EQN (X Y) (EQUAL X Y))
- ;(DEFUN PCOEFP (X) (ATOM X))
- ;(DEFUN PZEROP (L) (SIGNP E L))
- ;(DEFUN RCINV (X) (RATINVERT X))
-
- ;; Defined in RAT;LESFAC.
-
- ;(DEFUN GETDIS (X) (GET X 'DISREP))
- ;(DEFUN CONS1 (X) (CONS X 1))
-
- ;; Defined in LIBMAX;MAXMAC.
-
- ;(DEFPROP ERLIST ERLIST1 EXPR)
-
- ;; Subr definitions of ADD* and MUL* needed at runtime for functions generated
- ;; by TRANSL. If a function is defined as both a macro and a function, the
- ;; compiler expands the macro, but still puts the function definitions in the
- ;; fasl. We don't need these on the Lisp Machine or Multics since macros are
- ;; around at run time.
-
- ;; ADD and MUL to be flushed shortly. Around for compatibility only.
- ;; (another CWH comment????) -gjc
-
- #+PDP10
- (PROGN 'COMPILE
- (DEFUN ADD (&REST L) (SIMPLIFYA (CONS '(MPLUS) L) t))
- (DEFUN MUL (&REST L) (SIMPLIFYA (CONS '(MTIMES) L) t))
- (DEFUN ADD* (&REST L) (SIMPLIFYA (CONS '(MPLUS) L) nil))
- (DEFUN MUL* (&REST L) (SIMPLIFYA (CONS '(MTIMES) L) nil)))
-
- #+NIL
- (PROGN 'COMPILE
- (DEFUN ADD (&RESTL L) (SIMPLIFYA (CONS '(MPLUS) L) t))
- (DEFUN MUL (&RESTL L) (SIMPLIFYA (CONS '(MTIMES) L) t))
- (DEFUN ADD* (&RESTL L) (SIMPLIFYA (CONS '(MPLUS) L) nil))
- (DEFUN MUL* (&RESTL L) (SIMPLIFYA (CONS '(MTIMES) L) nil))
-
- (DEFUN SETF-MGET (A B VALUE) (MPUTPROP A VALUE B))
-
- (DEFUN SETF-$GET (A B VALUE) ($PUT A VALUE B))
- )
-
- #+CL
- (PROGN 'COMPILE
-
- ;; on the LISPM the &REST list is a stack-allocated cdr-coded list.
- ;; We have to copy it, so might as well try out some optimizations.
-
- (DEFUN ADD (&REST V)
- (DO ((L NIL)(R)
- (ACC 0))
- ((NULL V)
- (IF (NULL L)
- ACC
- (IF (ZEROP ACC)
- (SIMPLIFYA (CONS '(MPLUS) L) T)
- (SIMPLIFYA (LIST* '(MPLUS) ACC L) T))))
- (SETQ R (POP V))
- (IF (NUMBERP R)
- (SETQ ACC (PLUS R ACC))
- (PUSH R L))))
-
- (DEFUN MUL (&REST V)
- (DO ((L NIL)(R)
- (ACC 1))
- ((NULL V)
- (IF (NULL L)
- ACC
- (IF (EQUAL ACC 1)
- (SIMPLIFYA (CONS '(MTIMES) L) T)
- (SIMPLIFYA (LIST* '(MTIMES) ACC L) T))))
- (SETQ R (POP V))
- (IF (NUMBERP R)
- (SETQ ACC (TIMES R ACC))
- (PUSH R L))))
-
- (DEFUN ADD* (&REST L) (SIMPLIFYA (CONS '(MPLUS) (copy-list L)) nil))
- (DEFUN MUL* (&REST L) (SIMPLIFYA (CONS '(MTIMES)(copy-list L)) nil))
-
- )
-