CALCWITHOUT CONTROL 1

    技术2022-05-18  15

    (mymachine   (

    (defmacro  demoinside  (expr)

    (print  expr)

    )

    (defmacro  mymachineinside  (exprs)

    `(if  ,(eq  exprs  nil) 

          nil

         (progn

              (demoinside ,(car  exprs)) 

             (mymachineinside  ,(cdr  exprs) )

          )

    )

    )

     

    (mymachineinside   (

    (defmacro  demo  (expr)

    (print  expr)

    )

    (defmacro  mymachine  (exprs)

    `(if  ,(eq  exprs  nil) 

          nil

         (progn

              (demo ,(car  exprs)) 

             (mymachine  ,(cdr  exprs) )

          )

    )

    )

    (setq zero  

           (lambda (f  x)

               x

           )

    )

     

    (setq  one 

            (lambda  (f  x)

              (funcall f x)

            )

    )

     

    (setq addone

           (lambda (n)

              (lambda (f x)

                   (funcall f  (funcall  n  f  x) )

              )

           )

    )

     

    (setq  two 

            (funcall addone  one)

    )

     

    (setq  three 

            (funcall addone  two)

    )

     

    (setq  chenbing

           (lambda (value)

               (cons 'chenbing value)

           )

    )

    (setq  add

          (lambda (m n)

            (funcall  m   addone  n ) 

          )

    )

     

    (setq five 

          (funcall  add  two three) 

    )

     

    (funcall  five  chenbing  nil)

     

     

     

     

    (setq  true

           (lambda (u v)

              u

           )

    )

     

    (setq  false

           (lambda (u v)

              v

           )

    )

     

    (setq iszero 

          (lambda (n)

            (funcall  n  (lambda(x)false)  true)

          )

    )

     

    (setq  myif  

            (lambda (con  then else)

                (funcall  con  then else)

            )

    )

    (funcall myif true 'a 'b)

    (funcall myif false 'a 'b)

     

     

     

    (setq  wrapsub

          (lambda (f)

              (lambda (p)

                   (cons false  (funcall myif  (car p) (cdr p)  (funcall  f  (cdr p) ) ) ) 

              )      

          )

     

    (setq  subone

          (lambda (n)

             (lambda ( f  x)

                 (cdr  (funcall  n  (funcall wrapsub  f )  (cons  true  x) ) )

             )

           )

    )

     

    (setq four (funcall  subone  five) )

    (funcall  four  chenbing  nil)

     

    (setq  sum 

    (lambda( n)

    (funcall  myif  (funcall iszero  n)  zero  (funcall add  n    (funcall  subone n)  ) )

    )

    )

     

    (setq  result  (funcall  sum  zero) )

    (funcall  result  chenbing  nil)

    (setq  result  (funcall  sum  five) )

    (funcall  result  chenbing  nil)

    (setq   ten  (funcall  add  five  five) )

    (funcall  ten  chenbing  nil)

    (setq  result  (funcall  sum  ten) )

    (funcall  result  chenbing  nil)

     

    ))

    ))

     


    最新回复(0)