首页 > programming in lua 第六章的正弦曲线例子

programming in lua 第六章的正弦曲线例子

在自己电脑上尝试以下代码时出现了问题。

function eraseTerminal() 
 io.write("\27[2J") 
end 

-- writes an `*' at column `x' , row `y' 
function mark (x,y) 
 io.write(string.format("\27[%d;%dH*", y, x)) 
end 

-- Terminal size 
TermSize = {w = 80, h = 24} 

-- plot a function 
-- (assume that domain and image are in the range [-1,1]) 
function plot (f) 
 eraseTerminal() 
 for i=1,TermSize.w do 
 local x = (i/TermSize.w)*2 - 1 
 local y = (f(x) + 1)/2 * TermSize.h 
 mark(i, y) 
 end 
 io.read() -- wait before spoiling the screen 
end
plot(function (x) return math.sin(x*2*math.pi) end) 

结果在控制台打印出来是下面这种结果

> [2J[13;1H*[15;2H*[17;3H*[19;4H*[20;5H*[21;6H*[22;7H*[23;8H*[23;9H*[24;10H*[23;11H*[23;12H*[22;13H*[21;14H*[20;15H*[19;16H*[17;17H*[15;18H*[13;19H*[11;20H*[10;21H*[8;22H*[6;23H*[4;24H*[3;25H*[2;26H*[1;27H*[0;28H*[0;29H*[0;30H*[0;31H*[0;32H*[1;33H*[2;34H*[3;35H*[4;36H*[6;37H*[8;38H*[10;39H*[12;40H*[13;41H*[15;42H*[17;43H*[19;44H*[20;45H*[21;46H*[22;47H*[23;48H*[23;49H*[24;50H*[23;51H*[23;52H*[22;53H*[21;54H*[20;55H*[19;56H*[17;57H*[15;58H*[13;59H*[12;60H*[10;61H*[8;62H*[6;63H*[4;64H*[3;65H*[2;66H*[1;67H*[0;68H*[0;69H*[0;70H*[0;71H*[0;72H*[1;73H*[2;74H*[3;75H*[4;76H*[6;77H*[8;78H*[10;79H*[11;80H*

其中还有“ESC”符号,但是复制到网页上后显示不出来。
原文有提到:

要想让这个例子正确的运行,你必须调整你的终端类型和代码中的控制符一致

这一句话Google了半天不知道该怎么做。然后关于关于正弦曲线无法正常打印也没能搜索到相应的解决办法。
应该怎么破?_(:3」∠)_


上面的不是Unicode控制符吗? ANSI 是WINdows 的东西, 应该是Windows的控制台并不支持Unicode控制符吧


简单说因为你在用Windows,Linux大法好,退微软保平安,至少你也要装个Cygwin来提升自身逼格。
复杂说是因为这段程序使用了ANSI控制符在终端上定位并输出字符来显示一条正弦曲线,但Windows的控制台并不支持这些ANSI控制符,所以就显示成了一堆乱码。
再复杂点说即便你用了Linux,也要“调整你的终端类型和代码中的控制符一致”,也就是说你需要使用一个支持ANSI控制字符的终端类型,不过好在绝大多数情况下你不需要做什么,用缺省的就好。

【热门文章】
【热门文章】