PicoLisp for Python and Chicken Scheme programmers


Introduction

PicoLisp is a powerful virtual machine and programming language which can be sufficiently called 'learn one for all' language. It is an extremely speedy Lisp interpreter with a small memory footprint having a simple structure with just three datatypes (Numbers, Symbols, Lists) yet complete in design as well as in execution. Thus it is simple to learn, simple to use and simple to maintain.

Because of its transparent architecture, a programmer needs to only understand it thoroughly as the language itself is very efficient and extensible. Truly it has the potential to make students clear all major, intricate Computer Science concepts, thus giving a major impetus for learning while practically doing programming. Alexander Burger (the brain and heart behind PicoLisp) well mentions that "it is not just a toy of theoretical value".

Hello, world!

PICOLISP
(prinl "Hello, world!")


Chicken
(print "Hello, world!")


Python
print "Hello, world!"

Definitions, assignment and bindings

PICOLISP
Variables are symbols.
(let A 0 A) 


Chicken
Defining a variable:
(define a 0)
Assigning a variable a value:
(set! a 0)


PS: CHICKEN automatically defines a global variable when a variable is set without being defined. However, it is best practice (and most compatible with other Schemes) to define all variables.

Binding a value to a variable: (let ((a 0)) a)

Python
Python has only one operator for both assignments and definitions of variables (=).
a = 0

Strings

Concatenation

PICOLISP
(pack "1" "2")


Chicken
(string-append "1" "2")

(conc "1" "2")

(string-intersperse '("1" "2") "")


Python
a = "1" + "2"

a = "".join(["1", "2"])

Splitting a string

PICOLISP
(mapcar pack (split (chop "this is a string") " "))


Chicken
(string-split "this is a string")


Python
"this is a string".split()

File I/O

Reading the contents of a file and returning a string

PICOLISP
(in "my-file.txt" (till NIL T))


Chicken
(read-all "my-file.txt")


read-all is defined in Unit utils.

Python
open("my-file.txt").read() # Deprecated

with open("my-file.txt") as f:
    f.read() 

Reading the contents of a file and returning a list of lines

PICOLISP
(in "my-file.txt" (make (until (eof) (link (line T)))))


Chicken
(read-lines "my-file.txt")


read-lines is defined in Unit utils.

Python
open("my-file.txt").readlines()

with open("my-file.txt") as f:
    f.readlines()

Conditionals

Single condition

PICOLISP
(if (< 1 2) "yes" "no")


Chicken
(if (< 1 2) "yes" "no")


PS: in Scheme, the result of the evaluation of an if form is passed to its continuation.

Python
"yes" if 1<2 else "no"

Multiple conditions

PICOLISP
(cond ((< 1 2) "1 < 2")
      ((> 1 2) "1 > 2")
      (T "1 = 2"))


Chicken
(cond ((< 1 2) "1 < 2")
      ((> 1 2) "1 > 2")
      (else "1 = 2"))


PS: in Scheme, the result of the evaluation of a cond form is passed to its continuation.

Python
result = None
if 1 < 2:
    result = "1 < 2"
elif 1 > 2:
    result = "1 > 2"
else:
    result = "1 = 2"

Iteration

Iterating through and printing the elements of a list

PICOLISP
(for L (1 2 3 4) (printsp L))


Chicken
(define l '(1 2 3 4))
(for-each print l)


Python
l = [1, 2, 3, 4]
for i in l:
    print i

Applying a procedure/function to each item of a list

PICOLISP
(setq L (1 2 3 4))

(de add10 (N) (+ N 10))

(mapcar add10 L)


Chicken
(define l '(1 2 3 4))

(define (add10 N) (+ N 10))

(map add10 l)


Python
l = [1, 2, 3, 4]

def add10(n):
    return n + 10

[ add10(i) for i in l ]


I am extremely thankful to the PicoLisp creator, Alexander Burger for suggesting improvements in this document.

Examples taken from https://wiki.call-cc.org/chicken-for-python-programmers.

Author: Nehal Singhal



https://picolisp.com/wiki/?picolispforpythonandchickenschemeprogrammers

21oct17    Nehal-Singhal