sync from Atlas
This commit is contained in:
parent
c93076ac2b
commit
ade9577a55
@ -122,7 +122,7 @@ def standard_env() -> Environment:
|
||||
# tag::REPL[]
|
||||
def repl(prompt: str = 'lis.py> ') -> NoReturn:
|
||||
"A prompt-read-eval-print loop."
|
||||
global_env = standard_env()
|
||||
global_env = Environment({}, standard_env())
|
||||
while True:
|
||||
ast = parse(input(prompt))
|
||||
val = evaluate(ast, global_env)
|
||||
@ -200,7 +200,7 @@ class Procedure:
|
||||
################ command-line interface
|
||||
|
||||
def run(source: str) -> Any:
|
||||
global_env = standard_env()
|
||||
global_env = Environment({}, standard_env())
|
||||
tokens = tokenize(source)
|
||||
while tokens:
|
||||
exp = read_from_tokens(tokens)
|
||||
|
@ -117,7 +117,7 @@ def standard_env() -> Environment:
|
||||
|
||||
def repl(prompt: str = 'lis.py> ') -> NoReturn:
|
||||
"A prompt-read-eval-print loop."
|
||||
global_env = standard_env()
|
||||
global_env = Environment({}, standard_env())
|
||||
while True:
|
||||
ast = parse(input(prompt))
|
||||
val = evaluate(ast, global_env)
|
||||
@ -190,7 +190,7 @@ class Procedure:
|
||||
################ command-line interface
|
||||
|
||||
def run(source: str) -> Any:
|
||||
global_env = standard_env()
|
||||
global_env = Environment({}, standard_env())
|
||||
tokens = tokenize(source)
|
||||
while tokens:
|
||||
exp = read_from_tokens(tokens)
|
||||
|
@ -48,7 +48,6 @@ Doctests for `evaluate`
|
||||
# end::EVAL_NUMBER[]
|
||||
|
||||
# tag::EVAL_SYMBOL[]
|
||||
>>> from lis import standard_env
|
||||
>>> evaluate(parse('+'), standard_env())
|
||||
<built-in function add>
|
||||
>>> evaluate(parse('ni!'), standard_env())
|
||||
|
@ -121,7 +121,7 @@ def standard_env() -> Environment:
|
||||
# tag::REPL[]
|
||||
def repl(prompt: str = 'lis.py> ') -> NoReturn:
|
||||
"A prompt-read-eval-print loop."
|
||||
global_env = standard_env()
|
||||
global_env = Environment({}, standard_env())
|
||||
while True:
|
||||
ast = parse(input(prompt))
|
||||
val = evaluate(ast, global_env)
|
||||
@ -140,10 +140,7 @@ def lispstr(exp: object) -> str:
|
||||
################ Evaluator
|
||||
|
||||
# tag::EVALUATE[]
|
||||
KEYWORDS = {'quote', 'if', 'lambda', 'define', 'set!'}
|
||||
|
||||
def is_keyword(s: Any) -> bool:
|
||||
return isinstance(s, Symbol) and s in KEYWORDS
|
||||
KEYWORDS = ['quote', 'if', 'lambda', 'define', 'set!']
|
||||
|
||||
def evaluate(exp: Expression, env: Environment) -> Any:
|
||||
"Evaluate an expression in an environment."
|
||||
@ -161,17 +158,13 @@ def evaluate(exp: Expression, env: Environment) -> Any:
|
||||
return evaluate(alternative, env)
|
||||
case ['lambda', [*parms], *body] if body:
|
||||
return Procedure(parms, body, env)
|
||||
case ['define', Symbol(var), value_exp]:
|
||||
env[var] = evaluate(value_exp, env)
|
||||
case ['define', Symbol(name), value_exp]:
|
||||
env[name] = evaluate(value_exp, env)
|
||||
case ['define', [Symbol(name), *parms], *body] if body:
|
||||
env[name] = Procedure(parms, body, env)
|
||||
case ['set!', Symbol(var), value_exp]:
|
||||
env.change(var, evaluate(value_exp, env))
|
||||
<<<<<<< HEAD
|
||||
case ['set!', Symbol(name), value_exp]:
|
||||
env.change(name, evaluate(value_exp, env))
|
||||
case [func_exp, *args] if func_exp not in KEYWORDS:
|
||||
=======
|
||||
case [func_exp, *args] if not is_keyword(func_exp):
|
||||
>>>>>>> 3ecfb212c6273122797c76876d6b373b2cb94fa6
|
||||
proc = evaluate(func_exp, env)
|
||||
values = [evaluate(arg, env) for arg in args]
|
||||
return proc(*values)
|
||||
@ -202,7 +195,7 @@ class Procedure:
|
||||
################ command-line interface
|
||||
|
||||
def run(source: str) -> Any:
|
||||
global_env = standard_env()
|
||||
global_env = Environment({}, standard_env())
|
||||
tokens = tokenize(source)
|
||||
while tokens:
|
||||
exp = read_from_tokens(tokens)
|
||||
|
@ -117,7 +117,7 @@ def standard_env() -> Environment:
|
||||
|
||||
def repl(prompt: str = 'lis.py> ') -> NoReturn:
|
||||
"A prompt-read-eval-print loop."
|
||||
global_env = standard_env()
|
||||
global_env = Environment({}, standard_env())
|
||||
while True:
|
||||
ast = parse(input(prompt))
|
||||
val = evaluate(ast, global_env)
|
||||
@ -193,7 +193,7 @@ class Procedure:
|
||||
################ command-line interface
|
||||
|
||||
def run(source: str) -> Any:
|
||||
global_env = standard_env()
|
||||
global_env = Environment({}, standard_env())
|
||||
tokens = tokenize(source)
|
||||
while tokens:
|
||||
exp = read_from_tokens(tokens)
|
||||
|
@ -7,6 +7,7 @@
|
||||
import asyncio
|
||||
import itertools
|
||||
import math
|
||||
import functools
|
||||
|
||||
# tag::PRIME_NAP[]
|
||||
async def is_prime(n):
|
||||
@ -21,8 +22,8 @@ async def is_prime(n):
|
||||
for i in range(3, root + 1, 2):
|
||||
if n % i == 0:
|
||||
return False
|
||||
if i % 100_000 == 1: # <2>
|
||||
await asyncio.sleep(0)
|
||||
if i % 100_000 == 1:
|
||||
await asyncio.sleep(0) # <1>
|
||||
return True
|
||||
# end::PRIME_NAP[]
|
||||
|
||||
@ -39,13 +40,13 @@ async def spin(msg: str) -> None:
|
||||
print(f'\r{blanks}\r', end='')
|
||||
|
||||
async def check(n: int) -> int:
|
||||
return await is_prime(n) # <4>
|
||||
return await is_prime(n)
|
||||
|
||||
async def supervisor(n: int) -> int:
|
||||
spinner = asyncio.create_task(spin('thinking!')) # <1>
|
||||
print('spinner object:', spinner) # <2>
|
||||
result = await check(n) # <3>
|
||||
spinner.cancel() # <5>
|
||||
spinner = asyncio.create_task(spin('thinking!'))
|
||||
print('spinner object:', spinner)
|
||||
result = await check(n)
|
||||
spinner.cancel()
|
||||
return result
|
||||
|
||||
def main() -> None:
|
||||
|
Loading…
x
Reference in New Issue
Block a user