I read these pages on making a new language using tools available in Racket with great interest. It creates new language that can take numbers and operators in reverse polish notation and find the answer.
However, same task can be achieved by simple programming also. Following is code in Python but same can be in any general purpose language:
# Items for calculation:
slist=["4", "8", "+", "5", "*", "10", "/", "4", "-", "6", "5", "/", "*"]
# Main code:
mainstack = []
for item in slist:
print("mainstack: ", mainstack)
print("item: ", item)
if item in ['+','-','*','/']:
n2 = mainstack.pop()
n1 = mainstack.pop()
if item == '+': mainstack.append(n1 + n2)
elif item == '-': mainstack.append(n1 - n2)
elif item == '*': mainstack.append(n1 * n2)
elif item == '/': mainstack.append(n1 / n2)
else:
try:
mainstack.append(float(item))
except:
print("Invalid entry: ", item)
quit()
print("Final answer: ", mainstack)
Output:
mainstack: []
item: 4
mainstack: [4.0]
item: 8
mainstack: [4.0, 8.0]
item: +
mainstack: [12.0]
item: 5
mainstack: [12.0, 5.0]
item: *
mainstack: [60.0]
item: 10
mainstack: [60.0, 10.0]
item: /
mainstack: [6.0]
item: 4
mainstack: [6.0, 4.0]
item: -
mainstack: [2.0]
item: 6
mainstack: [2.0, 6.0]
item: 5
mainstack: [2.0, 6.0, 5.0]
item: /
mainstack: [2.0, 1.2]
item: *
Final answer: [2.4]
What are particular roles of special functions in Racket to make new languages? Why not simply use usual programming to convert specified domain-specific input into required outputs?