SmileBASIC 은 더 많은주의를 기울여야합니다. SB 답변을 제공하는 3 명의 사용자 (자신을 포함하여!) 만 보았지만 놀라지 않지만 실망합니다. 유료 언어 일뿐 만 아니라 기본 방언이기도하면 사람들을 확실히 끌 수 있지만 소유 한 사람들에게는 실제로 유연하고 놀랍게도 골프를 칠 수 있습니다. 이 팁 스레드를 열어서 무엇이 나오는지 알았습니다.
나는 12Me21이 자주 방문 할 것으로 예상한다 :)
SmileBASIC 은 더 많은주의를 기울여야합니다. SB 답변을 제공하는 3 명의 사용자 (자신을 포함하여!) 만 보았지만 놀라지 않지만 실망합니다. 유료 언어 일뿐 만 아니라 기본 방언이기도하면 사람들을 확실히 끌 수 있지만 소유 한 사람들에게는 실제로 유연하고 놀랍게도 골프를 칠 수 있습니다. 이 팁 스레드를 열어서 무엇이 나오는지 알았습니다.
나는 12Me21이 자주 방문 할 것으로 예상한다 :)
답변:
string!=""
로string>""
SB를 사용하면 코드 포인트를 기준으로 문자열을 더 크게 /보다 적게 비교할 수 있습니다. 그러나 빈 문자열은 가장 작은 문자열 로 간주됩니다 .
그래서 당신이 상황에서 string!=""
당신이 중 하나를 사용할 수 있습니다 string>""
또는 ""<string
모든 문자열보다 크기 때문에, ""
그리고 ""
적은 모든 문자열보다. 사용 여부에 따라 <
또는 >
에 따라 이전 또는 이후에하는 수는 또한 바이트 저장 올바른 구문 될 공백 문 필요로하는 경우.
예를 들면 다음과 같습니다.
WHILE S$!=""
로 변할 수있다
WHILE S$>""
그리고 더 골프
WHILE""<S$
?
, .
, @
, 및 닫히지 않은 문자열BASIC의 많은 방언이 ?
인쇄를 지원 하며 SB도 예외는 아닙니다. 텍스트 출력 기능이 매우 짧은 것이 큰 장점입니다.
SmileBASIC에서는 .
로 평가 0.0
되므로 공간을 절약하기 위해 0 대신 사용할 수 있습니다. 예를 들면 다음과 같습니다
. 1 바이트를 절약 SPSET 0,21
할 수 있습니다 SPSET.,21
. ( 사용자 정의 함수 일 수 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 뒤에 숫자가 없으므로 오류가 발생합니다. 일반적으로 이것은 파악하기가 쉽지 않지만 매우 안정적인 구문 강조 표시기를 사용하면 수행 할 수있는 작업과 수행 할 수없는 작업을 훨씬 쉽게 알 수 있습니다.
My 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>