Skip to content

Instantly share code, notes, and snippets.

View sagnibak's full-sized avatar
💭
👌

Sagnik Bhattacharya sagnibak

💭
👌
View GitHub Profile
@sagnibak
sagnibak / .tmux.after.sh
Last active March 2, 2021 22:25
My dotfiles for the CS 162 VM.
export TERM='screen-256color'
@tco
def fac(n, acc=1):
if n == 0:
return Return(acc)
else:
return TailCall((n - 1, n * acc))
def tco(fn):
def inner(*args, **kwargs):
result = fn(*args, **kwargs)
while isinstance(result, TailCall):
result = fn(*result.args, **result.kwargs)
else:
return result.return_val
return inner
@dataclass
class TailCall:
args: Tuple[Any, ...] = field(default_factory=tuple)
kwargs: Dict[str, Any] = field(default_factory=dict)
@dataclass
class Return:
return_val: Any
@dataclass
class TailCall:
args: Tuple[Any, ...] = field(default_factory=tuple)
kwargs: Dict[str, Any] = field(default_factory=dict)
@dataclass
class Return:
return_val: Any
def fac(n, acc=1):
if n == 0 or n == 1:
return acc
else:
return fac(n - 1, n * acc)
def fac(n):
acc = 1
while n > 1:
acc *= n
n -= 1
return acc
@sagnibak
sagnibak / tco.py
Last active April 19, 2021 05:44
Implementation of a tail-call optimizing function decorator and accompanying types in Python.
from dataclasses import dataclass, field
from typing import Any, Callable, Dict, Generic, Optional, Tuple, TypeVar, Union
ReturnType = TypeVar("ReturnType")
@dataclass
class TailCall:
args: Tuple[Any, ...] = field(default_factory=tuple)
default partial alphanumeric_keys modifier_keys
xkb_symbols "basic" {
name[Group1]= "English (US)";
key <TLDE> { [ grave, asciitilde ] };
key <AE01> { [ 1, exclam ] };
key <AE02> { [ 2, at ] };
key <AE03> { [ 3, numbersign ] };
key <AE04> { [ 4, dollar ] };
@sagnibak
sagnibak / tail_call_elimination.py
Last active November 10, 2018 04:31
An example of tail-call elimination in Python using trampolining and thunkification. This shows how to implement tail-call optimization in a language that does not support it by default. Note that we don't really need the Thunk class in this example, but having an explicit Thunk class demonstrates the concept of thunkification.
class Thunk:
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
def trampoline(func):
def jumper(*args, **kwargs):
result = func(*args, **kwargs)
while isinstance(result, Thunk):
result = func(*result.args, **result.kwargs)