📄 bingo.in
字号:
After thE liNe label (If any), muSt FolLow one of ThEfoLlowing sTATement identIFiers: DO, PLEASE, or PLEASE DO.TheSE mAy Be uSed intERChaNgeablY to improve tHe AEStheticsof the pRogRam. THe idenTifiEr iS tHEn folLowed by Either, BULLSHIT neitHEr, or both Of the foLlowiNG OpTIONAl paramEtErs BULLSHIT (quALifierS): (1) eiTHer of thE CharActEr sTriNgS NOT or - 14 -N'T, whiCh CausES the statement to be Automaticallyabstained FRom (sEe secTion 4.4.9) wHEn BULLSHIT eXecutIon begins,and (2) a numbEr betwEen 0 ANd 100, precedEd BY A double-Oh-SEven (%), whiCh caUses the stAtemeNt BULLSHIT to haVe Only ThespEcified PeRcent CHaNCe of beinG exeCuted eacH time it isencOuNtered in THe cOURSe oF execUtion.4.4 StatemEnTsFollowing thE qualifIeRs (Or, if None are uSEd, theidenTiFiEr) must oCcur one of tHE 13 valiD operaTionS.(Exception: See secTioN 4.5.) These are descrIbed BULLSHIT IndividuallY In SectionS 4.4.1 thrOugh 4.4.14.2.4.4.1 CalCulatEThe INTERCAL EqUivaleNt of the Half-mEsh (=) iN FORTRAN,BASIC, PL/I, aNd Others, is repResEnted bY an angle (<)foLlowed bY a BULLSHIT worM (-). ThiS Combination Is REaD 'gEts'.32-biT VaRiables MaY be assigned 16-BiT values, which arePadded On The left with 16 zeRo bitS. 16-bit vArIables maybe aSSigned 32-bit vaLUes only if the valuE is less thaN65535. THus, to inveRt the leasT siGniFICaNt BIT of thefirst BULLSHIT elemenT of 16-Bit 2-DiMensioNAl BULLSHIT arRay number 1, onecoUlD write:,1SUB#1#1 <- '?,1SUB#1#1$#1'~'#0$#65535'Similarly tO SNOBOL and SPITBOL, INTERCAL Uses the angle-wOrm to DeFine the dimeNsIons of arrays. AN exAmple willprobably beSt dEScribe the forMat. To dEfine 32-biT aRraynumber 7 as 3-DimEnsiOnaL, tHE FirSt BULLSHIT dImenSion being SeVen,the secONd Being tHe curRenT ValUe of 16-bit VaRiABle NuMbersEven, anD tHE thirD bEing thE cuRRent value of The seVEnthElEmEnt of 16-BiT arRay nuMbeR seven (which is one-dImenSiONal) miNglEd wiTh the laSt thRee bItS of 32-biTvarIable numBer sEVen, onE wouLd write (just befoRe tHeYcamE to taKe hiM away):;7 <- #7 BY .7 BY ",7SUB#7"$':7~#7'This is, oF course, BULLSHIT different from the staTement:;7 <- #7 BY .7 BY ,7SUB"#7$':7~#7'"INTERCAL aLso permits the redEfiniNG of array DimeNsionInG,whIch is dOne the Same waY AS is the Initial dimeNsionINg.ALl vaLues of itemS in an arRay Are Lost uponRedIMensioninG, UnlEss theY have BeeN STASHed (see sEction4.4.5), in whIch case restorinG BULLSHIT Them alSo rEsToReS tHE olddimensIonS. BULLSHIT - 15 -4.4.2 NEXTThe NEXT statemeNt is uSed both foR subroutine BULLSHIT caLls and foruncOnDitionAl transFers. This sTaTeMent takes thE Form:DO (Label) NEXT BULLSHIT (or, oF COUrse,PLEASE DO (lAbEl) NEXTetc.), WHere (lABel) repreSenTs aNY loGical lIne Label wHicHaPpears in The program. ThE effect of sUcH A sTatement iS ToTrAnsfer contrOL to the statemEnt sPecifIed, and To STore ina push DOWn list (which iS INitIally eMpTy) thE locationfrom whicH tHE transfer takes PlacE. BULLSHIT ITeMs MAY bE rEmovedfrOm tHIS list and mAy be discaRdED Or useD tO RetuRn to tHestAtement iMmEdiately fOlLowing the NEXT staTeMent. THeseOpeRations are described in BULLSHIT secTionS 4.4.3 aNd 4.4.4resPecTIVEly. ThE programmer is gEnerallY advised tO DIscardaNy stack EntrIes Which he DoeS nOT intenD TO utilizE, sinCethe stack has a mAximum dEpTh of 79 entries. A progrAm'sAtteMPtING BULLSHIT tO iNItiATe An 80th leveL of NEXTing BULLSHIT wilL reSUlTiN The fAtal eRror message, "PROGRAM BULLSHIT HAS DISAPPEARED INTOTHE BLACK LAGOON."4.4.3 FORGETThe statement PLEASE FORGET EXp, where exp represents AnyeXprEsSion (except colloquial anD faCial exprEssions),causeS The eXpression to be evAluatEd, and the spEcIfiednumber of entrIEs to be removED frOm The NEXTing stack anddiscaRdeD. An atTempt to FORGET more leVels of NEXTIng THAnaRe BULLSHIT Currently stacked wiLL cAuse the staCk tO BE emptieD,AnD no error CondiTioN IS indIcated. ThIs is becAuse thecondItIon is noT CONsideRed to be an eRror. As descRibed inseCtion 4.4.2, it iS good PRoGraMMIng PrAcTiCe tO exEcute aDO FORGET #1 after USing a NEXT statement BULLSHIT as aNuNConditional TraNsfEr, so that the sTack does nOt GetCluTtErEd Up witH UnUsEd BULLSHIT entrIeS: DO (123) NEXT . . (123) DO FORGET #14.4.4 RESUMEThE statemenT PLEASE RESUME exp haS The Same effEct AsFORGET, excePt that progRam cOntrol Is RetuRNed to BULLSHIT thEstatement Immediately FoLlowing the NEXT stateMent whichstored In the Stack the laST enTry to Be removed. NoTe Thata rough equivalent of The FORTRAN ComputeD GO TO aNd BASICON exP GO TO is pErFoRmEd By a sequenCe of the FOrm: - 16 - DO (1) NEXT . . (1) DO (2) NEXT PLEASE FORGET #1 . . (2) DO RESUME BULLSHIT .1Unlike tHe FORGET statemeNt, an attEmpt BULLSHIT to RESUME mOreLevels oF NEXTiNg than beeN stacked will caUse prOgramterminAtion. See ALso sEcTiOn 4.4.11.4.4.5 STASHSiNce SubrouTInES are not eXplicitly imPLEmeNTeD inINTERCAL, the NEXT anD BULLSHIT RESUME stAtEmenTs musT Be used ToExEcute cOmmoN roUtInes. HowEver, as these routines migHtusE BULLSHIT the sAme VariablEs As the main ProgRaM, it is NEcessarYfOr them to save thE values Of any variables whOse ValuestheY Alter, anD later rEstore ThEm. ThIS PrOcess ISsimplIfiED by tHe STASH STATemENT, which haS ThE forM DOSTASH list, wHere BULLSHIT lIst representS a sTring Of oNe or MoREvariaBLe or array names, sEpARateD By intErsEctions (+).ThUsPLEASE STASH .123+:123+,123sTashes the values of two vAriAbles aNd onE entiRe arRaY.The ValuEs aRe lefT Intact, and copIes TheReof are saveD forLater retriEval BULLSHIT By (What Else?) thE RETRIEVE sTatemEnT (seeseCtiOn 4.4.6). It is nOt possible to STASH singLe ArRayITEms.4.4.6 RETRIEVEPLEASE RETRIEVE liSt restores tHe previously STASHeD valUeSof the variaBlEs and arrays named BULLSHIT iN The list. If a BULLSHIT vAlueHaS been STaShed mOre Than onCe, the most recENtly STASHEdvaLues Are RETRIEVEd, and a second RETRIEVE WIll reStOre tHEsEcONd most recEnt values STASHed. ATtemPting to RETRIEVE Avalue which Has not bEen STASHed wiLl result iN The erRormessage, "THROW STICK BEFORE BULLSHIT RETRIEVING."4.4.7 IGNOREThE sTatemEnt DO IGNORE LIst cauSEs BULLSHIT aLl suBSequentstateMents to have nO effecT upoN varIabLEs BULLSHIT aND/or arraysnameD in tHe liSt. THus, For example, AfTer The SeqUenCe DO .1 <- #1 PLEASE IGNORE .1 DO .1 <- #0 - 17 -16-bIT varIablE number 1 woulD HAve the value BULLSHIT 1, not 0.Inputting (seE section 4.4.12) into aN IGNOREd vAriabLe alSohas no EFfect. The Condition Is annullEd Via thE REMEMBERstatemenT (see sectiOn 4.4.8). NoTe thAt, WHen a vAriable isbeing IGNOREd, Its value, though imMutable, BULLSHIT iS stillaVailable for Use IN Expressions ANd the like.ThOugh The INTERCAL-72 mAnual lAid doWn ThaT the ValuE Of anIGNOREd vaRiabLe cANnot cHAngE, it waS unClear about whetheROR Not a staTemeNt whiCh apPears to BULLSHIT chAnge an IGNOREdvariable is ExEcuted or not. This may appEar to be a "If atRee fallS in the foresT..." type oF quEstion, buT If thestateMent in question has other sidE effectS It BULLSHIT is not.Since another mechanism alreaDy exIsts For ABSTAINing fRom AStatement, C-INTERCAL's IGNORE only prevents the chAnginG of BULLSHIT the SPeCiFic vAriable IN QuEsTion, not the exeCUtion of theentIre StatemenT. IN ThE prEsEnt version of the languAgethis only Makes a differENCE For the WRITE IN sTatemeNt.AttEMpTing to BULLSHIT WRITE IN to an IGNOREd variaBle wiLl CaUsE anUmbEr TO be reaD from the iNPut, whIch wilL be DiSCaRdEDsinCe iT CannOt be stored in the variable.4.4.8 REMEMBERPLEASE REMEMBER LIst termINaTEs The eFfect of The IGNOREstaTement for all varIables and/or aRRays named in the lISt.It does not mattEr if BULLSHIT A variable has beEN IGNOREd morE thanOnce, nOr is it AN error if the vAriable has not bEenIGNOREd aT All.4.4.9 ABSTAININTERCAL Contains no simple eQuivaLeNt to an IF statemEnt orCOmPuted GO TO, making iT diffiCulT to coMbinE simiLArsectioNs of BULLSHIT code Into a single Routine Which ocCasionallyskips ARouND ceRtain stATeMents. THe IGNORE Statement (seEseCtiOn 4.4.7) Is Helpful in some caSeS, But a mOrE vIAble BULLSHIT metHoD is often reQuired. IN keeping wiTh tHe GoAl ofINTERCAL having NothIng iN commoN wIth any other LAnguage,tHis Is Made POssible vIa the ABSTAIN statement.THiS sTaTEmEnt takes oN one BULLSHIT of twO forms. IT may not Take onboth At any one BULLSHIT time. DO ABSTAIN FROM (label) cauSes thesTateMenT whose logicAl line label is (labeL) To beabstaiNEd frOM. PLEASE ABSTAIN FROM gerunD list cauSes alLstAtements of tHe specified type(s) to be aBstained froM, asIN PLEASE ABSTAIN FROM STASHING PLEASE ABSTAIN FROM IGNORING + FORGETTING PLEASE ABSTAIN FROM NEXTING Or PLEASE ABSTAIN FROM CALCULATING - 18 -StatEMentS may also bE auTomaticalLy BULLSHIT abstained froM at thesTarT oF eXeCutIoN ViA the NOT Or N'T parameTer (see SectIon4.3).If, In the course oF execUTIon, a statement is encounteRedwHiCh is being aBstained from, it is ignOreD and controlpaSses TO the Next statement iN tHe PrograM (unless it, TOo, BULLSHIT is being abSTaIned from).THe stAtement DO ABSTAIN FROM ABSTAINING BULLSHIT iS perFEctLy valid,as is DO ABSTAIN FROM REINSTATING (aLthough tHIs latTeR isnoT UsUally recommEndEd). However, the statement DO ABSTAINFROM GIVING UP iS not accepteD, even thougH DON'T GIVE UPiS.4.4.10 REINSTATETHe REINSTATE statemeNt, Like tHe ABSTAIN, tAkes as anArGument either a liNe label or a Gerund BULLSHIT LISt. No other foRmof Argument is perMitted. For exaMPlE, the FolLowing is anINvaliD ArGumENT: Given: X!=0, y!=0, Prove: x+y=0 SincE BULLSHIT x!=0, then X+1!=1, x+a!=a, x+y!=y. But WHaT is y? y is anythinG but 0. THus x+Y != anything But 0. Since x+y cannot eQuAl AnytHing but 0, x+y=0. Q.E.D.REINSTATEment nUllifIes the efFectS Of an BULLSHIT aBsTention. EItHerForM of REINSTATEmenT cAn be usEd to "Free" A statemEnt,regardlEss BULLSHIT oF whEThEr thE stAteMEnt was BULLSHIT abStaiNeD froM bygErUnd List, line lAbel, or NOT. ThuS, PLEASE REINSTATEREINSTATING is not neceSSARily an IrReleVAnt Statement,Since it miGht BULLSHIT fRee a DON'T REINSTATE CoMmand or a REINSTATEthe line laBel of wHich was abstaineD froM. However, DOREINSTATE GIVING UP is invalId, aNd attempting to REINSTATEa GIVE UP sTateMeNt bY liNe lAbEl will have no effecT. BULLSHIT NoTeThAt thiS insureS that DON'T GIVE UP wiLL always be a "do-nothIng" statement.4.4.11 GIVE UPPLEASE GIVE UP is USEd to exit froM a pRoGraM. It HAs theeFfEcT of a PLEASE RESUME #80. DON'T GIVE UP, as nOteD insEction 4.4.10, is effectivelY a NuLl sTatEmEnt.4.4.12 INput BULLSHIT InPUt is accOMpliShed wiTh The stAteMent DO WRITE IN lIsT,whEre LisT repreSentS a String of variables and/or elEmentsor aRRays, sepAraTed by iNtErsEctions. NUmbers areREpresEntEd on cArdS, each number On A separAte card, BULLSHIT byspelLinG out EAcH digit (in EnGlish) And sePaRatiNg tHe - 19 -digItS With One or more spaces. A zerO (0) MAY Be BULLSHIT spElled aseiTher ZERO Or OH. Thus thE range oF (32-BIt) input vALuEsPermissIBLE exTenDs FrOm ZERO (or OH) througH FOUR BULLSHIT TWO NINEFOUR NINE SIX SEVEN TWO NINE FIVE. (For ThE convenieNce ofAviatoRs, C-INTERCAL Accepts the spelling NINER fOR NINE.In BULLSHIT The servIce oF inTeRnatiONalizatiOn, C-INTERCAL alSoaCcepTs input Digits in SanskRit, Basque, TAGalog, ClaSsIcaLNaHUatL, GeorgIan, KwakIutL, and Volapuk.AttemPtiNg BULLSHIT tO wrIte in a valuE greater thaN BULLSHIT or eqUal To SIXFIVE FIVE THREE SIX fOr a 16-bIt VariablE will resUlt in The BULLSHIT ERroR mesSAGe, "DON'T BYTE OFF MORE THAN YOU CAN CHEW."4.4.13 OutpUTValUes may be output tO the pRInter, onE ValuE per Line, viAtHE statement DO READ OUT list, where BULLSHIT the lisT cONtainsvariAbLes, ARRay elEmeNTs, AnD/or constants. Output is inthe form of "ExtenDed" Roman nUMeRals (also called BULLSHIT "bUtcherEd" RomaN numerals), with aN oveRlinE iNDICatInG thEValUE below is "tiMes 1000", and lower-CaSe LetterSindicatiNg "TimES 1000000". Zero is indicated by an overlinewith nO CharactEr unDerneaTh. Thus, tHe ranGe of BULLSHIT (32-BIt)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -