Jump to content
IGNORED

Datasoft INTER-LISP/65


UNIXcoffee928

Recommended Posts

I may have to pick this up and play with it now. I've done some Scheme and Common LISP code but never played with Interlisp/65 yet. I'm assuming it's a real minimal environment. Is it pretty usable?

 

Once I get my FPGA DEC PDP-8 build finished, I'll have to fire up a LISP interpreter on that too LOL Hey... you guys had a lot of PDP-8, PDP-11 and VAX clones in Russia didn't you?

Link to comment
Share on other sites

This book

 

"THE ELEMENTS OF ARTIFICIAL INTELLIGENSE.
_______An Introduction Using LISP_______"
by Steven Tanimoto, University of Washington

 

presents us a list of commonly provided LISP functions for the times when Interlisp/65 was introduced.
I compare it with (OBLIST) and almost all of them are in InterLISP.

 

Moreover I think that the syntax of book and this version of Interlisp mostly the same.

 

I think you are right.

Here may be some PDP and VAX. (Although I've never seen them...)

 

;-)

Link to comment
Share on other sites

As far as it's concerned "Is it useful or not?"

You must be on your side only.

 

I only investigate these borders...

Please read the book i sent. There are many AI examples in all AI area.

If the internals of dialects are the same then we have fulli blown lang.

 

By the way, These boys in Datasoft said ((2.5 manual) - 'find it here in DOC format) that they made %NAME hooks to assembler and even thought about LISP assembler...

 

I see the potential. But now it's my THE BEST GAME only.

I play with it for months...

 

Best wishes from cold places! :_(

Link to comment
Share on other sites

Hello friends.

 

I tried yesterday to write simple function for reading DIR with any mask needed and without any success.

You know that internal LISP (DIR NUM) can't accept file mask and really used in another program.

 

As I remember for reading DIR we must write something like this

 

  (OPEN 4 6 'D1:*.*)
LOOP
  (IN# 4)
  (SETQ LIS (READ))
  (PR# 0)
  (PRINT LIS)
(GO LOOP)
This code reads nothing.

Any help appreciated!

(OPEN 4 6 'D:*.DIR)

 

I think. Not at my Atari and my

experience is old and limited.

 

Best of luck

Link to comment
Share on other sites

The DIR program in BASIC looks like this

10 DIM A$(40)
20 TRAP 30:OPEN #1,6,0,"D1:*.*": GOTO 40
30 ? "ERROR ";PEEK(195):END
40 TRAP 70
50 INPUT #1,A$
60 ? A$:GOTO 50
70 END

We remember that DIR listing contains particular strings ending with $9B

and Complete DIR listing ends with EOF.

 

As LISP treats EOL and <Space> as delimiter for atoms and lists thus we need

some constructive structure for atoms conjunction (for example by 3 in string).

Not universal at all.

 

EOF may be treated in LISP by (RETURN) clause.

Link to comment
Share on other sites

  • 1 month later...

Here is the Memory Map of Interlisp65.

 

INTER-LISP/65 v.2.5 MEMORY MAP
All adresses are in hexadecimal.
 $BFFF >!-----------------------!
        !                       !
        !     DISPLAY LIST      !
        !                       !
        !-----------------------! <--- HIMEM : $81,$82
        !                       !
        !        LISTS          !
        !                       !
        !-----------------------! <----- TOP : $97,$98
        !                       !
        !      FREE SPACE       !
        !                       !
        !-----------------------! <-- BOTTOM : $87,$88
        !                       !
        !     ATOMIC STRINGS    !
        !                       !
        !-----------------------!
        !                       !
        !     INTER-LISP/65     !
        !                       !
 $2200 >!-----------------------!
        !                       !
        !       DOS,SYSTEM      !
        !        AND LISP       !
        !       WORK SPACE      !
        !                       !
    $0 >!-----------------------!

It works only with DOS 2.5 as AUTORUN.SYS and DOS 2.5 CP as CON file.

Another thing is that it's hate cartridges... :_(

 

Is it possible to run it with SpartaDOS or MyDOS? :?

 

- If it's possible then we can use it with HD devices! :grin:

 

Edited by 130XE
Link to comment
Share on other sites

  • 1 month later...

Hello, friends.

 

Here is a sample code from Inter-LISP/65 manual:

 

 

(DEFINEQ REPEAT (LAMBDA (N FN)
(PROG (M)
(SETQ M N)
LOOP
(COND ((EQ M 0) (RETURN))
((APPLY* FN)))
(SETQ M (SUB M 1))
(GO LOOP)
)))

 

Does anyone could force it to work?

I can't.

 

Link to comment
Share on other sites

  • 1 year later...

Re this thread: http://atariage.com/forums/topic/222541-mydos-455-question-to-mathy/page-3?do=findComment&comment=3485317

 

The $02E4 is a variable that holds the number of RAM pages counted at the reset time. $A0 = 160 = 40 KB, which means that there is a cartridge present, probably. SDX was forgetting to update this value when disabling and enabling its ROM. Since the variable is hardly used by anything in the system, it is fairly safe to manually set it to $C0 = 192 = 48 KB and ... LISP runs.

 

The v.2.5 needs rather low MEMLO ($1D80), but even on a 64k machine the MEMLO value here is $1B89 (with X.COM loaded - without it is $14C1), so it should run. Just probably the LISP800.EXE should be used instead of LISPXL.EXE (although it works, just I do not know if there would not be some conflict under the ROM later).

 

On a 130XE or anything bigger (in USE BANKED mode) there should be no problem whatsoever.

 

EDIT: wrong MEMLO values for the default CONFIG.SYS on 64k. To accomplish that one should use own CONFIG.SYS without ATARIDOS.SYS loaded, at least.

Edited by drac030
  • Like 3
Link to comment
Share on other sites

Thank you drac030

:)

I've been in hurry! I lost my IDEPTIME!

 

Really LISP - is not so ierogliphical.

Everybody knowing assembler knows that the ability to write sources, fill them with right stanza, load and save programs,

even knowledges of some algorythms, all of it - is NOT assembler.

At first we MUST know the machine!

 

When I explained to my doughter what is lisp, she understand all.

They say bla-bla-bla in very uncommon words, but The Truth is very simple.

LISP works with WORDS (some of them KEYWORDS) absolutely in the same manner as assembler works with bits!

Both of them can ONLY write bits or words, copy them or move in some specific memory being it Registers, Z-page area, main memory or extended.

Only moving bits or only moving words. That's all.

 

Mathimatically, Factorial defined as

if n>=0

     / 1          , if n=0
n! = | 
     \ n * (n-1)! , if n>0

If you looks how I inputed LISP text you'll see that I only rewrite this definition.

 

Yes, in LISP COND used instead of IF (CONDition) and ' (QUOTE sign) used for excluding evaluation of some data FE 'D:EDIT

But you can see that moving WORDS (or bits) we can evaluate Factorial.

 

Hi, Stephen. Many thanks.

But HOW TO insert frame in forum theme? Is there some button or something?

Link to comment
Share on other sites

Hi, Stephen. Many thanks.

But HOW TO insert frame in forum theme? Is there some button or something?

No - I just pasted the link directly, and the forum recognizes it as a youtube link. You can click the quote button for my post, it should show what is there.

Link to comment
Share on other sites

  • 2 weeks later...
The FIRST thing we need to know while learning LISP is:

The LISP has BINARY-TREE structure!


From it's assembly-prepared ROOT i.e. REPL... to EndOfMem...


The second - (as any interactive program) LISP is the REPL (Read Evaluate Print Loop) cicle!


It means that LISP

1. Reads input from keyboard

2. Evaluates it in Memory and

3. Prints output to Screen.

...


So USER-SPACE begins in THE brunch which is really INPUT-STREAM from keyboard!!!

After evaluations LISP brings us to ONLY ONE output VALUE!

It will be NEW ROOT to further inputs.

(And it may be 'War and Peace' of Tolstoy ... for example.)


Simplifying all matter we can say that:

ROOT of some branch is it's *internal-name* (Explained further)

- LEFT branch contains the LIST of available NAMES i.e. ATOMS and LISTS...

- RIGHT branch contains the LIST-OF-LISTS of available DEFINITIONS which are strictly bounded with it's names.


Thus...

When we loading FILE we concatenate REPL *stream-input* with *internal-name* which is exactly FILENAME!

Just replacing E: handler by D: handler.


In other words we add 'D:NAME to LEFTmost branch of *stream-input* of REPL (as Property NAME (and thus it appears in *(OBLIST)-call*))

and add all-other file data to RIGHTmost branch (as Property DECLARATIONs)


LISP FILE STRUCTURE:


(List of NAMES)

(LIST OF DEFINITIONS CONSEARNING NAMES)

NIL (as EOF sign)


One of the most disappointing things is the fact that LISP never pays attention to EOL-sign.

It means that if you edit your LISP file in any external editor, you have a good chance to trancate LISP records and to kill your program!!!


Now I want to present you InterLISP/65 editing session.

We want to:

1. Repare LISP BUG

2. Create NEW file, containing changing screen colors and borders etc.


Some available Structures-EDITOR commands:

T - TOP of list definition (It means SOS when we are lost in parenthesis ...)

A - Advancing aross CURRENT list

B - Returning BACK in programm.

E - Editing CURRENT list. Particularly NAMES! (LEFT-branch)

Being it *List-of-NAMES* in file or being it initial *THE-ONLY-ONE-NAME-LIST*.

I mean that newly created file MUST have some NON EVALUATED (List-of-NAMES) in it.

EF - Edit Function THUS EDITING IT'S DEFINITION!!! (RIGHT-branch)


I'll create new file, containing ONLY-ONE "PREP" form and it's definition, thus


'(PREP) - Non-Evaluated NAME as '-sign means QUOTE!


and LIST of definitions:

D:PREP - Just filename...


L - loading file L D:PREP

S - saving file (NEEDS TWO FILELDS)


F.E.

... if we need to create new file...

S

PROPERTY> '(PREP)

FILENAME> D:PREP


... if we need save ALL!!! earlier loaded and edited in session definitions

S

PROPERTY> D:PREP

FILENAME> D:PREP


I - Inseart our definition AFTER current!

PRE - Inseart our definition BEFORE current.

(This command adds one level of parenthesis in our list of definitions!!! We must use RE then...)

RE - Removes external parenthesis

LI - adds external parenthesis


R - Replace current form or ATOM


H - HELP Returns the list of all availble commands of STRUCTURES-EDITOR

Not working!!!

!!! Firstly we must repare it !!!


Here is editing session:



Link to comment
Share on other sites

A good LISP, marred by a terrible line editor.

 

(for those wondering, a single quote, is not a delimiter, like in other languages. The ' indicates that the atom (part of the expression) following isn't a variable (or in LISP terminology, that the atom is unbound, isn't a variable, and should be taken literally), you can think of it akin to e.g. Ruby's : for symbols)

 

'foo is literally equivalent to:

 

 

(quote foo)

 

-Thom

Link to comment
Share on other sites

As far as it's concerned QUOTE-form I'm at your side.

 

I'm sorry but regarding EDITor I can say only one thing...

 

In LISP it's VERY DIFFICULT to understand anything staing in 40-columns screen editor...

and structured editor help us in some way concentrates on simple forms and in contrary pretty-print all other input.

 

I understand that it's not very impressive but anyway helpful.

 

GOOD LUCK!

Link to comment
Share on other sites

  • 2 weeks later...

Here is some movement, friends. ;)

 

As I decided earlier not to use ALL InterLISP/65 DISTRO with the purpose to insert my ...

Hm-m-m... LISP finctions (It's even hard to imagine how it's hard to find some definitions from modern iNet. All old PDF's are images and have nothing with iNet search...) and arranged D:PREP file for thease purposes. (I think it MUST contain only very useful functions! And experiments, and nothing more)

Only one thing I've changed in distro - added (INIT) function which loads both D:PREP and D: EDIT

And the result is here: the content of D:PREPS

 

 **** PP2PR
(MACRO (F)
(CONS (QUOTE PP*) (LIST (LIST (QUOTE GETD) (LIST (QUOTE QUOTE) (CADR F))))))
 
**** PP*
(LAMBDA (S-EXP)
(PROGN (CLOSE 7)
(OPEN 7 8 (QUOTE P:))
(PR# 7)
(PP)
(PR# 0)
(CLOSE 7)))
 
**** ILOAD
(LAMBDA NIL
(PROGN (POKE 128 0)
(TERPRI)
(PRIN1 (QUOTE "Enter FileName to load, please..."))
(TERPRI)
(PRIN1 (QUOTE "-> "))
(LOAD (READ))))
 
**** NULL
(LAMBDA (L)
(EQ L NIL))
 
**** ZEROP
(LAMBDA (N)
(EQ N 0))
 
**** SUB1
(LAMBDA (N)
(SUB N 1))
 
**** ADD1
(LAMBDA (N)
(ADD N 1))
 
 
**** SETQQ
 
(NLAMBDA (ARGS)
(SET (CAR ARGS) (CADR ARGS)))
 
**** DEFMACRO
(MACRO (X)
(CONS (QUOTE DEFINEQ) (LIST (CADR X) (CONS (QUOTE MACRO) (CDDR X)))))
 
**** PULL
(MACRO (L)
(LIST (QUOTE SETQ) (CADR L) (CONS (QUOTE CDR) (CDR L))))
Link to comment
Share on other sites

  • 2 months later...

Dear Konrad,

 

I mean that I found that there are DOSes compartible from the box...

I only said that I suprisingly noted that there are very complicated DOSes like TOP-DOS even with MyDOS type of file structure... (Someone said, but I'm doubt that they can work with MyDOS directories!)

 

SDX is proved usable with your patch (As no one love LISP thus no one love patch!)

 

And SDX, you said, will be patched in next version... :) Awaiting...

 

Really I love SDX.

(I still can't work in proper manner with it (Sorry! (LISP (Vodka...))))

 

No more powerful then SDX!!!

 

PS

I'd like to know your personal opinion about the role of Latinitsa in Polish.

 

My opinion is that it is a very effective CONSERVANT of all Slavianian langs combining of Pronociation and the Writing.

 

Due to this fact I can read (hardly) 'Slovo o Polku Igoreve'

 

Dear 'Gerr Peter' was the first who castrate Russian, then was others.

 

Sorry it's just curious.

Good luck.,

Link to comment
Share on other sites

  • 2 weeks later...

By the way, Konrad, is it possible to add second semicolon after CAR:\;

SET PATH=CAR:\;; ...

into CARs CONFIG SYS by default in next SDX distributions?

 

It will save a lot of nerves to programmers who needs subdirs for their programming.

This trick only adds CURRENT subdir into search path...

I think this behavior must be used by default. :)

 

EZ

Link to comment
Share on other sites

Perhaps I do not understand the problem, but the default value of $PATH does not prevent programs from being executed from subdirectories.

 

It is set by default to PATH=CAR:

 

This means that the CAR: directory will be searched before the current one.

Link to comment
Share on other sites

I just read somewhere in documentation about doubled semicolumns ...

 

You know of course that if the word CAR is here it means that SDX concerned.

 

I only want to say that SDX doesn't behave in the same convenient way as DR-DOS, PD-DOS, MS-DOS while reading PATH.

 

Next again!

I don't have any claims to SDX.

I loved it for tons of Years.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...