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