2016-07-16 15 views
5

그래서 Commodore 64 BASIC에서 더 큰 기능을 작성하고 싶습니다. 지금까지 다른 소스 (C64 자체에 대한 사용자 매뉴얼뿐만 아니라 다양한 C64 위키)에서 볼 수있는 함수 정의는 한 줄로 길어질 수 있습니다. 즉, 다른 언어가 코드 블록의 윤곽을 그리기 위해 사용하는 대괄호/다른 모든 언어에 대해 BASIC에서 유사한 구문을 찾을 수없는 것처럼 보입니다.Commodore 64 BASIC의 다중 회선 기능

누구나 내가 한 줄 이상의 기본 코드 블록을 작성하는 방법을 알고 있습니까? 한 줄 기능의

예 :

10 def fn X(n) = n + 1 
20 print fn X(5) rem Correctly called function. This will output 6 

하지만이 같은 수행 할 수 없습니다

10 def fn X(n) = 
20 n = n + 1 
30 print n 
40 rem I'd like the definition of function X to end at line 30 above 
50 fn X(5) rem Produces syntax error on line 40 

이 시간 내 주셔서 감사를!

답변

6

슬프게도 C64 BASIC은 더 복잡한 기능을 지원하지 않습니다..

그러나 더 복잡한 서브 루틴을 지원하며,이 경우 원하는 것입니다.

10 rem you can set up n in advance here 
20 n = 23 
30 gosub 50 
40 rem n is now 24 
50 rem start of subroutine; this line is not needed, it's just here for clarity 
60 n=n+1 
70 print n 
80 return 
90 rem now you can call the subroutine on line 50 and it'll return at line 80 

불행히도에 매개 변수를 전달하고 위와 같이 일반 변수와 함께 작동해야 단지거야, 그래서 구조를 공식화되지 않은 C64 BASIC에서 서브 루틴에서 값을 반환.

+0

modbasic은 매개 변수와 심지어 재귀가있는 서브 루틴을 수행 할 수있게하는 기본 확장 (쐐기?)입니다. 다음과 같은 웹 검색을 시도하십시오 : "modbasic"commodore – Core

+0

gosub 앞에 서브 루틴을 넣을 필요가 없습니다. 실제로,'gosub'을 실행하기 전에'return'을 실행할 것이기 때문에, 프로그램이 에러를 일으키게됩니다. – JeremyP

+0

나는 더 큰 전체의 일부로 더 생각하고 있었지만, 오해의 소지가 있으며 격리되어 실행하면 오류가 발생한다는 것이 맞습니다. 번호를 다시 매기고이를 명확히하기 위해 또 다른 발언 성명 (코멘트)을 추가했습니다. – Feneric

1

내가 기억하는 바로는 콜란을 사용하여 한 줄에 여러 명령을 사용할 수 있습니다.

10 def fn X(n) = 
20 n = n + 1 
30 print n 
40 rem I'd like the definition of function X to end at line 30 above 
50 fn X(5) rem Produces syntax error on line 40 

는 당신이 일을 선언해야하고, 기본 스택이 알아서 할 수 있도록 당신이 인수를 전달할 수없는

10 n=n+1: print n 

주되다 : 아니 가장 우아한 해결책하지만까지 당신이 일을 중단하게됩니다 당신을 위해 그것의. 일반적으로 나는 다음과 같은 프로그램을 구성 할 것이다 :

1  rem lines 1-99 are definitions. 
2  n% = 0 : rem this declares the variable n as an integer, initializing it to 0 
100 rem lines 100-59999 are the core code 
101 n%=5 : gosub 60100 
59999 end : rem explicit end of the program to ensure we don't run into our subroutine block 
60000 rem lines 60000+ are my subroutines.. 
60100 n% = n% + 1 : print n% : return 

그것은 오래 동안이다. 메모리에서 % 문자는 변수를 정수로 선언하는 것으로 $와 마찬가지로 문자열로 선언합니다.

당신은 당신이 4 비트 nybbles에 PRINT 0 ~ 10 포함을 원하는 경우, 예를 들어, DEF FN 기존 변수와 수학 명령을 사용 하나이 할 수 있습니다
0

: 나는 중첩 시도했습니다

0 DEF FN B(X)=SGN(X AND B) 
1 FOR I=0 TO 10: REM OUR COUNTER 
2 B=8: REM OUR BIT MARKER (128, 64, 32, 16, 8, 4, 2, 1) 
3 FOR J=0 TO 3: REM WE WANT 4-BIT NYBBLES, SO 0 TO 3 INCLUSIVE 
4 PRINT RIGHT$(STR$(FN B(I)),1);: REM CALLS OUR FUNCTION 
5 B=B/2: REM MOVES TO NEXT BIT MARKER 
6 NEXT J: REM PROCESS FOR LOOP J 
7 PRINT: NEXT I: REM NEW LINE THEN PROCESS FOR LOOP I 

을 기능은 너무 혼란 스럽습니다. 사실 DEF FN을 사용하는 많은 목록을 보지 못했습니다. 어쩌면 일부 높은 솜씨의 장인 힙 스터 BASIC 프로그래머가 그들을 사용합니까?