【发布时间】:2021-02-01 06:14:09
【问题描述】:
当我完全不明白某些事情时,我通常会寻求帮助。
我的任务是制作一个 Common Lisp 程序,它将 2 个分数相加,输入为 4 个单独的数字 (n1 d1 n2 d2),并尽可能简化它。
我的第一个函数是以这种方式为分子(n1 * d2)+(n2 * d1)添加分数,为分母(d1 * d2)添加分数。
第二个函数然后从第一个函数中获取分子和分母,然后从中计算 gcf。在这种情况下,我从互联网上复制了一个代码,因为我不知道如何实现它。
我目前卡住的第三个函数采用通过第二个函数和 gcf 的分子和分母,然后将分子和分母都除以 gcf,直到其中一个模 gcf 不再为零。
(defun simplify (n d dvs)
(loop
(setq n (/ n dvs)
d (/ d dvs))
(when (or (/= 0 (mod n dvs))
(/= 0 (mod d dvs)))
(setq n n d d)))
(finalprint n d))
由于(return) 不能返回超过 1 个值,我尝试了(values n d),但程序会卡在没有做任何事情的情况下,(setq n n d d) 也是如此。有办法解决这个问题吗?
【问题讨论】:
-
设置
n到n应该做些什么?它将n设置为它的值?那会改变什么? -
(return (values n d))返回两个值。
标签: loops recursion common-lisp fractions