Hi all,

from time to time, some people (hmm, to be exact, only Henrik so far ;-)
write that the main obstacle for the acceptance of PicoLisp is its lack
of libraries (e.g. [1]).

I must say that I strongly disagree. I never felt this to be a problem,
despite using it for decades of various kinds of programming.

As Henrik also wrote, nobody wants to reinvent the wheel. Very true. The
intention of PicoLisp is to _avoid_ writing extensive libraries, and
rather use existing libs implemented in other languages. For that,
accessing external programs and libs is made especially easy and
transparent in PicoLisp.

For many common tasks, like data format conversions or information
retrieval, it is convenient to call shell commands or tools written in
Perl or other languages with simple pipes:

   (in (list 'some-program "arg") (while (line) ...))

Interfacing to native C functions is also nice (especially in the 64-bit
version, see e.g. "lib/openGl.l").

Do we really want somebody to write tons of code which already exists
(well debugged) in other languages?


In addition, many features do already exist in the PicoLisp base system,
where other languages need special libraries for.

Let's look at Python, being a typical competitor to PicoLisp. I'll just
pick some examples at random from rosettacode.org.

In all of these cases (and I don't know if I found the typical examples
here) -- where Python explicitly imports libraries to solve the task --
the PicoLisp solutions don't need to import any library, and are even
shorter usually:

   http://rosettacode.org/wiki/Find_the_missing_permutation
      from itertools import permutations

   http://rosettacode.org/wiki/Knapsack_problem/Bounded
      from itertools import groupby
      from collections import namedtuple
      from pprint import pprint as pp

   http://rosettacode.org/wiki/Last_Fridays_of_year
      import calendar

   http://rosettacode.org/wiki/Last_letter-first_letter
      from collections import defaultdict

   http://rosettacode.org/wiki/Longest_string_challenge
      import fileinput

   http://rosettacode.org/wiki/Odd_word_problem
      from sys import stdin, stdout

   http://rosettacode.org/wiki/One_of_n_lines_in_a_file
      from random import randrange

   http://rosettacode.org/wiki/Ordered_words
      import urllib.request

   http://rosettacode.org/wiki/Pangram_checker
      import string, sys

   http://rosettacode.org/wiki/Parallel_calculations
      from concurrent import futures
      from math import floor, sqrt

   http://rosettacode.org/wiki/Parse_an_IP_Address
      import string
      from pyparsing import

   http://rosettacode.org/wiki/Partial_function_application
      from functools import partial

   http://rosettacode.org/wiki/Pick_random_element
   http://rosettacode.org/wiki/Random_number_generator_(device)
      import random

   http://rosettacode.org/wiki/Price_fraction
      import bisect

   http://rosettacode.org/wiki/Prime_decomposition
      import sys

   http://rosettacode.org/wiki/Priority_queue
      import queue

   http://rosettacode.org/wiki/Probabilistic_choice
      import random, bisect

   http://rosettacode.org/wiki/Rate_counter
      import subprocess
      import time

   http://rosettacode.org/wiki/Ray-casting_algorithm
      from collections import namedtuple
      from pprint import pprint as pp
      import sys

   http://rosettacode.org/wiki/Read_a_specific_line_from_a_file
      from itertools import islice

   http://rosettacode.org/wiki/Rock-paper-scissors
      from random import choice, randrange
      from bisect import bisect
      from collections import defaultdict

   http://rosettacode.org/wiki/Secure_temporary_file
      import tempfile

   http://rosettacode.org/wiki/Self-referential_sequence
      from itertools import groupby, permutations

   http://rosettacode.org/wiki/Send_email
      import smtplib

   http://rosettacode.org/wiki/Sequence_of_non-squares
      from math import sqrt

   http://rosettacode.org/wiki/Seven-sided_dice_from_five-sided_dice
      from random import randint

   http://rosettacode.org/wiki/Show_the_epoch
   http://rosettacode.org/wiki/Sleep
   http://rosettacode.org/wiki/System_time
      import time

   http://rosettacode.org/wiki/Sockets
      import socket

   http://rosettacode.org/wiki/Soundex
      from itertools import groupby

   http://rosettacode.org/wiki/Stable_marriage_problem
      import copy

   http://rosettacode.org/wiki/Stack
      from collections import deque

   http://rosettacode.org/wiki/Stem-and-leaf_plot
      from collections import namedtuple
      from pprint import pprint as pp
      from math import floor

   http://rosettacode.org/wiki/Subtractive_generator
      import collections

   http://rosettacode.org/wiki/Table_creation/Postal_addresses
      import sqlite3

   http://rosettacode.org/wiki/Take_notes_on_the_command_line
      import sys, datetime, shutil

   http://rosettacode.org/wiki/Terminal_control/Clear_the_screen
   http://rosettacode.org/wiki/Terminal_control/Dimensions
      import os

   http://rosettacode.org/wiki/Text_processing/1
      import fileinput
      import sys

   http://rosettacode.org/wiki/Text_processing/2
      import re
      import zipfile
      import StringIO

   http://rosettacode.org/wiki/Time_a_function
      import sys, timeit

   http://rosettacode.org/wiki/Top_rank_per_group
      from collections import defaultdict
      from heapq import nlargest

   http://rosettacode.org/wiki/Topological_sort
      from functools import reduce

   http://rosettacode.org/wiki/Tree_traversal
      from collections import namedtuple
      from sys import stdout

   http://rosettacode.org/wiki/Update_a_configuration_file
      import re
      import string

   http://rosettacode.org/wiki/URL_decoding
   http://rosettacode.org/wiki/URL_encoding
      import urllib

   http://rosettacode.org/wiki/Walk_a_directory/Non-recursively
      import glob

   http://rosettacode.org/wiki/Walk_a_directory/Recursively
      import fnmatch
      import os

   http://rosettacode.org/wiki/Yin_and_yang
      import math

So, for all the above tasks (and probably more in total rosettacode.org)
you must import some library into Python, while PicoLisp does it with
just what comes with the base system (i.e. calling 'pil').

Consider the fact that you also have to _learn_ about these libraries --
as opposed to a small but powerful set of built-in functions.

@Henrik: Can you be more specific about which libraries you'd like to
see implemented in PicoLisp?

Cheers,
- Alex

[1] 
http://programmers.stackexchange.com/questions/60796/what-are-the-reasons-why-clojure-is-hyped-and-picolisp-widely-ignored
-- 
UNSUBSCRIBE: mailto:picolisp@software-lab.de?subject=Unsubscribe

Reply via email to