Probabilistic Models of Cognition
probmods.org
probmods.org
Some of my favourite videos:
- Neural Representations of Language Meaning - Tom Mitchell https://www.youtube.com/watch?v=pRBf8BWAG3k
- Computational cognitive science - Josh Tenenbaum (co-author of probmods) https://www.youtube.com/watch?v=2WQO9e5Mdj4
Third times the charm :)
Either way, :(.
But give webppl a shot -- it's a good language!
1. Pedagogically, the lispy syntax was a big stumbling block for beginners. Probabilistic programming is hard enough as it is; prefix notation and parens only added difficulties (and these difficulties were unrelated to the conceptual material).
2. webchurch compiled to Javascript anyway, so it was nice to be closer to the target language.
3. Lisp can be a bit awkward for certain contemporary programming idioms (e.g., accessing object properties).
$ cat animal.tl
(defstruct animal nil
(:static legs nil)
(:method speak (self something)
(pprinl something)))
(defstruct dog animal
(:static legs 4)
(:method speak (self something)
(call-super-method self 'speak something)
(pprinl "Woof!")))
$ txr -i animal.tl
1> (defvar d1 (new dog))
d1
2> (defvar d2 (new dog))
d2
3> d1.legs
4
4> (set d2.legs 5) ;; legs is static: i.e. class-wide
5
5> d1.legs ;; all dogs have 5 legs now
5
6> d1.(speak "hey!")
hey!
Woof!
"Woof!"
7>
Next: 7> 'a.b.c.d
a.b.c.d
8> (car 'a.b.c.d)
qref
9> (cdr 'a.b.c.d)
(a b c d)
10> '(qref a b c d) ;; qref ::= "qualified reference"
a.b.c.d
11> '(qref a b (c x y) d)
a.b.(c x y).d
12> '(qref (qref a b) c)
(qref a.b c)
qref is syntax, targetted by a macro definition: 13> (macroexpand '(qref a b c))
(slot (slot a 'b)
'c)
We can hijack it in data for our own use: 14> '(www.google.com "blah")
(www.google.com "blah")
15> (caar '(www.google.com "blah"))
qref
16> (cdar '(www.google.com "blah"))
(www google com)
The TXR Lisp scripting language removes most of the Lisp micro-stumbling-blocks in everyday coding, providing the above notation, plus array access with ranges, and nice "string quasiliteral" notation for interpolated strings. 17> [mapcar succ "abcd"]
"bcde"
18> ["abcdefg" 0]
#\a
19> ["abcdefg" 0..3]
"abc"
20> ["abcdefg" -2..:]
"fg"
21> (car 'a..b)
rcons
22> (cdr 'a..b)
(a b)
23> '(rcons a b)
a..b
24> (rcons 1 2)
#R(1 2)
25> ["abcd" #R(1 3)]
"bc"
26> ["abcde" '(0 2 4 6)]
"ace""Niche" is probably in the eyes of the beholder if the audience is deliberately diving into probabilistic programming languages and probabilistic cognitive models.
[1] http://library.meritology.com/fundamentals/chapters/1a-In_a_...
If you know scheme or lisp it should be no different than learning to use a few new functions.
If you are not familiar with functional programming you might find it difficult to learn.
I know I found it difficult.