跳到正文豫言豫言教程与指南

归藏第九

赋曰

江河赴海,叶落归根;术行至简处,亦须知止。递归者,自召其名也。貌若回环,实每进一阶:数递减,列渐短,树趋空。既有归处,则层层收束;若无止境,则调用相仍,栈深而机困。故递归之道,一曰基,一曰进;基定其终,进近于基。

豫言之顶层术,欲自见其名,先悬类型之契。契在前,则定义虽未尽,编译器已知其所当为;术中召己,不致迷名。若递归只供一隅,不欲昭告全篇,则以 复令 纳之;写其名,著其类型,陈其定义,末在 而 后用之。或显于堂,或藏于室,所循同理。

解章

顶层递归之术,须先声明其类。阶乘曰:

「阶乘」乃化「数」为「数」者也。
「阶乘」者得「其数」而
 若「等于」于「其数」于「零」则「一」否则「其数」乘(「阶乘」于(「其数」减「一」))
也。

数为零者,返一,是其基也;否则化为数减一之较小问,是其进也。全篇曰:

寻观「豫章」之书。

「阶乘」乃化「数」为「数」者也。
「阶乘」者得「其数」而
 若「等于」于「其数」于「零」则「一」否则「其数」乘(「阶乘」于(「其数」减「一」))
也。

「书」于(「述数」于(「阶乘」于「六」))。

其出七百二十。同例见归藏。脚本。豫。

藏递归于句

递归但供一式者,可不列之篇首,而用 复令:

复令「求零」属化「数」为「数」
 即得「其数」而
  若「等于」于「其数」于「零」则「零」否则「求零」于(「其数」减「一」)而
「求零」于「三」。

其 后著递归值之类,者 后陈其定义,末一 而 后乃用之。局部递归可取外层之绑定,宜为一术私有之辅算。

终止之问

类型无误,未必终有所得。编译器能验参果之类,而未必能证每次自召皆近于基。故作递归,当先自问三端:何形为基?每召所减者何?凡合法之入,必能至其基乎?

阶乘若受负数,则递减而远于零。故又当定其输入之疆:或入术先验而生异常,或自制惟能表非负之类。善作递归者,不惟书其回环,亦明其所许也。

试策

作 「幂」,受底数与非负指数;指数为零则一,否则返底数乘指数减一时之幂。复以局部递归改写之,使辅术不显于篇外。