一个有意思的递归定义

最近在看一本《WEB全栈工程师的自我修养》一书,其中涉及到了npm这个词的意义,非常有意思。

一般人可能以为npm是Node Package Manager的缩写,但实际上不是这样的,npm不是Node Package Manager的首字母缩写,所以不能全大写。npm是“npm is not an acronym”(npm不是一个缩写)这个递归定义的简写。

是不是很绕?呵呵。

递归定义是指一种在定义中引用他自身的定义方法,在程序中引用自己称为递归,因为自身是递归的,所以无法精确地解释出他的真正全称。我们熟知的VISA其实就是一种递归定义,VISA的意义是VISA Internation Service Association,还有PNG,PNG is Not Gif。

再读一遍npm的递归定义“npm is not an acronym”,按理他的缩写应该是ninaa,但是这样就成了acronym(缩写)了,就是错误的,所以只能简称他为npm,我们不知道他是什么,但可以肯定的是,他不是一个缩写。

是不是有点崩溃?这还有一段:

npm可以大写么?
不可以,因为npm不是一个缩写
那npm是什么单词的缩写么?
是“npm不是一个缩写”的简写。

时间: 2024-08-01 15:49:32

一个有意思的递归定义的相关文章

基于文本替换的解释器:递归定义与lambda演算的一些额外说明

这一篇接在第一篇lambda演算的后面.讲讲一些数学知识. 经常有些看似很容易理解的东西,一旦要描述得准确无误,就会变得极为麻烦. 软件工程里也有类似情况:20%的代码实现了核心功能,剩下80%的代码处理边界情况. 于是,所谓的准确描述里的大部分文字都在说明边界情况,核心概念只有寥寥几字--好比一件打满补丁的衣服,完全看不出原来的样子. 出现这种现象要么是人类的大脑有缺陷,难以严谨而又准确的理解概念,也就是说人类太笨: 要么就是语言系统有问题,难以简洁地表达概念,而发明不出新的语言系统的人类还是

java 递归 输入一个ID 怎么把这个ID下所有的子ID 放入一个list里面 递归都写好了

问题描述 java 递归 输入一个ID 怎么把这个ID下所有的子ID 放入一个list里面 递归都写好了 HashMap> results = new HashMap>(); //输入的ID int ID=Integer.parseInt(Catid); //表中所有的数据 aas=cloudnewscategory.selectAllGory(); System.out.println("所有记录="+aas); for (CloudNewsCategory gory :

求C语言高手解惑,一个关于const变量定义数组大小问题

问题描述 求C语言高手解惑,一个关于const变量定义数组大小问题 我在函数的外部定义了一个BlockSize,然后又定义了一个结构(两者都是在函数外部).编译的时候,出现一个error.提示说:variably modified 'array' at file scope const int BlockSize = 20;//define BlockSize 20typedef struct _node { int array[BlockSize]; struct _node* next;}N

互斥量-一个有意思的关于进程间通信的小问题

问题描述 一个有意思的关于进程间通信的小问题 题目要求: 两个进程Bob与Jack,能够互相看到对方,若对方进程结束,能够唤醒对方进程. 我的思路: 两个进程利用一个公共文件mail.txt,互斥地访问对方的状态,若发现对方不在线,则启动对方进程.mail文件中 1表示进程在线,0表示进程不在线. 现象: 进程间可以相互启动,但总是莫名终止,并且终止后mail文件中的两个进程的状态并不都为0. 我的实现如下:Bob进程 #include #include #include #include us

请教matlab中的一个语法问题,定义了一个2*2array,但下面却给它的第三行赋值

问题描述 请教matlab中的一个语法问题,定义了一个2*2array,但下面却给它的第三行赋值 lims = [Inf, -Inf; Inf, -Inf]; lims(3,:) = [res(3), res(3) * length(files_in_order)]; 解决方案 这相当于,给原矩阵lims直接增加一行

怎样创建时间Time1类Hour、Minute、Second,它们用于表示采取统一时间格式(24小时制)的一个时间。并定义一个不含参数的ToUniwersalString方法,该方法采取统一的格式返回一个字符串,它包括6个数位——两个用于表示时间,两个用于

问题描述 怎样创建时间Time1类Hour.Minute.Second,它们用于表示采取统一时间格式(24小时制)的一个时间.并定义一个不含参数的ToUniwersalString方法,该方法采取统一的格式返回一个字符串,它包括6个数位--两个用于表示时间,两个用于表示分钟,两个用于表示秒.创建Time1类的两个实例,编译和测试Time1类. 解决方案 解决方案二:publicvoidInitializeTimer(){this.timerClock.Elapsed+=newElapsedEve

和同事写了一个下午的递归读取数据库的javabean

递归|数据|数据库 /* * 创建日期 2005-4-14 * * TODO 要更改此生成的文件的模板,请转至 * 窗口 - 首选项 - Java - 代码样式 - 代码模板 */package treeMenu;import java.util.*;import java.sql.*;import dbmanager.DBConnection;import javax.servlet.jsp.JspWriter;/** * @author 呆猴 lucky * * TODO 要更改此生成的类型

发现一个有意思的bbs网站,发现一个Waves开源项目

本文的原文连接是: http://blog.csdn.net/freewebsys/article/details/51619608 未经博主允许不得转载. 博主地址是:http://blog.csdn.net/freewebsys 1,页面样式 和google风格的样式,并且在页面加载完成之后还会有顶部的颜色条变换,非常好看. 下拉菜单也很好看. https://bbs.gitlab.cc/ 上面有过开关,能够把菜单固定住 2,查看了下css 从里面刨出来两个项目. 一个叫waves不知道和g

C++实现的一个可以写递归lambda的Y函数_C 语言

最近学习C++11的variadic template argument,终于可以摆脱用fpmacro模板来复制一大堆代码的做法了,好开心.这个例子的main函数用lambda写了一个斐波那契数列的递归计算函数.跟以往不同的是,在Y函数的帮助下,这个lambda表达是可以成功看到自己,然后递归调用.当然这仍然需要用普通的C++递归来实现,并不是λ-calculus那个高大上的Y Combinator. #include <functional> #include <memory>