带标注的示例图表

由于插入操作会向光标右侧与下方填充缓冲区,新的图表打印函数应先打印 Y 轴(纵轴),再打印图表主体,最后打印 X 轴(横轴)。这一顺序明确了函数的构成:

  1. 准备代码。
  2. 打印 Y 轴。
  3. 打印图表主体。
  4. 打印 X 轴。

下面是完成后图表的示例效果:

    10 -
                  *
                  *  *
                  *  **
                  *  ***
     5 -      *   *******
            * *** *******
            *************
          ***************
     1 - ****************
         |   |    |    |
         1   5   10   15

该图表的纵轴与横轴均标注了数字。不过在某些图表中,横轴代表时间,用月份标注会更合适,如下所示:

     5 -      *
            * ** *
            *******
          ********** **
     1 - **************
         |    ^      |
         Jan  June   Jan

事实上稍加思考就能想到多种纵轴与横轴的标注方案,任务可能因此变得复杂,而复杂会带来混乱。为避免这种情况,我们首次实现时最好选用简单的标注方案,后续再修改或替换。

这些考虑为 print-graph 函数提供了如下结构:

(defun print-graph (numbers-list)
  "documentation..."
  (let ((height  ...
        ...))
    (print-Y-axis height ... )
    (graph-body-print numbers-list)
    (print-X-axis ... )))

我们可以依次实现 print-graph 函数定义的各个部分。