이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 nickle 명령입니다.
프로그램:
이름
nickle - 탁상용 계산기 언어
개요
nickle [--help|--사용법] [-f 파일] [-l 라이브러리] [-e expr] [ 스크립트 ] [--] [인수 ...]
기술
니켈 강력한 프로그래밍 및 스크립팅 기능을 갖춘 탁상용 계산기 언어입니다.
Nickle은 다양한 데이터 유형, 특히 임의 정밀도 정수를 지원합니다.
합리성과 부정확한 현실. 입력 언어는 C와 모호하게 유사합니다. C의 몇 가지 사항
쉽게 번역되지 않는 것이 다르며 일부 디자인 선택이 이루어졌습니다.
다르게, 아주 소수의 기능이 단순히 누락되었습니다.
사용법
플래그가 지정되지 않은 인수는 Nickle 스크립트로 처리되며 표준 입력을 대체합니다. 어느
스크립트 뒤의 나머지 인수는 Nickle 문자열 배열 argv에 배치됩니다.
프로그래밍 방식 검사. 표현식이나 스크립트 인수 없이 호출되면 Nickle은
표준 입력에서 읽고 표준 출력에 씁니다.
옵션은 다음과 같습니다.
--도움말,--사용법
도움말/사용법 메시지를 인쇄하고 종료합니다. 이것은 Nickle의 내장 기능입니다.
ParseArgs 모듈이므로 이를 사용하는 Nickle 스크립트에도 해당됩니다.
도서관.
-f,--파일 파일
하중 파일 실행을 시작하기 전에 Nickle에 넣습니다.
-l,--도서관 도서관
하중 도서관 실행을 시작하기 전에 Nickle에 넣습니다. 설명은 아래를 참조하세요
도서관 시설의 모습입니다.
-e,--expr 특급
평가 특급 실행을 시작하기 전에.
-- 인수 구문 분석을 중단하고 평가되지 않은 나머지를 전달합니다. 인수.
통사론
대화형 설정에서 입력 언어를 더욱 유용하게 만들려면 개행 문자 종료만 됩니다
"합리적인" 시간에 진술을 합니다. 뉴 라인 표현식이나 단일을 종료합니다.
사용자가 입력한 명령문(필요한 몇 가지 명령문 제외)
미리보기: 특히 선택적인 else 부분이 있는 if() 및 twixt(). 내부 화합물
명령문이나 함수 정의, ; 진술을 종료합니다. 이 접근법은
편리하고 일반적인 사용에서는 문제를 일으키지 않는 것 같습니다.
Nickle 프로그램의 구문은 다음과 같습니다. 이 설명에서는 name 임의의 것을 나타냅니다
숫자로 시작하지 않는 일련의 문자, 숫자 및 _ 문자; E 임의의 것을 나타냅니다
표현; S 모든 진술을 나타냅니다. 그리고 T 모든 유형을 나타냅니다. 구문 트리플 엑스 표시
달리 명시되지 않는 한 하나 이상의 쉼표로 구분된 X입니다.
댓글 :
C 스타일 주석은 /* 및 */로 묶이고, 쉘 스타일 주석은
줄의 시작 부분에 #을 붙입니다.
피연산자:
실수
지수를 포함할 수 있으며 소수점이나 부호는 포함할 필요가 없습니다. 다음과 같이 취급됩니다.
정확한 근거. 후행 소수 부분에 여는 중괄호가 포함된 경우
중괄호는 자동으로 무시됩니다. 중괄호로 묶인 후행 부분이 포함된 경우
반복소수로 처리됩니다. '부동 소수점'' 상수는 현재
내부적으로 유리수로 표현됨: 주어진 정밀도를 갖는 부동 상수의 경우
(그리고 무한 정밀도 지수), imprecise() 내장 함수를 사용하세요
아래에서 묘사 되어진.
XNUMX진수
0부터 시작합니다(예: 014는 12와 동일합니다).
XNUMX진수
"0x"로 시작합니다(예: 0x1a는 26과 동일합니다).
string C와 같습니다. 문자열 상수는 큰따옴표로 묶입니다. 백슬래시 문자
(큰따옴표 포함)은 그 자체를 나타냅니다. 단, "\n"은 개행 문자를 나타냅니다.
캐리지 리턴의 경우 "\r", 백스페이스의 경우 "\b", 탭의 경우 "\t", 폼피드의 경우 "\f"입니다.
name 변수 참조입니다.
이름() 이름(E,E,...,E)
XNUMX개 이상의 인수를 사용하는 함수 호출입니다. 함수는 완전히 값별 호출입니다.
배열과 구조는 C에서처럼 참조되지 않고 복사됩니다.
설명 이름 T 이름 = 값
정의 표현식: 새 이름이 사용 가능해지며,
정의는 두 번째 형식의 초기화 값이고 초기화되지 않았습니다.
첫 번째 형태로. 설명자 설명은 선택 사항이 아닙니다.
가시성, 스토리지 클래스 또는 유형의 조합(순서대로) 예선 보기
이러한 한정자에 대한 설명은 바로 아래에 나와 있습니다. 구조화된 가치
표현식도 가능합니다. 아래 VALUES를 참조하세요.
Nickle 값으로 정의를 초기화할 수 있을 뿐만 아니라 C 스타일
배열, 구조 및 공용체 정의도 허용됩니다. 예를 들어
수행원
int[*,*] 이름 = {{0,1},{2,3}}
int[2,2] 이름 = {{0...}...}
명백한 의미론으로 허용됩니다. 이것이 바로 그 맥락이다.
유형의 차원은 표현식일 수 있습니다. 위의 배열 유형에 대한 설명을 참조하세요.
배열 및 구조에 대한 배열 및 구조 값에 대한 설명을 참조하세요.
초기화 구문.
자격 요건
C에서와 같이 선언이나 정의는 프로그래밍 방식의 세부 사항을 나타내기 위해 한정될 수 있습니다.
행동. C와 달리 이러한 한정자는 선택사항이지만 지정된 순서대로 나타나야 합니다.
공개 여부 :
public 임의의 정의 표현식(함수 정의, 변수 정의, 유형
정의)은 정의되는 이름을 나타내기 위해 public으로 한정될 수 있습니다.
현재 네임스페이스 외부에서 표시되어야 하며 자동으로 표시되어야 합니다.
수입. 자세한 내용은 아래 네임스페이스를 참조하세요.
보호
모든 정의 표현식(함수 정의, 변수 정의, 유형
정의)은 정의되는 이름을 나타내기 위해 protected로 한정될 수 있습니다.
현재 네임스페이스 외부에서 표시되어야 하지만 사용 가능하게 설정되어서는 안 됩니다.
수입신고로 자세한 내용은 아래 네임스페이스를 참조하세요.
수명 :
auto 자동 객체는 특정 블록에 국한됩니다. 수명은 최소한
해당 블록의 수명. 초기화 프로그램이 있는 자동 객체가 다시 초기화됩니다.
평가될 때마다. 이는 로컬 개체의 기본 수명입니다.
static 정적 객체는 특정 함수 정의에 국한됩니다. 수명은 다음과 같습니다.
적어도 그 정의의 수명. 각각 새로운 정적 객체가 생성됩니다.
둘러싸는 함수 정의가 평가되는 시간입니다.
Nickle에서 static 키워드는 수명과만 관련이 있습니다(예: static
가시성(별도의 한정자에 의해 처리됨)이 아닌 C 함수 내부)
위에서 설명한 것처럼 C의 전역 범위에서 static을 사용하는 것과는 다릅니다.
global 전역 개체는 전체 프로그램에 대해 전역적입니다. 그 수명은 다음의 수명입니다.
프로그램. 전역 개체는 정의 시 생성되고 초기화됩니다.
처음으로 보입니다. 이는 전역 객체의 기본 수명입니다.
C에서는 Nickle의 정적 수명과 전역 수명을 구분하는 것이 불가능합니다.
C 함수는 중첩된 범위를 가진 일급 개체가 아니기 때문입니다. 결정할 때
Nickle 프로그램에서 사용할 정의가 다음과 같은 경우 어떤 일이 발생해야 하는지 생각해 보세요.
재평가됨.
운영자
다음은 우선순위가 낮은 순서대로 그룹화된 기본 Nickle 연산자입니다.
에[이,이,...,이]
배열 표현식 A의 E'번째 요소 또는 E1'번째/E2'번째/등을 참조합니다.
다차원 배열의 요소. 두 배열의 배열 ala C와
NAWK와 같은 다차원 배열이 가능합니다.
구조체.태그
구조 역참조.
구조체->태그
구조 포인터 역참조 ala C.
=============
++ -- 단항 증가/감소. 접미사 또는 접두사일 수 있습니다.
- 단항 부정
! E 논리적 부정.
이자! 계승. 음수가 아닌 정수 인수가 필요합니다.
* E 포인터 역참조.
& E 참조 구성.
=============
(U) E 태그 U와 값 E를 사용하여 공용체 유형의 값을 구성합니다.
=============
** 지수화. 두 피연산자 모두 분수일 수 있습니다. 왼쪽 피연산자는 다음이 아니어야 합니다.
오른쪽 피연산자가 정수가 아니면 음수입니다. 결과 유형은
오른쪽 피연산자가 정수이면 왼쪽 피연산자이고, 그렇지 않으면 실수입니다.
이것은 Nickle의 유일하게 알려진 유형-불건전한 기능입니다: 2 ** -3과 같은 표현
정적으로는 정수 유형이지만 동적으로 유리수를 생성합니다.
결과. 이로 인해 나중에 런타임 유형 오류가 발생할 수 있습니다. 고려하세요.
정수 x = 2 ** -3;
=============
* / // %
곱하기, 나누기, 정수 나누기 및 나머지. 마지막 세 개의 오른쪽 피연산자
연산자는 XNUMX이 아니어야 합니다. 나누기 연산자의 결과 유형은 항상 다음과 같습니다.
적어도 유리수: 정수 나누기 연산자의 결과 유형은 항상
정수. 이는 정수 나누기가 다음과 같이 암시되는 C에서 눈에 띄게 벗어났습니다.
정수 피연산자. 정수 나누기는 다음과 같이 정의됩니다.
x // y == y > 0 ? 바닥(x/y) : 천장(x/y)
나머지는 항상 음수가 아니며 다음과 같이 정의됩니다.
x % y = x - (x // y) * y
=============
+ - 덧셈과 뺄셈.
=============
<< >> 정수 피연산자를 사용하여 비트 단위 왼쪽 및 오른쪽 시프트. 음수 오른쪽 피연산자가 작동합니다.
예상대로. 이러한 연산자는 다음과 같이 정의됩니다.
x << y = x * 2 ** y
x >> y = x // 2 ** y
이를 보는 또 다른 방법은 음수 왼쪽 피연산자가 다음으로 간주된다는 것입니다.
무한 XNUMX의 보수 표현(즉, 무한대로 부호 확장)
오른쪽 시프트 기호 - 왼쪽 피연산자를 확장합니다.
=============
<= >= < >
관계 연산자.
=============
== != 항등 연산자.
=============
마지막으로 우선순위가 낮아지는 순서대로:
& 비트 AND. 음수 피연산자는 무한한 XNUMX의 보수로 간주됩니다.
표현(즉, 무한대로 부호 확장).
^ 비트별 XOR. 비트 AND와 같은 음수 피연산자.
| 비트별 OR. 비트 AND와 같은 음수 피연산자.
&& 단락 논리 AND.
|| 단락 논리 OR.
전자? 이 : 이
조건식: 첫 번째 표현식이 논리적인 경우 true, 값은 두 번째입니다.
표현, 그렇지 않으면 세 번째입니다.
fork E 스레드를 생성(및 반환)합니다. 자세한 내용은 아래 스레드를 참조하세요.
= += -= *= /= //= %= **= <<= >>= ^= &= |=
할당 연산자. 왼쪽은 할당 가능해야 합니다. x = y 동등하다
에 x = x y
E , E 오른쪽 표현식을 반환합니다.
타입
Nickle의 유형 선언 구문은 ``왼쪽'' 변형과 더 유사합니다.
C 구문보다 Java 구문입니다. 기본적으로 유형은 다음으로 구성됩니다.
폴리 정수 유리수 실수 문자열 연속 void
언어의 기본 유형입니다. void 유형은 실제로 특정에서만 사용할 수 있습니다.
컨텍스트, 특히 함수 반환. 현재는 '단위' 유형으로 구현되어 있습니다.
ala ML이므로 C와는 동작이 약간 다릅니다. 유형 폴리는
다른 모든 유형의 상위 유형(즉, 정적 유형을 금지하는 데 사용할 수 있음)
확인) 유형이 표시될 필요가 없는 대부분의 상황에서 기본 유형입니다.
파일 세마포어 스레드
또한 기본 유형이 내장되어 있지만 파일 및 스레드 ADT에 통합되어 있습니다. 아래를 참조하세요.
더 보기 About 유형 :
니켈 다형성 데이터 지원: 표현식이 평가됨에 따라 데이터 유형이 선택됩니다.
결과에 맞게. 모든 Nickle 객체는 정적으로 유형이 지정될 수 있습니다. 이 경우 경계는
위반은 컴파일 타임에 오류로 표시됩니다. 다형성 변수 및 함수
할당된 데이터 유형에 제한을 두지 마십시오. 이는 모든 사용자의 기본 유형입니다.
사물.
폴리 이는 모든 데이터 유형의 통합을 설명합니다. 이 유형의 변수에는 다음이 포함될 수 있습니다.
모든 데이터 값.
int 임의의 정밀도 정수입니다.
이성
임의의 정밀도 유리수.
실수 임의의 지수 정밀도 부동 소수점 숫자입니다. 많은 계산이 불가능하기 때문에
Nickle은 유리수로 정확하게 수행되기 때문에 부정확한 숫자를 구현합니다.
부동 소수점에 대해 기계 독립적인 자체 표현을 사용하는 산술
숫자. 내장 함수 imprecise(n)는 256비트의 실수를 생성합니다.
imprecise(n,p)는 p를 사용하여 실수를 생성하는 반면 숫자 n에서 정밀도를 얻습니다.
약간의 정밀도.
T[] 하나 이상의 차원을 포함하는 T 유형의 배열입니다. XNUMX차원은 없다
Nickle의 배열.
T[*] T 유형의 XNUMX차원 배열입니다. C와 달리 배열의 차원은 결코
Nickle의 해당 유형의 일부입니다. 또한 배열과 포인터는 서로 관련이 없는 유형입니다.
니켈.
티[*,*,...,*]
T 유형의 XNUMX차원 배열. 별표 "*"는 선택 사항이 아닙니다. 처럼
이전 단락에서 ``T[]''는 XNUMX차원 배열이 아니라는 점을 분명히 했습니다.
T[이,이,...,이]
정의 컨텍스트에서 배열의 각 차원에 대해 정수 값이 제공될 수 있습니다.
문맥. 이는 엄격히 가치 창출 목적을 위한 것이며,
유형. 배열 유형은 기본 유형과 차원 수에 의해서만 결정됩니다.
배열의.
T0() T0(티,티,...,티)
T0 유형을 반환하는 함수입니다. 함수는 0개 이상의 인수를 허용합니다.
T0() T0(티,티,...,티 ...)
XNUMX개 이상의 필수 인수와 임의 개수의 인수를 허용하는 함수
선택적 인수. 세 개의 점으로 이루어진 두 번째 시퀀스(줄임표)는 구문입니다.
메타 구문: 자세한 내용은 varargs 함수 설명을 참조하세요.
*T 유형의 위치에 대한 TA 포인터. Nickle의 포인터 연산은 다음에서만 작동합니다.
배열에 대한 포인터: 포인터는 올바른 유형이어야 하며 결코 이탈할 수 없습니다.
출입 금지 구역의. 포인터는 어떤 위치를 가리키거나 null(0)일 수 있습니다. 에서와 같이
C에서 ``*''의 우선순위는 ``[]'' 또는 ``()''의 우선순위보다 낮습니다: 사용
필요에 따라 괄호를 사용하세요.
구조체 {T 이름; T 이름; ...}
주어진 이름과 유형의 필드가 있는 구조입니다. T 유형은 선택 사항입니다.
해당 필드가 없으면 필드 유형은 폴리입니다.
Union {T 이름; T 이름; ...}
주어진 유형의 ``분리된 결합''입니다. 이는 변형 레코드 유형과 유사합니다.
Pascal 또는 C 공용체 유형이 아닌 ML의 데이터 유형: 이름은
주어진 유형 중 정확히 하나가 주어진 시간에 주어진 값에 적용됩니다.
(T) 그룹화를 위한 괄호.
형식 정의:
C에서와 마찬가지로 typedef 문을 사용하여 새로운 유형 이름을 만들 수 있습니다. 구문은 다음과 같습니다
typedef T 유형이름;
여기서 T는 니켈 유형입니다. 결과 유형 이름은 유형이 예상되는 어느 곳에서나 사용될 수 있습니다.
Values
Nickle의 기본 유형 값은 예상대로입니다. 위의 상수 구문을 참조하세요.
파일, 세마포어 및 연속 유형의 값은 현재 호출을 통해서만 생성될 수 있습니다.
내장 함수: 이러한 유형의 Nickle 상수는 존재하지 않습니다.
위의 유형에서 언급한 것처럼 Nickle에는 여러 종류의 ``구조화된 값''이 있습니다: 배열,
함수, 포인터, 구조 및 분리된 공용체. 이들 모두에는 몇 가지 공통점이 있습니다.
속성. 생성되면 모든 구성 요소 값이 초기화되지 않습니다(별도의 경우 제외).
지정). 초기화되지 않은 값을 사용하려고 하면 컴파일 타임 오류가 발생합니다.
오류 또는 런타임 예외.
어레이:
[E]는 E 요소를 사용하여 (XNUMX부터 시작하는) 배열을 만듭니다. E는 음수가 아니어야 합니다.
[E]{V,V,...,V}
Vs로 초기화된 E 요소가 있는 배열을 만듭니다. 너무 적은 경우
초기화 프로그램이 없으면 나머지 요소는 초기화되지 않은 상태로 유지됩니다.
[E]{V,V,...,V...}
두 번째 줄임표(점 XNUMX개)는 메타 구문이 아니라 구문입니다. E를 사용하여 배열 만들기
강요. 배열의 첫 번째 요소는 Vs에 따라 초기화됩니다.
나머지 요소는 마지막 V와 동일한 값을 받습니다. 이 구문은
아래 배열 이니셜라이저와 함께 명백한 방식으로 사용될 수 있습니다.
[*]{V,V,...,V}
이니셜라이저와 정확히 같은 수의 요소로 초기화된 배열을 만듭니다. 거기
하나 이상의 초기화 프로그램이어야 합니다.
[E,E,...,E] [*,*,...,*]
다차원 배열을 만듭니다. 정수 표현식과 "*"는 혼합될 수 없습니다.
배열의 차원은 정의에 따라 전적으로 지정되거나 지정되지 않습니다.
이러한 배열은 초기화된 상태로 생성될 수도 있습니다. 초기화에 대해서는 다음 단락을 참조하세요.
통사론.
(T[E]) (T[E,E,...,E]) (T[E]){E,E,...,E}
(T[E,E,...,E]){{E,...},...,{E,...}}
T 유형의 배열을 생성하기 위한 대체 구문. 중괄호로 묶인 초기화 프로그램은
선택 사항입니다. 이니셜라이저 수는 지정된 값보다 작거나 같아야 합니다.
각 차원의 요소 수. 다차원 배열의 경우 추가 곱슬
이니셜라이저의 차원당 중괄호가 필요합니다. 이는 C와는 다릅니다.
선택 사항입니다.
(T[*]){E,E,...,E} (T[*,*,...,*]){{E,...},...,{E,... }}
각 차원의 크기가 최대 크기로 지정된 T 유형의 배열을 만듭니다.
해당 차원의 하위 배열에 있는 초기화 프로그램입니다.
포인터:
0 포인터가 필요한 상황에서 널 포인터입니다.
&V &A[E,E,...,E] &S.N
주어진 변수, 배열 요소 또는 구조체 멤버에 대한 포인터를 만듭니다. 그만큼
포인터의 유형은 *T입니다. 여기서 T는 가리키는 개체의 유형입니다.
*P 포인터 P가 가리키는 값. C에서와 같이 보거나 수정할 수 있습니다.
기능 :
(T func(){S;S;...S;}) (T func(T 이름,T 이름,...T 이름){S;S;...S;})
함수 표현: XNUMX개 이상의 형식 매개변수로 구성된 함수를 나타냅니다.
주어진 유형과 이름, 주어진 결과 유형을 반환합니다. 함수 본문이 제공됩니다.
중괄호로 묶인 명령문 목록을 사용합니다. 모든 유형은 선택사항이며 기본값은
폴리. 위에서 언급했듯이 함수는 엄격하게 값별로 호출됩니다. 특히 배열은
구조는 참조되기보다는 복사됩니다.
T 함수 이름(T 이름,T 이름,...,T 이름){S;S;...S;}
XNUMX개 이상의 인수로 구성된 함수를 정의합니다. 구문 설탕
T(T,T,...T) name = (T func(T 이름,T 이름,...T 이름){S;S;...S;});
T 함수 이름(T 이름, T 이름 ...)
여기서 줄임표는 메타 구문이 아니라 구문입니다.
함수 뒤에 점 XNUMX개가 오면 함수는 더 많은 실제 값으로 호출될 수 있습니다.
공식보다. 모든 ``추가'' 실제 값은 형식 배열에 포함됩니다.
주어진 이름, 마지막 인수의 선택적 유형 T에 대해 유형 검사를 거쳤습니다.
(기본 폴리).
구조 :
(struct { T 이름; T 이름; ...T 이름; }){name = E; 이름 = E; ...이름=E;}
구조화된 유형의 값을 작성하십시오. 명명된 필드는 지정된 값으로 초기화됩니다.
나머지는 초기화되지 않은 값입니다. 표시된 대로 초기화는 레이블별로 이루어집니다.
C에서와 같이 위치 지정이 아닌
조합 :
(union { T 이름; T 이름; ...T 이름; }.name) E
주어진 공용체 유형의 값, .name에 의해 제공된 변형 및 값을 생성합니다.
E에 의해 제공됩니다. E는 이름과 유형이 호환되어야 합니다.
성명서
명령문 구문은 C의 구문과 매우 유사합니다. 일부 추가 구문은
Nickle의 추가 기능을 지원하기 위해 추가되었습니다.
이자형; 표현식을 평가합니다.
{봄 여름 시즌}
포함된 문을 순서대로 실행합니다.
(E) S라면
기본 조건부.
(E) S라면
조건부 실행.
else S Else는 일반적인 구문과 의미를 사용하여 허용됩니다. 특히 else는 바인딩합니다.
가장 최근에 적용 가능한 if() 또는 twixt()로 변경하세요.
동안 (E) S
C 스타일 while 루프.
S를 하면서 (E);
C 스타일 do 루프.
(opt-E; opt-E; opt-E) S에 대해
C 스타일 for 루프.
스위치(E) { 케이스 E: S-목록 케이스 E: S-목록 ... 기본값: S-목록 }
C 스타일 사례 설명. 사례 표현식은 상수일 필요는 없습니다.
표현이지만 임의적일 수 있습니다. 스위치를 평가하는 첫 번째 사례
인수가 사용되며, 그렇지 않으면 기본값이 있고, 그렇지 않으면 스위치 본문을 건너뜁니다.
twixt(옵션-E; 옵션-E) S
twixt(opt-E; opt-E) S else S
첫 번째 인수 표현식이 true로 평가되면 twixt()의 본문과 그 다음
두 번째 인수 표현식이 평가됩니다. 첫 번째 인수 표현식인 경우
false로 평가되면 else 문이 있는 경우 실행됩니다. 그렇지 않으면,
전체 twixt() 문을 건너뜁니다.
twixt() 문은 이러한 모든 이벤트가 지정된 시간에 발생하도록 보장합니다.
twixt()가 (외부에서) 들어오거나 나가는 방식에 관계없이 순서를 정합니다.
예외, 연속, 중단을 포함합니다. (Java의 ``finally'' 절과 비교해 보세요.)
S를 시도해 보세요.
try S 캐치 이름(T 이름, ...) { S; ... };
try S 캐치 이름(T 이름, ...) { S; ... } ... ;
첫 번째 문 S를 실행합니다. 실행 중에 예외가 발생하고
name은 catch 블록의 이름과 일치합니다. catch에 형식 매개변수를 바인딩합니다.
예외의 실제 매개변수를 차단하고 catch 본문을 실행합니다.
차단하다. 시도당 여러 개의 catch 블록이 있을 수 있습니다. 제로 어획량은 합법적이지만
상대적으로 쓸모가 없습니다. catch 블록이 완료된 후 다음 이후에도 실행이 계속됩니다.
시도 절. else와 마찬가지로 catch는 가장 최근에 적용 가능한 시도에 바인딩됩니다.
블록을 잡아라.
이름 올리기(이름, 이름, ..., 이름)
XNUMX개 이상의 인수를 사용하여 명명된 예외를 발생시킵니다.
; 널 문
부서지다; 가장 가까운 for/do/while/switch/twixt 문의 실행을 중단합니다.
twixt 문이 종료되면 Leave 표현식이 실행됩니다.
계속;
가장 가까운 엔클로저 for/do/while의 조건부 테스트로 직접 분기
성명서.
E를 반환;
가장 가까운 엔클로징 함수에서 값 E를 반환합니다.
네임스페이스:
Java 및 C++와 마찬가지로 Nickle에도 다음과 같은 개념이 있습니다. 네임 스페이스, 부분적으로 이름 모음
제한된 가시성. Nickle에서는 네임스페이스가 다음과 같이 생성됩니다. 네임 스페이스 명령.
opt-P 네임스페이스 N { S ... }
문 S에 정의된 모든 이름을 N이라는 네임스페이스에 배치합니다.
선택적 한정자 P는 키워드 public일 수 있지만 주의하세요. 이는 단지
이름 N 자체는 현재 범위의 다른 곳에서 볼 수 있으며 아무것도 없습니다.
네임스페이스 내부 항목의 가시성과 관련이 있습니다.
확장 네임스페이스 N { S ... }
주어진 네임스페이스 N을 다시 열고, public으로 정의된 이름으로 확장합니다.
주어진 진술 S.
네임스페이스 내부에 정의된 이름은 네임스페이스 외부에서 보이지 않습니다.
키워드 public으로 한정됩니다. 공개 이름은 다음을 사용하여 참조할 수 있습니다.
경로 표기법:
네임스페이스::네임스페이스::...::네임스페이스::이름
지정된 네임스페이스 집합 내에 정의된 대로 지정된 이름을 나타냅니다. 그만큼
이중 콜론 구문은 불행하게도 의미가 약간 다릅니다.
C++이지만 좋은 기호는 모두 사용되었으며 다음과 같은 기능이라고 생각됩니다.
네임스페이스 구분 기호는 구조 연산자와 구문이 다릅니다. ~ 안에
예를 들어 Java라는 문구는 다음과 같습니다.
이름.이름.이름
구문상 모호합니다. 중간 이름은 구조일 수도 있고
네임 스페이스.
N 가져오기;
이름 N은 네임스페이스를 참조해야 합니다. 이 네임스페이스의 모든 공개 이름은
현재 범위로 가져옵니다(충돌하는 이름 범위 제외).
내장
니켈 표준 함수 모음이 내장되어 있습니다. 이들 중 일부는 C로 작성되었습니다.
그러나 대부분은 Nickle로 작성되었습니다. 여러 함수 모음이 내장과 연관되어 있습니다.
데이터 유형: 해당 네임스페이스는 유형과 함께 ADT로 간주되어야 합니다.
최상위 내장:
int printf(문자열 fmt, 폴리 인수...)
File::fprintf(stdout, fmt, args ...)를 호출하고 그 결과를 반환합니다.
문자열 함수는 ()를 얻습니다
File::fgets(stdin)을 호출하고 그 결과를 반환합니다.
문자열 함수 scanf(문자열 fmt, *poly args...)
File::vfscanf(stdin, fmt, args)를 호출하고 그 결과를 반환합니다.
문자열 함수 vscanf(문자열 fmt, (*poly)[*] args)
File::vfscanf(stdin, fmt, args)를 호출하고 그 결과를 반환합니다.
실제 부정확(합리적 값)
위의 real 유형에 대한 설명을 참조하세요.
실수 부정확(합리적 값, int prec)
위의 real 유형에 대한 설명을 참조하세요.
int string_to_integer(문자열 s)
int atoi(문자열 s)
인수 s는 부호 있는 숫자 문자열이고 결과는 정수입니다.
나타냅니다. 문자열 s가 구문적으로 XNUMX진수, XNUMX진수, XNUMX진수 또는
명시적인 10진수 상수인 경우에는 그렇게 처리하십시오.
int string_to_integer(string s, int base)
int atoi(문자열 s, int 베이스)
s를 주어진 밑수에서 숫자의 문자열로 처리합니다. 0의 밑은 밑이 없는 것처럼 작동합니다.
논쟁. 그렇지 않으면 문자열의 기본 사양 구문이 무시됩니다.
int putchar(int c)
File::putc(c, stdout)을 사용하여 표준 출력에 지정된 문자를 배치하고
결과를 반환합니다.
int sleep(int 밀리초)
최소 msecs 밀리초 동안 현재 스레드를 일시 중단해 보세요. 1을 반환합니다.
조기 복귀, 그렇지 않은 경우 0입니다.
int 종료(int 상태)
주어진 상태 코드로 Nickle을 종료하십시오. 아무것도 반환하지 마십시오.
int 희미(폴리[*] a)
XNUMX차원 배열 a가 주어지면, Dim()은 a의 요소 수를 반환합니다.
int[] 희미함(폴리[] a)
임의의 배열 a가 주어지면, 희미함()은 다음의 크기를 제공하는 정수 배열을 반환합니다.
a의 각 차원 따라서, 희미(dims(a))는 a의 차원 수입니다.
*폴리 참조(폴리 v)
임의의 값 v가 주어지면 해당 값을 저장소에 '박스'로 저장하고 포인터를 반환합니다.
상자.
유리수 string_to_real(문자열 s)
유리수 atof(문자열 s)
실수 상수 문자열 s를 연관된 실수로 변환합니다.
숫자 절대(실수 v)
v의 절대값을 반환합니다. 선택한 결과 유형은 주어진 것과 일치합니다.
문맥.
int 바닥(실제 v)
v보다 작거나 같은 가장 큰 정수를 반환합니다. v가 실수이면 실패합니다.
그리고 정밀도가 너무 낮습니다.
int ceil(실제 v)
v보다 크거나 같은 가장 작은 정수를 반환합니다. v가
실제이고 정밀도가 너무 낮습니다.
정수 지수(실수 v)
부정확한 실수 v의 지수를 반환합니다.
유리수 가수(실수 v)
부정확한 실수 v의 가수를 0 <= m <= 0.5 인 유리수 m으로 반환합니다.
정수 분자(유리수 v)
유리수 v의 분자를 반환합니다. 즉, v = n/d가 약식인 경우,
n을 반환합니다.
int 분모(유리수 v)
유리수 v의 분모를 반환합니다. 즉, v = n/d가 약식인 경우,
반환 d.
정수 정밀도(실수 v)
부정확한 실수의 가수의 정밀도 비트 수를 반환합니다.
v.
정수 기호(실수 v)
v가 음수이거나 음수가 아니므로 -1 또는 1을 반환합니다.
int 비트_폭(int v)
내부적으로 abs(v)를 표현하는 데 필요한 비트 수를 반환합니다.
int is_int(폴리 v)
술어를 입력하세요.
int is_rational(폴리 v)
숫자 유형 술어는 다음과 같습니다. 합리적이다(1)은 1을 반환합니다.
int is_number(폴리 v)
술어를 입력하세요.
int is_string(폴리 v)
술어를 입력하세요.
int is_file(폴리 v)
술어를 입력하세요.
int is_thread(폴리 v)
술어를 입력하세요.
int is_semaphore(폴리 v)
술어를 입력하세요.
int is_continuation(폴리 v)
술어를 입력하세요.
int is_array(폴리 v)
술어를 입력하세요.
int is_ref(폴리 v)
유형 조건자: 포인터 유형을 확인합니다. 이는 틀림없이 잘못된 기능이며,
변경합니다.
int is_struct(폴리 v)
술어를 입력하세요.
int is_func(폴리 v)
술어를 입력하세요.
int is_void(폴리 v)
술어를 입력하세요.
int gcd(int p, int q)
p와 q의 GCD를 반환합니다. 결과는 항상 긍정적입니다.
정수 xor( 정수 a, 정수 b)
a ^b 를 반환합니다. 이는 대부분 Nickle이 xor 연산자를 사용하기 전의 것입니다.
poly setjmp(계속 *c, poly retval)
setjmp() 및 longjmp() 프리미티브는 연속 유형과 함께
ADT는 거의 임의적인 제어 흐름 전송에 유용합니다. setjmp() 및
longjmp() 내장 기능은 longjmp()에 대한 제한 사항을 제외하면 C의 내장 기능과 유사합니다.
항상 위쪽으로 점프하는 것은 제거됩니다(!): setjmp()를 통해 저장된 연속은 결코
프로그램 수명 동안 유효하지 않습니다.
setjmp() 내장은 현재 위치와 컨텍스트를 연속으로 저장합니다.
포인터 인수를 반환하고 두 번째 인수를 반환합니다.
무효 longjmp(계속 c, poly retval)
longjmp() 내장은 호출 사이트로 반환되지 않고 대신
두 번째와 동일한 반환 값을 사용하여 연속을 생성한 setjmp()
longjmp()의 인수입니다.
문자열 프롬프트
최상위 수준에서 대화형 사용 중에 인쇄되는 프롬프트입니다. 기본 ">". 언제
명령문이나 표현식의 나머지 부분을 기다리고 디버깅할 때
각기. 기본값은 ">", "+" 및 "-"입니다.
문자열 프롬프트2
명령문의 나머지 부분을 기다릴 때 대화식 사용 중에 인쇄되는 프롬프트
또는 표현. 기본값은 "+"입니다.
문자열 프롬프트3
디버깅 시 대화형 사용 중에 인쇄되는 프롬프트입니다. 기본 "- ".
문자열 형식
최상위 값을 인쇄하기 위한 printf() 형식입니다. 기본값은 "%g"입니다.
문자열 버전
현재 실행 중인 Nickle 구현의 버전 번호입니다.
문자열 빌드
현재 실행 중인 Nickle 구현의 빌드 날짜 형식입니다.
"yyyy/mm/dd" 또는 "?" 어떤 이유로든 빌드 날짜를 알 수 없는 경우.
파일 표준 입력
표준 입력 스트림에 바인딩됩니다.
파일 표준 출력
표준 출력 스트림에 바인딩됩니다.
파일 표준 오류
표준 오류 스트림에 바인딩됩니다.
예외 적용 :
몇 가지 표준 예외가 사전 선언되어 Nickle에 의해 내부적으로 사용됩니다.
uninitialized_value 예외(문자열 msg)
초기화되지 않은 값을 사용하려고 시도했습니다.
예외 invalid_argument(string msg, int arg, poly val)
내장 함수에 대한 인수 번째 인수에 잘못된 값 val이 있습니다.
예외 readonly_box(문자열 msg, 폴리 발)
읽기 전용 수량 값을 val로 변경해 보십시오.
예외 invalid_array_bounds(string msg, 폴리 a, 폴리 i)
인덱스 i의 배열 a에 액세스하려는 시도가 범위를 벗어났습니다.
예외 Divide_by_zero(문자열 메시지, 실수 숫자, 실수 덴)
den == 0을 사용하여 num을 den으로 나누려고 시도합니다.
예외 valid_struct_member(문자열 메시지, 폴리 구조체, 문자열 이름)
존재하지 않는 개체 구조체의 멤버 이름을 참조하려고 했습니다.
예외 valid_binop_values(문자열 msg, 폴리 arg1, 폴리 arg2)
arg1 및 arg2 인수를 사용하여 이항 연산자를 평가하려고 시도합니다. 여기서 적어도 하나는
이 값 중 유효하지 않습니다.
예외 valid_unop_values(문자열 msg, 폴리 인수)
잘못된 인수 arg를 사용하여 단항 연산자를 평가하려고 했습니다.
빌트인 네임스페이스:
Math Math 네임스페이스에서 사용할 수 있는 수학 함수는 다음과 같은 방식으로 구현됩니다.
C 라이브러리와 호환되도록 고안되었습니다. 해당 담당자에게 문의하시기 바랍니다
자세한 내용은 설명서를 참조하세요.
진짜 파이
원주/직경 비율의 값을 제공하는 부정확한 상수입니다.
기본 정밀도인 256비트로 원을 그립니다.
보호된 실제 전자
자연 로그의 밑의 값을 다음과 같이 제공하는 부정확한 상수입니다.
기본 정밀도는 256비트입니다. e는 보호되어 있으므로 다음을 통해 참조되어야 합니다.
수학::e, 알파벳의 다섯 번째 글자를 사용할 때 발생하는 문제를 피하기 위해
최고 수준.
실수함수 sqrt(real v)
v의 제곱근을 반환합니다.
실수함수 cbrt(real v)
v의 세제곱근을 반환합니다.
실수 함수 exp(real v)
e**v를 반환합니다.
실수 함수 로그(실수 a)
e**v == a가 되는 v를 반환합니다. a가 아닌 경우 valid_argument 예외가 발생합니다.
양.
실수 함수 log10(실수 a)
10**v == a가 되는 v를 반환합니다. a가 아닌 경우 valid_argument 예외가 발생합니다.
양.
실수 함수 log2(실수 a)
2**v == a가 되는 v를 반환합니다. a가 아닌 경우 valid_argument 예외가 발생합니다.
양.
실수 함수 pi_value(int prec)
prec 비트를 사용하여 원주와 직경의 비율을 반환합니다.
정밀함.
실수 함수 sin(실수 a)
직각 a의 빗변에 대한 대변의 비율을 반환합니다.
라디안으로 주어진 삼각형.
실수 함수 cos(실수 a)
직각 a의 빗변에 대한 인접 변의 비율을 반환합니다.
라디안으로 주어진 삼각형.
무효 함수 sin_cos(real a, *real sinp, *real cosp)
sinp 및 cosp가 가리키는 위치에 저장된 sin(a) 및 cos(a)를 반환합니다.
각기. 포인터 중 하나가 0이면 해당 위치에 저장하지 마십시오. 아마도
두 삼각 함수를 독립적으로 호출하는 것보다 약간 빠릅니다.
실수함수 tan(real a)
직각 a의 인접 변에 대한 반대 변의 비율을 반환합니다.
라디안으로 주어진 삼각형. tan(pi/2)는 현재 오류가 아닙니다.
입력의 정밀도에 따라 매우 큰 숫자를 반환합니다.
실수 함수 asin(real v)
sin(a) == v와 같은 를 반환합니다.
실수 함수 acos(real v)
cos(a) == v와 같은 를 반환합니다.
실수 함수 atan(real v)
tan(a) == v를 반환합니다.
실수 함수 atan2(실수 x, y)
tan(a) == x / y를 반환합니다. y == 0으로 올바르게 처리합니다.
실수 함수 pow(실수 a, 실수 b)
** 연산자의 구현입니다.
File File 네임스페이스는 파일 값에 대한 작업을 제공합니다.
int 함수 fprintf(파일 f, 문자열 s, ....)
UNIX stdio 라이브러리 fprintf()와 마찬가지로 형식화된 값을 파일에 인쇄합니다. fprintf()
그리고 printf()는 stdio 라이브러리 버전의 합리적인 하위 집합인 %c, %d, %e를 허용합니다.
%x, %o, %f, %s, %g는 값을 스마트 인쇄하기 위해 %v와 마찬가지로 예상대로 작동합니다. 체재
수정자는 퍼센트 기호와 형식 문자 사이에 배치하여 수정할 수 있습니다.
서식 지정. 입력 및 출력 형식에는 알려진 버그가 많이 있습니다.
형성 편지 :
%c 작은 정수 인수(0..255)가 필요하며 ASCII로 형식화됩니다.
문자.
%d 정수 인수가 필요하며 정수 형식으로 지정됩니다.
%x 정수 인수가 필요하며 16진수(XNUMX진수) 형식으로 형식이 지정됩니다.
정수.
%o 정수 인수가 필요하며 기본 8(XNUMX진수) 정수로 형식이 지정됩니다.
%e 숫자 인수가 필요하며 과학적 표기법으로 형식을 지정합니다.
%f 숫자 인수가 필요하며 고정 소수점 표기법으로 형식을 지정합니다.
%s 문자열 인수가 필요하며 문자열을 문자 그대로 내보냅니다.
%g 숫자가 필요하며 정확하고 읽기 쉬운 표현을 선택하려고 합니다.
형식을 지정하십시오.
형성 수정자:
숫자 모든 형식 문자는 다음을 나타내는 정수 형식 수정자를 사용합니다.
서식을 지정할 데이터의 서식 필드에 있는 공백 수입니다. 그만큼
값은 이 공간에 오른쪽 정렬되어 인쇄됩니다.
숫자.숫자
실제 형식은 다음을 나타내는 한 쌍의 정수 형식 수정자를 사용합니다.
필드 너비 및 정밀도(소수점 이하 문자 수)
형식화된 값. 정수 중 하나는 생략될 수 있습니다.
- 무한 정밀도를 나타내는 정밀도 값입니다.
* fprintf()의 다음 인수는 필드 너비 또는
형식화된 값의 정밀도.
파일 함수 string_write()
기록된 값을 문자열로 수집하는 파일을 반환합니다.
int 함수 닫기(파일 f)
f 파일을 닫고 성공 표시를 반환합니다.
int 함수 플러시(파일 f)
파일 f의 버퍼를 플러시하고 성공 표시를 반환합니다.
int 함수 getc(파일 f)
파일 f에서 다음 문자를 가져와서 반환합니다.
int 함수 end(파일 f)
파일 f가 EOF에 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
int 함수 오류(파일 f)
파일 f에 오류가 보류 중이면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
int 함수clear_error(파일 f)
파일 f에서 보류 중인 오류를 지우고 성공 표시를 반환합니다.
파일 함수 string_read(문자열 s)
내용이 문자열 s인 가상 파일을 반환합니다.
문자열 함수 string_string(파일 f)
이전에 파일 f에 기록된 문자열을 반환합니다.
string_read() 또는 string_write()에 의해 생성됩니다. 현재 다른 파일의 동작은
찾으시는 주소가 없습니다.
파일 함수 열기(문자열 경로, 문자열 모드)
주어진 모드 문자열인 UNIX stdio fopen()을 사용하여 주어진 경로에서 파일을 엽니다.
허용되는 모드는 stdio와 같습니다: "r", "w", "x", "r+", "w+" 및 "x+".
정수 함수 fputc(정수 c, 파일 f)
출력 파일 f에 문자 c를 출력하고 성공 표시를 반환합니다.
정수 함수 ungetc(정수 c, 파일 f)
문자 c를 입력 파일 f에 다시 푸시하고 다음의 표시를 반환합니다.
성공.
정수 함수 setbuf(파일 f, 정수 n)
파일 f와 관련된 버퍼의 크기를 n으로 설정하고 n을 반환합니다.
문자열 함수 fgets(파일 f)
파일 f에서 입력 한 줄을 가져오고 결과 문자열을 반환합니다.
파일 함수 파이프(문자열 경로, 문자열[*] argv, 문자열 모드)
주어진 경로에서 프로그램을 시작하고, 파일의 한쪽 끝인 파일을 반환합니다.
주어진 프로세스에 "파이프"합니다. 모드 인수는 파이프에서 읽기 위해 "r"일 수 있습니다.
"w"는 파이프에 씁니다. argv 인수는 다음을 제공하는 문자열 배열입니다.
프로그램에 전달되는 인수는 일반적으로 argv[0]입니다.
프로그램 이름.
int 함수 인쇄(파일 f, 폴리 v, 문자열 fmt, int 베이스, int 너비, int prec, 문자열
채우다)
v 값을 주어진 기본, 너비, prec 및 채우기를 사용하여 fmt 형식으로 파일 f에 인쇄합니다.
File::fprintf()에 의해 내부적으로 사용됩니다.
int 함수 fscanf(파일 f, 문자열 fmt, *폴리 인수...)
args 배열이 가리키는 위치를 파일 f에서 가져온 값으로 채웁니다.
문자열 fmt에 따르면. 형식 지정자는 UNIX stdio scanf()와 유사합니다.
"%d", "%e", "%f", "%c" 및 "%s" 지정자는 예상대로 지원됩니다.
수정자.
int 함수 vfscanf(파일 f, 문자열 fmt, (*poly)[*] args)
파일 f, 형식 fmt, 인수 배열 args가 주어지면 fscanf()
적절하게.
Thread 네임스페이스 Thread는 프로그래밍에 유용한 다양한 작업을 지원합니다.
스레드, 공유 주소 공간에서 동시 제어 흐름을 제공합니다.
스레드와 관련된 특수 구문이 하나 있습니다.
포크(E)
임의의 표현식을 허용하고 이를 새 하위 스레드에서 평가합니다.
상위 스레드는 스레드를 포크 표현식의 값으로 받습니다.
Thread 함수의 나머지 부분은 상당히 표준적입니다.
int 함수 kill(스레드 목록...)
배열 목록에서 실행 중인 모든 스레드를 종료합니다. 인수 없이
현재 실행 중인 스레드. 종료된 스레드 수를 반환합니다.
int 함수 추적(폴리 목록...)
배열 목록에서 실행 중인 모든 스레드의 상태를 표시합니다. 아무런 주장도 없이,
기본 연속을 추적합니다. 추적된 스레드 수를 반환합니다.
int 함수 cont()
중단된 스레드의 실행을 계속하고 계속된 스레드 수를 반환합니다.
스레드.
스레드 함수 전류()
현재 스레드를 반환합니다.
int 함수 목록()
현재 실행 중인 스레드를 stdout에 보고합니다.
int 함수 get_priority(스레드 t)
지정된 스레드의 우선순위를 보고합니다.
스레드 함수 id_to_thread(int id)
해당 스레드가 있으면 해당 ID를 반환하고 그렇지 않으면 0을 반환합니다.
폴리 함수 조인(스레드 t)
스레드 t가 종료될 때까지 기다렸다가 반환하는 모든 것을 반환합니다.
int 함수 set_priority(스레드 t, int i)
스레드 t의 우선순위를 레벨 i로 설정하려고 시도하고 새 우선순위를 반환합니다.
우선 순위가 높을수록 런타임이 길어집니다. 우선 순위가 높은 작업이 항상 실행됩니다.
우선순위가 낮은 작업 대신 동일한 우선순위의 스레드가 먼저 처리됩니다.
공허하게 멀티 태스킹.
세마포어
세마포어 네임스페이스는 세마포 내장 ADT에 대한 작업을 캡슐화합니다. ㅏ
세마포어는 스레드 동기화에 사용됩니다. 각 signal() 작업은
세마포어는 해당 세마포어에서 가장 최근 스레드를 wait()로 깨웁니다. 그만큼
대기 프로세스의 '개수'는 세마포어 생성 시 설정될 수 있습니다.
세마포어 함수 new(int c)
대기 프로세스의 초기 개수 c를 사용하여 새 세마포어를 만듭니다. 만약 c가
긍정적이면 c 스레드가 한 블록 전에 세마포어를 기다릴 수 있음을 의미합니다. 만약에
c가 음수이면 세마포어를 기다려야 하는 스레드 수를 설정합니다.
추가 대기 전에는 차단되지 않습니다.
세마포어 함수 new()
상담 예약 번호 신호기(0) 결과를 반환합니다.
int 신호(세마포어)
세마포어 s를 증가시킵니다. s가 양수가 아니고 일부 스레드가 s에서 차단된 경우,
가장 최근에 차단된 스레드를 해제합니다. 성공하면 1을 반환합니다.
int wait(세마포어)
세마포어 s를 감소시킵니다. s가 음수이면 해제될 때까지 차단합니다. 1을 반환합니다.
성공.
int 테스트(세마포어)
세마포어의 wait()가 현재 스레드를 차단하는지 테스트합니다. 그렇다면,
0을 반환합니다. 그렇지 않으면 s 감소를 시도하고 성공하면 1을 반환합니다.
String String 네임스페이스에는 ADT 문자열에 대한 몇 가지 기본 작업이 포함되어 있습니다.
int 함수 길이(문자열 s)
s의 문자 수를 반환합니다.
문자열 함수 new(int c)
단일 문자 c를 문자열로 반환합니다.
문자열 함수 new(int cv[*])
cv의 문자로 구성된 문자열을 반환합니다.
int 함수 인덱스(문자열 t, 문자열 p)
대상 문자열 t에 있는 패턴 문자열 p의 정수 인덱스를 반환합니다.
p는 t의 하위 문자열이 아닙니다.
문자열 함수 substr(string s, int i, int l)
오프셋 i에 있는 문자로 시작하는 문자열 s의 하위 문자열을 반환합니다(제로-
기반) 총 l자 동안 계속됩니다. l이 음수이면 하위 문자열은
뒤가 아닌 앞의 문자로 구성됩니다. i.
PRNG PRNG 네임스페이스는 의사 난수 생성 및 조작을 제공합니다. 그만큼
코어 생성기는 적절하게 부트스트랩된 RC4 스트림 암호 생성기입니다. 이것
합리적인 수준에서 암호학적으로 안전한 의사 무작위 비트 스트림을 제공합니다.
상각 비용. (단, 초기화 비용이 다소 비쌉니다.)
무효 함수 srandom(int s)
(임의로 큰) 정수를 시드로 사용하여 생성기를 초기화합니다.
무효 함수 dev_srandom(int nbits)
합리적인 방법으로 얻은 nbits 엔트로피 비트를 사용하여 생성기를 초기화합니다.
엔트로피 소스. UNIX 시스템에서 이 소스는 /dev/urandom입니다. 더 많은 것을 요구하기
시스템보다 초기 엔트로피가 부트스트래핑(UNIX에서와 같이)으로 이어질 수 있습니다.
또는 매달아 놓을 수 있으므로 주의해서 사용하세요.
int 함수 randbits(int n)
n-를 반환합니다.비트 범위 내 의사 난수 0..(2**n)-1. 사물에 유용함
RSA처럼.
int 함수 randint(int n)
범위 내 의사 난수를 반환합니다. 0..n-1.
무효 함수 shuffle(*(poly[*]) a)
배열 a의 효율적인 내부 실제 셔플(Knuth 참조)을 수행합니다.
Command
Command 네임스페이스는 아래 설명된 대로 최상위 명령에서 사용됩니다. 그것은
때로는 그 자체로도 유용합니다.
문자열 라이브러리_경로
콜론으로 구분된 디렉터리 목록인 현재 라이브러리 검색 경로를 포함합니다.
라이브러리 파일을 검색해 보세요.
int 함수 undefine(문자열 이름)
최상위 수준 정의 취소 명령을 구현합니다. 문자열 name으로 표시된 이름을 제거합니다.
네임스페이스에서. 이렇게 하면 이름의 표시되는 모든 정의가 제거됩니다.
int 함수 undefine(문자열[*] 이름)
네임스페이스에서 배열 이름의 각 이름을 제거합니다. 이렇게 하면 모두 제거됩니다.
각 이름의 가시적 정의.
int 함수 delete(문자열 이름)
최상위 명령에서 주어진 문자열 이름을 가진 명령을 제거하려고 시도합니다.
나열하고 성공하면 1을 반환합니다.
int 함수 lex_file(문자열 경로)
주어진 경로에 있는 파일을 Nickle 코드의 현재 소스로 만들려고 시도합니다.
성공하면 1을 반환합니다. 이는 파일을 효과적으로 "포함"한다는 점에 유의하십시오.
처리할 파일 스택에 밀어 넣습니다.
int 함수 lex_library(문자열 파일명)
lex_file()과 유사하지만, lex_file()에 의해 제공된 디렉토리를 검색합니다. 라이브러리 경로 변수
주어진 파일 이름을 가진 첫 번째 파일에 대해.
int 함수 lex_string(문자열 코드)
문자열 코드에 포함된 Nickle 코드를 다음 입력으로 만들어 보세요.
int 함수 편집(문자열[*] 이름)
최상위 편집 명령을 구현합니다. 배열의 이름은 다음의 경로입니다.
마지막 기호 이름으로 이어지는 네임스페이스 이름입니다.
int 함수 new(문자열 이름, 폴리 함수)
함수 func를 최상위 명령 문자열 이름에 바인딩합니다. 즉, 이를 다음의 일부로 만듭니다.
최상위 명령 어휘.
int 함수 new_names(문자열 이름, 폴리 함수)
함수 func를 최상위 명령 문자열 이름에 바인딩합니다. 즉, 이를 다음의 일부로 만듭니다.
최상위 명령 어휘. new()와 달리 func에 주어진 문자열 이름은
최상위 수준은 문자열 이름 배열 또는 단일 값으로 평가되지 않은 채 전달됩니다.
문자열 이름.
int 함수 Pretty_print(파일 f, 문자열[*] 이름)
최상위 인쇄 명령을 구현합니다. 전달된 각 이름 문자열을 살펴봅니다.
up 및 해당 코드가 파일 f에 인쇄됩니다.
int 함수 표시(문자열 fmt, 폴리 발)
printf()를 사용하여 val 값을 fmt 형식으로 표시합니다.
연혁
Nickle은 명령줄의 보조 도구로 유용한 최상위 값 기록을 유지합니다.
계산할 때 편집합니다. History 네임스페이스에는 이에 액세스하는 함수가 포함되어 있습니다.
역사.
int 함수 표시(문자열 fmt)
인수 없이 기록 최상위 명령을 구현합니다. 가장 최근 항목 표시
fmt 형식의 기록 값입니다.
int 함수 표시(문자열 fmt, int 개수)
하나의 인수로 기록 최상위 명령을 구현합니다. 마지막 카운트 표시
fmt 형식의 기록 값입니다.
int 함수 표시(문자열 fmt, int 먼저, int 마지막)
두 개의 인수를 사용하여 기록 최상위 명령을 구현합니다.
폴리 함수 삽입(폴리 발)
기록 목록에 val을 삽입하고 반환합니다.
약
많은 운영 체제에는 '환경 변수'라는 개념이 있습니다.
네임스페이스에는 이를 조작하는 함수가 포함되어 있습니다.
int 함수 검사(문자열 이름)
주어진 이름을 가진 변수가 환경에 있으면 1을 반환하고 0을 반환합니다.
그렇지 않으면.
문자열 함수 get(문자열 이름)
다음을 사용하여 환경 변수의 값을 검색하고 반환하려고 시도합니다.
주어진 이름. 변수를 사용할 수 없는 경우 valid_argument 예외가 발생합니다.
int 함수 unset(문자열 이름)
주어진 이름을 가진 환경 변수의 설정을 해제하려고 시도하고
성공의 표시.
문자열 함수 집합(문자열 이름, 문자열 값)
주어진 이름을 가진 환경 변수를 주어진 값으로 설정하려고 시도합니다.
성공했다는 표시를 반환합니다.
명령
Nickle에는 최상위 수준에서 제공할 수 있는 명령 세트가 있습니다.
종료 Nickle 종료.
quit E 정수 상태 코드 E로 Nickle을 종료합니다.
이름 {,NAME} 정의 해제
시스템에서 이러한 이름을 제거하십시오.
load E 문자열 이름 E로 지정된 파일을 로드합니다.
도서관E
문자열 이름 E로 제공된 라이브러리를 로드합니다. NICKLEPATH에 대한 토론을 참조하세요.
아래 ENVIRONMENT의 환경 변수와 이에 대한 논의
위의 명령::library_path.
E#E 기본 expr1에 expr2을 인쇄합니다.
이름을 새기다
NAME으로 표시된 개체의 형식화된 버전을 표시합니다. 댓글 및 원본
포맷이 손실됩니다. NAME이 변수인 경우 값과 유형을 인쇄합니다.
이름 수정
명명된 개체에 대해 $EDITOR를 호출하고 편집 결과를 다시 통합합니다.
이는 함수에 가장 유용합니다.
연혁
가장 최근에 인쇄된 값 10개를 표시합니다. 다음을 사용하여 액세스할 수 있습니다. $n 어디에 n
이 목록의 값 오른쪽에 표시되는 숫자입니다.
연혁 E
E의 최근 이력 값을 표시합니다.
연혁 E,E
첫 번째 정수 E부터 두 번째 정수까지의 기록 값을 표시합니다.
디버거
실행 중에 처리되지 않은 예외가 최상위 수준에 도달하면 사용자는 대시를 받습니다.
디버그 모드가 활성화되었음을 나타내는 프롬프트입니다. 이 모드에서는 명령줄 환경이
처리되지 않은 예외가 발생한 경우입니다. 그 외에도 여러 가지 디버깅
사용자는 다음 명령을 사용할 수 있습니다.
Trace GDB where 명령과 마찬가지로 현재 상태를 보여주는 스택 역추적을 가져옵니다.
up GDB처럼 스택을 위로 이동합니다(즉, 최상위 표현식 쪽으로).
down GDB처럼 스택을 아래로 이동합니다(즉, 현재 컨텍스트를 향해).
done 디버깅 모드를 종료하고 실행을 중단합니다.
또한 Debug 네임스페이스는 디버깅 모드에서 범위가 지정됩니다. 이는 주로
Nickle 자체를 디버깅하는 데 사용됩니다.
수집()
가비지 수집기를 실행합니다.
덤프(함수)
함수에 대해 컴파일된 바이트 코드를 인쇄합니다.
환경
EDITOR 위의 COMMANDS에 설명된 편집 명령에 사용되는 편집기입니다.
니클러크
시작 부분에 로드될 사용자의 .nicklerc 파일 위치
가능하다면 니켈 실행.
HOME NICKLERC가 설정되지 않은 경우 사용자의 .nicklerc를 찾는 데 사용됩니다.
니클패스
요소가 Nickle 코드를 포함하는 디렉터리인 콜론으로 구분된 경로입니다. 그만큼
위에서 설명한 library 명령과 -l 플래그는 이 경로에서 파일 이름을 검색합니다.
주어진 파일과 일치합니다. 이 변수가 없는 경우의 기본 라이브러리 경로
/usr/share/nickle입니다.
니클스타트
Nickle 시작 시 부트스트랩으로 로드되어야 하는 파일의 파일 이름입니다.
이 변수가 없는 경우 기본값은 로드하는 것입니다.
/usr/share/nickle/buildin.5c.
사용 예
예(다음에서 가져옴) bc 설명서:
실수 함수 지수(실수 x) {
실수 a = 1;
정수 b = 1;
실수 s = 1;
정수 i = 1;
동안 (1) {
a = a * x;
b = b * 나는;
실제 c = a / b;
if (abs(c) < 1e-6)
반환 s;
s = s + c;
난 + +;
}
}
지수 함수 e ** x의 근사값을 계산하는 함수를 정의합니다.
for (i = 1; i < 10; i++)
printf("%g\n", 지수(i));
처음 XNUMX개 정수의 지수 함수의 대략적인 값을 인쇄합니다.
버전
이 문서에서는 nickle 버전 1.99.2와 몇 가지 새로운 기능에 대해 설명합니다. 그것은
nickle 버전 2.77과 함께 배포됩니다.
onworks.net 서비스를 사용하여 온라인으로 니켈을 사용하세요