这些天我正在制作像玩具语言一样的Lisp。 但是在没有*的情况下使用乘法功能的问题仍然存在。
像这样的DEFUN MULT(x y) add(add(x y) add(x y-1))
。
我尝试使用递归方法,但它进入无限循环 所以我决定只使用添加方法
答案 0 :(得分:1)
根据定义,3 * 4
可以是3 + 3 + 3 + 3
或4 + 4 + 4
。您的代码需要递归。为了防止无限递归,你必须有一个肯定会达到某种程度的基本情况。如果你与1
相乘,那么结果将是另一个参数:
(defun mul (x y)
(if (= x 1)
y
(+ y (mul (1- x) y))))
(step (mul 3 4)) ; ==
(+ 4 (mul 2 4)) ; ==
(+ 4 (+ 4 (mul 1 4))) ; ==
(+ 4 (+ 4 4)) ; ==
(+ 4 8) ; ==
; ==> 12
这仅适用于正整数。在x
为零或为负时将其保留为练习。
NB!您提供的代码看起来不像lisp。我的示例适用于任何Common Lisp实现!