start new:
tmux
start new with session name:
tmux new -s myname
| ; Quick miniKanren-like code | |
| ; | |
| ; written at the meeting of a Functional Programming Group | |
| ; (Toukyou/Shibuya, Apr 29, 2006), as a quick illustration of logic | |
| ; programming. The code is really quite trivial and unsophisticated: | |
| ; it was written without any preparation whatsoever. The present file | |
| ; adds comments and makes minor adjustments. | |
| ; | |
| ; $Id: sokuza-kanren.scm,v 1.1 2006/05/10 23:12:41 oleg Exp oleg $ |
| // Lack of tail call optimization in JS | |
| var sum = function(x, y) { | |
| return y > 0 ? sum(x + 1, y - 1) : | |
| y < 0 ? sum(x - 1, y + 1) : | |
| x | |
| } | |
| sum(20, 100000) // => RangeError: Maximum call stack size exceeded | |
| // Using workaround |
| function lens(get, set) { | |
| var f = function (a) { return get(a); }; | |
| f.set = set; | |
| f.mod = function (f, a) { return set(a, f(get(a))); }; | |
| return f; | |
| } | |
| var first = lens( | |
| function (a) { return a[0]; }, | |
| function (a, b) { return [b].concat(a.slice(1)); } |
| # From a fresh install of squeeze | |
| apt-get install ruby rubygems # Need ruby to use fpm | |
| gem1.8 install fpm --no-ri --no-rdoc | |
| apt-get install build-essential openssl libreadline6 libreadline6-dev zlib1g zlib1g-dev libssl-dev ncurses-dev libyaml-dev | |
| wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p125.tar.gz | |
| tar -zxvf ruby-1.9.3-p125.tar.gz | |
| cd ruby-1.9.3-p125 | |
| rm -rf /tmp/ruby193 |
| macro sexp { | |
| case () => { | |
| ; | |
| } | |
| case ($p) => { | |
| $p | |
| } | |
| case ($x $y) => { | |
| $x($y); | |
| } |
This article has been given a more permanent home on my blog. Also, since it was first written, the development of the Promises/A+ specification has made the original emphasis on Promises/A seem somewhat outdated.
Promises are a software abstraction that makes working with asynchronous operations much more pleasant. In the most basic definition, your code will move from continuation-passing style:
getTweetsFor("domenic", function (err, results) {
// the rest of your code goes here.| /* | |
| * Example of a state monad in use. This is adapted from an example on | |
| * the Haskell Wiki: | |
| * http://www.haskell.org/haskellwiki/State_Monad#Complete_and_Concrete_Example_1 | |
| */ | |
| require(['state', 'qunit'], function(state, qunit) { | |
| /* | |
| * playGame() is a recursive function that given an array of moves | |
| * defines an algorithm for constructing a final game score. Along |
inspired to understand this from:
compare with https://github.com/Gozala/js-tail-call/blob/master/core.js for speed (after refactoring to work like his does)
| function shift(arr, i) { | |
| var cut = arr.length - i; | |
| return arr.slice(cut).concat(arr.slice(0, cut)); | |
| } | |
| var arr = [1,2,3,4,5]; | |
| shift(arr, 1); //[5, 1, 2, 3, 4] | |
| shift(arr, 3); //[3, 4, 5, 1, 2] |