練習用にJavaScriptで関数を作成しようとしましたが、次のコードが正しく実行されていないか、ブラウザーで意図したとおりに実行されていないようです。ブラウザーにビジーサインが表示され続け、コンピューターが文字通りハングします。 thiusコードまたは問題は何ですか:
function recluse() {
return " It is\ncalled Data.\n\nData is made of merely bits, yet it takes complex forms. Control\nconsists only of simple instructions, yet it performs difficult\ntasks. From the small and trivial, the large and complex arise.\n\nThe program source is Data. Control arises from it. The Control\nproceeds to create new Data. The one is born from the other, the\nother is useless without the one. This is the harmonious cycle of\nData and Control.\n\nOf themselves, Data and Control are without structure. The programmers\nof old moulded their programs out of this raw substance. Over time,\nthe amorphous Data has crystallised into data types, and the chaotic\nControl was restricted into control structures and functions.\n\n%% Short Sayings\n\nWhen a student asked Fu-Tzu about the nature of the cycle of Data and\nControl, Fu-Tzu replied 'Think of a compiler, compiling itself.'\n\nA student asked 'The programmers of old used only simple machines and\nno programming languages, yet they made beautiful programs. Why do we\nuse complicated machines and programming languages?'. Fu-Tzu replied\n'The builders of old used only sticks and clay, yet they made\nbeautiful huts.'\n\nA hermit spent ten years writing a program. 'My program can compute\nthe motion of the stars on a 286-computer running MS DOS', he proudly\nannounced. 'Nobody own a 286-computer or uses MS DOS anymore.', Fu-Tzu\nresponded.\n\nFu-Tzu had written a small program that was full of global state and\ndubious shortcuts. Reading it, a student asked 'You warned us against\nthese techniques, yet I find them in your program. How can this be?'\nFu-Tzu said 'There is no need to fetch water hose when the house is\nnot on fire.'{This is not to be read as an encouragement of sloppy\nprogramming, but rather as a warning against neurotic adherence to\nrules of thumb.}\n\n%% Wisdom\n\nA student was complaining about digital numbers. 'When I take the root\nof two and then square it again, the result is already inaccurate!'.\nOverhearing him, Fu-Tzu laughed. 'Here is a sheet of paper. Write down\nthe precise value of the square root of two for me.'\n\nFu-Tzu said 'When you cut against the grain of the wood, much strength\nis needed. When you program against the grain of a problem, much code\nis needed.'\n\nTzu-li and Tzu-ssu were boasting about the size of their latest\nprograms. 'Two-hundred thousand lines', said Tzu-li, 'not counting\ncomments!'. 'Psah', said Tzu-ssu, 'mine is almost a *million* lines\nalready.' Fu-Tzu said 'My best program has five hundred lines.'\nHearing this, Tzu-li and Tzu-ssu were enlightened.\n\nA student had been sitting motionless behind his computer for hours,\nfrowning darkly. He was trying to write a beautiful solution to a\ndifficult problem, but could not find the right approach. Fu-Tzu hit\nhim on the back of his head and shouted '*Type something!*' The student\nstarted writing an ugly solution. After he had finished, he suddenly\nunderstood the beautiful solution.\n\n%% Progression\n\nA beginning programmer writes his programs like an ant builds her\nhill, one piece at a time, without thought for the bigger structure.\nHis programs will be like loose sand. They may stand for a while, but\ngrowing too big they fall apart{Referring to the danger of internal\ninconsistency and duplicated structure in unorganised code.}.\n\nRealising this problem, the programmer will start to spend a lot of\ntime thinking about structure. His programs will be rigidly\nstructured";
}
var para=recluse().split("\n\n");
function reduce(func,length,array)
{
array.forEach(function(c)
{
length=func(length,c);
});
return length;
}
<!---TOP LEVEL FUNCTION FOR PROCESSING A VALUE WITH A FUNCTION AND CREATING AN ARRAY OF TH RESULTS------------>
function map(func,array)
{
var result_array=[];
array.forEach(function(c)
{
result_array.push(func(c));
});
return result_array;
}
<!-------------THE ALGORITHM FOR FINDING THE EMPHASISED TEXT AND THE FOOTNOTES WITHIN THE TEXT---->
function fragmenter(text)
{
var fragments=[];
function indexing(char)
{
var index=text.indexOf(char);
if(index==-1)
{
return text.length;
}
else
return index;
}
function ifAtStart(char)
{
var end=(char,1);
if(end==-1)
{
throw Error("No enclosing "+char);
}
var part=text.slice(1,end);
text=text.slice(end+1);
return part;
}
function normalText(text)
{
var end=reduce(Math.min,text.length,map(indexing,["*","{"]));//to check that the index is within the text only
var part=text.slice(0,end);
var text=text.slice(end);
return part;
}
while(text!="") <!---4------>
{
if(text.charAt(0)=="*")
{
fragments.push({type:"emphasised",
content:isAtFirst("*")});
}
else if(text.charAt(0)=="{")
{
fragments.push({type:"footnotes",
content:isAtFirst("}")});
}
else
{
fragments.push({type:"Normal",
content:normalText(text)});
}
}
return fragments;
}
console.log(fragmenter(para[1]));