Sunday, May 31, 2009

LOOP

At the moment I try to practice my skills in PL/SQL. Like these old Chinese monks I believe that you can only be a master, if you really practice steadily. And while learning I discovered that the LOOP statement in PL/SQL is something really cool, because it would substitute the always famous
while(true):
  if expr:
    break
  do_smth
for implementing the sentinel. For the sake of this blog I implemented this thing :)
class List:
    def __init__(self, node, next): self.node, self.next = node, next

class Block:
    def __init__(self, xs): self.xs = xs

    def body(self):
        print("%d" % self.xs.node)
        self.xs = self.xs.next

    def cond(self):
        return False if self.xs == None else True

class Loop:
    def __init__(self, block):
        if block.cond():
            block.body()
            Loop(block)

Loop(Block(List(23, List(42, List(5, None)))))

Saturday, May 30, 2009

C♯ or Implement That Stack

A friend of mine reminded me of the importance to implement the stack ADT for the sake of learning a new programming language. CS really feels strange to me, so I implemented the stack. To test the program, I implemented a small postfix-notation parser -- like 1 1 + 2 * = 4, too.
using System;
using System.Collections;

public class Stack 
{
  ArrayList xs;
  
  public Stack()
  {
    xs = null;
  }
  
  bool empty()
  {
    return (xs == null);
  }

  void push(int x)
  {
    if (empty() == true) {
      xs = new ArrayList();
    }
    xs.Add(x);
    Console.WriteLine("PUSH " + x);
  }
  
  int pop()
  {
    Console.WriteLine("POP " + (int) xs[xs.Count - 1]);
    return (int) xs[xs.Count - 1];
  }

  private static int ctoi(char c)
  {
    return int.Parse(c.ToString());
  }

  private static bool number(char c)
  {
    try {
      ctoi(c);
      return true;
    } catch (FormatException f) {
      return false;
    }
  }

  public static void Main(string[] args)
  {
    string cs = args[0];
    Stack s = new Stack();

    for (int i = 0; i < cs.Length; i++) {
      switch (cs[i]) {
      case '+':
        s.push(s.pop() + s.pop());
        break;
      case '*':
        s.push(s.pop() * s.pop());
        break;
      case ' ':
        break;
      default:
        s.push(ctoi(cs[i]));
        i++;
        while (number(cs[i])) {
          s.push(10 * s.pop() + ctoi(cs[i]));
          i++;
        }
        break;
      }
    }
    Console.WriteLine(s.pop());
  }
}

Friday, May 8, 2009

la und vancouver

nach dem schoenen hostel mit meerblick in LA, ist es einfach schrecklich schon wieder in so ein tolles abzusteigen. backpackerurlaub, anyone? morgen geht es raus into the wild nach clearwater, bc. canoefahren ... sunset in LA war mal ganz anders im vergleich zu mexiko. die staaten gefallen mir schon sehr. vor allem, weil man da kulinarisch nichts erklaeren braucht. an jeder ecke schoene restaurants mit vegan stuff. natuerlich die sehr netten leute gibt es nur in mexiko. der taxifahrer hat uns ein abschiedsgeschenk uebereicht. aber in LA gibt es eben die ganze filmgeschichte und so viele dinge, die ich kulturell liebe.

Sunday, May 3, 2009

Mexiko -- Noch drei Tage

... sind es bis zum naechsten Meilenstein in LA. Heute war der Tag gepraegt von unmotivierten Nachtfahrten und gelegentlichen Zwischenstopps in der Wueste. Acapulco hatte sich nicht als so traumhaft schoen herausgestellt, besonders in Anbetracht der letzen Erlebnisse am Strand von Zipolite. Bier trinken, benommen von der Feuchtigkeit und Hitze durch das Meer watend, durch den Nebel aus der gespeicherter Waerme blickend.