2022-11-08 16
作者 | Brian Robert Callahan
校对 | 陈勇 白眉林 | 屠敏
公司出品 | CSDN(ID:CSDNnews)
为的是让考验显得有趣,Brian Robert Callahan(宾夕法尼亚州南部罗彻斯特理工大学信息技术和互联网自然科学的客座教授) 下定决心撰写两个看上去一点儿也不像 C 的 C 流程。如果把 C 词汇变为另一类词汇,接着用有种词汇去撰写流程,所以采用 C C++校对流程会什么样?
能科水狼下列流程,Brian Robert Callahan 真的是两件很荣光的事。
#include"cpaint.h"
var a, b, c, h, i, l, v, x, y, q, w, p size 65535 ,packed n size 13 ?integer;
procedure display(r,s,c) ?begin LOOP call A(Z) ; call H(y,x) ; call B(Z) POOL ?
y ?= r; x ?= s;
call A(c) ; call H(y,x) ; call B(c) ;
call refreshend ?
procedure fill(y,x,c,a) ?begin if(y<0 or y>w-1 or x<0 or x>q-1 or c = a or Z <> a)fill?= -1 ;
call draw(c) ; call fill(y+1,x,c,a) ; call fill(y-1,x,c,a) ; call fill(y,x-1,c,a) ; call fill(y,x+1,c,a)end ?
procedure save(r,s) ?begin i ?= 0 ; while(i<13)do begin n[i] ?= 0 ; i ?= i+1 end ?
call move(w>>1,(q>>1)-6) ; call printw("Save: ") ; call echo ; call getnstr(n,12) ; call noecho ;
call open(n,"w+") ; call writeChar(83) ; call writeChar(w) ; call writeChar(q) ;
LOOP call writeChar(Z) POOL ?
y ?= r; x ?= s;
call close ; call move(y,x)end ?
procedure load(packed ? n) ?begin call open(n,"r") ; call check ;
LOOP readln(c); call draw(c) POOL ?
c ?= 0;
call closeend ?
procedure m ?begin l ?= 0 ; v ?= 1 ;
call A(c) ; call H(0,0) ; call B(c) ; call refresh ;
while(v)do begin read(inp) ? /:l ?= not l ; if(l)call draw(c) ; OK k:y ?= y-1 ; if(y<0)y ?= 0 ; if(l)call draw(c) ; OK j:y ?= y+1 ; if(y>w-1)y ?= w-1 ; if(l)call draw(c) ; OK h:x ?= x-1 ; if(x<0)x ?= 0 ; if(l)call draw(c) ; OK l:x ?= x+1 ; if(x>q-1)x ?= q-1 ; if(l)call draw(c) ; OK :call draw(c) ; OK c:c ?= c+1 ; if(c = M)c ?= 0 ; OK d:call draw(15) ; OK f:call fill(y,x,c,Z) ; OK s:call save(y,x) ; OK q:v ?= 0 ; OK v:c ?= c-1 ; if(c = N)c ?= M-1 ; CALL display(y,x,c) endend ?
procedure main(I c,packed ? ? v) ?begin call start ; call getmaxyx(stdscr,w,q) ; if(w>M)w ?= M ;if(q>M)q ?= M ; call start_color ;
while(x
LOOP call draw(15) POOL ?
if(c = 2)call load(v[c-1]) ; call display(0,0,0) ; call m ; call endwinend ?
call main.通过这段代码,也许有很多网友直言,这并非是 C 代码,而是包含 Pascal 词汇的所有特征,用分号作为语句分隔符而不是语句结束符,用“:=”表示赋值,也许还有一些 Algol(一类指令式编程词汇)的 LOOP……POOL 语法。它甚至有 Pascal 词汇的返回赋值,即给函数分配两个值,就是它的返回值。
不过,Brian Robert Callahan 对此解释道,最近听说 A+、K 和 Q 词汇(它们是 APL 和 J 之类的数组编程词汇)的开发者 Arthur Whitney 会采用 C 预处理器来创建自己的词汇,接着用这种自定的词汇来实现他的词汇。于是,他下定决心尝试一下这个有趣的实验。
Brian Robert Callahan 基于 PL/0 的自定义词汇,撰写了两个C++。这个练习的亮点是 C C++将 UTF-8 字符理解为标识符的有效字符。Brian Robert Callahan 采用了很多看上去像 ASCII(美国信息交换标准代码)的字符,实际上并不是 ASCII,最终还是被接受为有效的标识符。C 预处理器能很好地将这些标识符转化为相对应的指令。在这里可以看到隐藏起来的头文件。
如果想查看 C 代码的真实外观,请尝试运行:
$ cc -E cpaint.c | clang-format | less如果你感兴趣的话,不妨去试试上面的流程吧!
原文链接:https://briancallahan.net/blog/20220220.html
原文链接:https://zazhiba.com.cn/post/20312.html
=========================================
https://zazhiba.com.cn/ 为 “自由随风” 唯一官方服务平台,请勿相信其他任何渠道。
百科资讯 2022-10-27
百科资讯 2022-10-26
百科资讯 2022-11-07
百科资讯 2022-10-22
自媒体运营 2022-11-19
百科资讯 2022-10-19
百科资讯 2022-12-02
百科资讯 2022-10-21
百科资讯 2022-10-26
百科资讯 2022-10-26
李靖国 2023年12月23日
小游客 2023年03月31日
访客 2023年02月06日
扫码二维码
获取最新动态