lisp求余运算的实现

author Owner  •  Filed under templates, internet

js,C等语言中要得到a除以b的余数,用一个百分号,a%b就可以获得到结果,那么这个%用lisp怎么实现呢?
当然lisp中有现成的取余方法,方法名为(remainder a b),现在用Lisp语言自己实现%功能。

分析:
如果求a除以b的余数,就是从a中不断减去b,当得到的差小于b了,那么这个差就是所求的结果了。
翻成为lisp为:

(define (% a b)
  (if (< (- a b) b)
      (- a b)
      (% (- a b) b)))

不考虑错误测试的话,上述过程可以求得正确结果

接下来是考虑这样的问题:
  1、如果a小于b,结果为负数怎么办?
  2、如果b等于0,死循环怎么办?

(define (% a b)
  (cond
    ((< a b) (error "The first argument must be greater than second argument"))
    ((= b 0) (error "The second argument can't be 0"))
    ((< (- a b) b) (- a b))
    (else (% (- a b) b))))

关于参数类型需不需要自己做限制,等以后学习了再补充吧。
如果本文对你有帮助或者还有未解决的疑问需要帮助,欢迎加入本站QQ群:323762686

Tagged: orci, lectus, varius, turpis

Comments (0)  • 2016-03-06 21:30:05 •  Edit

0 Responses

最新文章