1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
---
language: bc
contributors:
- ["Btup"]
filename: learnbc.bc
---
```c
/*This is a multi-
line comment.*/
# This is also a (one-line) comment! (in GNU bc).
/*1. Variables and control structures*/
num = 45 /*All variables save only doubles, and you cannot save
string constants directly.*/
num = 45; /*You can choose to add a semicolon after
every statement. This is optional.*/
/*Blocks are denoted using the {} operators(similar to C):*/
while(num < 50) {
num += 1 /*equivalent to num=num+1.
a = a op b is equivalent to a op= b.*/
}
/*And there are ++(increment) and --(decrement) operators.*/
/*There are 3 special variables:
scale: defines the scale of the double numbers.
ibase: defines the base of input.
obase: defines the base of output.*/
/*If clauses:*/
hour = read() /*Input a number*/
if(hour < 12) { /*Operators are exactly like C.*/
print "Good morning\n" /*"print" outputs strings or variables
separated by commas.*/
} else if(hour == 12) {
print "Hello\n"
/*Escaping sequences start with a \ in a string.
In order to make the escaping sequences clearer, here
is a simplified list of them that will work in bc:
\b: backspace
\c: carriage return
\n: newline
\t: tab
\\: backslash*/
} else {
print "Good afternoon\n"
}
/*Like C, only 0 is falsy.*/
num = 0
if(!num) {print "false\n"}
/*Unlike C, bc does not have the ?: operators. For example,
this block of code will cause an error:
a = (num) ? 1 : 0
However, you can simulate one:*/
a = (num) && (1) || (0) /*&& is and, || is or*/
/*For loops*/
num = 0
for(i = 1; i <= 100; i++) {/*Similar to the C for loop.*/
num += i
}
/*2.Functions and Arrays*/
define fac(n) { /*define a function using define.*/
if(n == 1 || n == 0) {
return 1 /*return a value*/
}
return n * fac(n - 1) /*recursion is possible*/
}
/*Closures and anonymous functions are impossible.*/
num = fac(4) /*24*/
/*This is an example of local variables:*/
define x(n) {
auto x
x = 1
return n + x
}
x(3) /*4*/
print x /*It turns out that x is not accessible out of the function.*/
/*Arrays are equivalent to the C array.*/
for(i = 0; i <= 3; i++) {
a[i] = 1
}
/*Access it like this:*/
print a[0], " ", a[1], " ", a[2], " ", a[3], "\n"
quit /*Add this line of code to make sure
that your program exits. This line of code is optional.*/
```
Enjoy this simple calculator! (Or this programming language, to be exact.)
This whole program is written in GNU bc. To run it, use ```bc learnbc.bc```.
|