SmileBASIC值得更多关注。我在这里只看到3个用户(包括我自己!)提供SB答案,虽然这并不令我感到惊讶,但令我感到失望。它既是一种付费语言,又是一种BASIC方言,无疑会使人们失望,但是对于拥有它的人来说,它实际上是相当灵活的,而且令人惊讶的是,它可以打高尔夫球。我以为自己会打开此提示线程,然后看看会发生什么。
我希望12Me21可以经常访问:)
SmileBASIC值得更多关注。我在这里只看到3个用户(包括我自己!)提供SB答案,虽然这并不令我感到惊讶,但令我感到失望。它既是一种付费语言,又是一种BASIC方言,无疑会使人们失望,但是对于拥有它的人来说,它实际上是相当灵活的,而且令人惊讶的是,它可以打高尔夫球。我以为自己会打开此提示线程,然后看看会发生什么。
我希望12Me21可以经常访问:)
Answers:
?
,.
,@
,和未闭合的字符串BASIC支持?
打印的许多方言,SB也不例外。具有极短的文本输出功能是一个很大的优势。
在SmileBASIC中,.
将其评估为0.0
,因此可以代替0以节省空间。例如:
SPSET 0,21
可以是SPSET.,21
,节省1个字节。(SPSET0,21
是无效的,因为它SPSET0
可能是用户定义的函数)
EXEC.
是永久使程序循环的极短方法(但它会重置所有变量,因此并不总是可用的)
标签(用于GOTO
,GOSUB
和读出DATA
)被表示为@LABEL
在SmileBASIC。在表达式中使用时,它们实际上被视为字符串。例如,BGMPLAY"@305C"
可以写成BGMPLAY@305C
字符串在一行的末尾(或程序的末尾)自动关闭。?"Hello, World!"
可以写成?"Hello, World!
。这也可以用于制造通过拆分它们成多行程序的可读性,而不改变长度:?"Meow"BEEP 69
可
?"Meow
BEEP 69
@A<POP(H$)
短于"@"<POP(H$)
(A
没关系,它只检查第一个字符,因为它永远不会相同)
MID$
该MID$
函数是许多BASIC中的常用函数,用于从字符串中间的某个位置获取子字符串。但是,如果只需要在某个索引处获取字符,则使用字符串索引的时间要短得多。例如:
PRINT MID$("ABC",2,1)
PRINT "ABC"[2]
这两种打印C.字符串均基于字符支持类似数组的索引,因此,如果您一次只需要检查一个字符,则这是最好的方法。
A$=@AA:A$[2]="BD":A$[0]="":A$[2]="C"
:
(或不使用)该:
字符在SB中用作语句破坏器。基本上,您可以使用它在一行上堆积语句,如下所示:
PRINT "HELLO!":PRINT "GOODBYE!"
否则,您的平均语句将被换行符打破:
PRINT "HELLO!"
PRINT "GOODBYE!"
实际上,您通常根本不需要使用冒号。只要可以将语句分解为语法上有效的标记,解析器就趋向于找出一个结束和另一个开始的时间。空格通常也是如此。
PRINT"HELLO!"PRINT"GOODBYE!"
当然,这并不总是有效。总是有模棱两可的情况和无效的语法,您必须显式地中断语句。举个例子:
PRINT "HELLO";END
分号表示PRINT
期望打印出另一个表达式,除非该语句在此处中断(我们使用悬挂的分号来禁止换行。)在此,它假定END
尽管是关键字,但仍假定是一个值,并尝试打印它,结果错误。因此,无论是冒号还是换行符,我们都必须明确地打破该声明。
通常,如果某些东西看起来模棱两可,请尝试一下是否可行。如果不是,请中断该语句。此外,如12Me21所述,任何会产生无效语法的内容都不会正确突出显示。
SmileBASIC的代码编辑器具有内置的语法突出显示器,可用于确定代码是否有效。例如,如果您尝试做BEEP0
,它将不会突出显示它,因为函数和数字之间需要有一个空格。但是BEEP.
有效,因为。不是数字。
通常,类似这样的代码X=7BEEP
是有效的,因为函数不能以数字开头,所以SB假定7
并且BEEP
是分开的。然而。X=7END
不允许(并且不突出显示),因为它试图解释7E...
为数字,但是由于E后面没有数字,因此它失败,从而导致错误。通常,这很难弄清楚,但是使用非常可靠的语法突出显示工具,可以很容易地分辨出可以做什么和不能做什么。
我的SmileBASIC语法突出显示工具旨在(希望)完全匹配SB的行为,因此您可以使用它来检查代码是否有效。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://12Me21.github.io/sbhighlight3/sbhighlight.js"></script>
<link rel="stylesheet" type="text/css" href="https://12Me21.github.io/sbhighlight3/style.css">
<link rel="stylesheet" type="text/css" href="https://12Me21.github.io/external/smilebasicfont.css">
<script>
function update(event){
$code.textContent=$input.innerText;
//must be innerText since contentedible and textContent are too dumb to understand linebreaks
//contenteditable adds <br>s which textContent ignores
//whyyyyy
applySyntaxHighlighting($code,true);
}
function setCaretPosition(elem,caretPos){
if(elem){
if(elem.createTextRange) {
var range=elem.createTextRange();
range.move('character',caretPos);
range.select();
}else{
if(elem.selectionStart){
elem.focus();
elem.setSelectionRange(caretPos,caretPos);
}else
elem.focus();
}
}
}
</script>
<style>
#editcontainer{
position: absolute;
}
#editcontainer>pre{
position: absolute;
left: 0;
top: 0;
}
pre.csssucks *{
color:transparent !important;
background-color:transparent !important;
caret-color: white;
}
pre.csssucks {
color:transparent !important;
background-color:transparent !important;
caret-color: white;
border-color:transparent;
padding-right: 50ch;
}
</style>
</head>
<body>
Use SB font:<input type="checkbox" autocomplete="off" onchange="$code.dataset.sbfont=$input.dataset.sbfont=this.checked;update()"></input>
<button onclick="update()">force update</button>
<hr>
<div id="editcontainer">
<pre id="$code">test</pre>
<pre id="$input" class="csssucks" contenteditable="true" spellcheck="false" onkeydown="setTimeout(function(){update(event)},2);">test</pre>
</div>
</body>
</html>