ostso's comments

ostso | 13 years ago | on: Actually, you don't understand lexical scope

Perhaps mistercow means things like

  def foo():
    x = 5
    def bar():
      print x
    def baz():
      x = 6
      print x
    bar()
    baz()
    print x
Which prints 5, 6, 5. If baz tried to print x before assigning, it would be an UnboundLocalError.

ostso | 13 years ago | on: Practical functional programming in JavaScript

Not really -- "any" and "filter" are total functions, but "first" of an empty list is undefined.

On the other hand, that also applies to foldl1 and {max,min}imum{,By}, so it's probably not the reason.

The reason is probably that in JavaScript you can just say a[0] to get the first element element of a.

ostso | 14 years ago | on: The Y combinator in Javascript

That's a fixed-point combinator, but it's not actually the Y combinator; in fact, it defeats much of the purpose of Y, since it's defined using explicit recursion, which Y is designed to avoid.

If you just want a clear definition of a fixed-point combinator, you might as well use a non-strict language like Haskell, which doesn't require you to eta-expand g. Here's one recursive definition of fix in Haskell:

    fix f = f (fix f)
This is probably the clearest definition you could ask for of what a fixed-point combinator actually is (other than something like "fix f = f (f (f (f (f ...", which is more difficult to give to a computer).

Here's another one, which closer to what you gave in JavaScript (this is what you'll actually find in the Haskell standard libraries):

    fix f = let x = f x in x
(Of course, due to type-checking, it's non-trivial to define the actual non-recursive Y in Haskell; you usually have to resort to using some type-level recursion. But in an untyped non-strict language you could define it easily enough.)

ostso | 15 years ago | on: Scala One Liners

"bar none" is a little excessive -- Haskell's syntax is probably even cleaner. Compare:

  1. map (*2) [1..10]

  2. sum [1..1000]
     -- sum = foldl (+) 0

  3. any (`isInfixOf` tweet) wordlist

  4. fileText <- readFile "data.txt"
     fileLines <- lines <$> readFile "data.txt"

  5. mapM_ putStrLn . map (\i -> "Happy Birthday " ++ if i == 3 then "dear NAME" else "to You") $ [1..4]

  6. (passed, failed) = partition (>60) [49,58,76,82,88,90]

  7. -- I avoid XML so I don't know what library you'd use here.

  8. minimum [14, 35, -7, 46, 98]
     -- minimum = foldl1 min

ostso | 15 years ago | on: The Basic Laws of Human Stupidity

No, because robbing someone of their incentive to work is a net loss to society, so the bandits would no longer be perfect (unless they in turn gain a corresponding incentive to work, or some other equivalent gain).

There are no perfect bandits, let along a society full of them. Scenarios like "If all members of a society were perfect bandits" are hypothetical and don't really translate to any actual human society that you could imagine. Even so, they're useful for illustrating concepts.

ostso | 15 years ago | on: PG on the cover of Forbes

The difference is that the whole point of the Y combinator is that it's a fixed-point combinator that doesn't use explicit recursion. Imagine that you didn't have "var", and couldn't name anything (which is the situation in, say, the lambda calculus). Using the Y combinator you could still define recursive functions.

ostso | 15 years ago | on: Ask HN: What do geeks in Palo Alto do on weekend nights?

> The court determined that the discount was intended to encourage women to attend the bar in greater numbers, rather than to discourage attendance by males.

Regardless of whether it should be legal or not, "positive discrimination" is still discrimination.

ostso | 15 years ago | on: Terminal Tips and Tricks For Mac OS X

Some methods:

1. Change your layout from "USA" to "USA International (AltGr dead keys)". Then use right-alt+key to make various special characters (you can look at what each character does at "Show Current Layout").

2. Enable the "compose key" -- I use the Menu key for this -- which is described at http://sivers.org/compose-key (it's simple to enable: Keyboard Preferences→Layouts→Options→Compose Key Position). Both of these are customizable, so you can add your own combinations if you want.

There are some other ways:

3. Ctrl-Shift-U in a GTK+ text input to enter a code point, as you said.

4. Alternative input methods that let you type special characters in in various other ways, such as LaTeX names, if you prefer that.

ostso | 16 years ago | on: A Person Paper on Purity in Language - Douglas Hofstadter

> The singular "they", on the other hand, is artificial, at least among people of my generation -- we already have "one", thank you very much.

Huh? Singular "they" has little to do with "one" -- it's used as an alternative to "he"/"she" when the gender is unknown (like the Finnish "hän", for instance).

It may or may not be artificial, but what would you use instead?

page 1