Newsgroup: it.comp.retrocomputing
Titolo: Xpost - IA e retrocomputing

Un argomento sia retro che AI, che sia la prima volta che vengono
collegati questi due gruppi? :-)
Il motivo e' presto detto: c'era un listato in basic per Commodore64
fornito da non ricordo quale dei numerosi giornaletti di allora
(potrebbe essere papersoft o l'allora commodore computer club) che in
"poche" righe ti forniva un discreto risultato (sicuramente meglio del
"fantastico perfettissimo incredibile Eloisa" :-) :-) :-) ovvero
consentiva la creazione di un database di relazioni indicate in
linguaggio umano, tipo 
"Mario e' un uomo" (risposta: "Capisco.")
"L'uomo e' mortale" (risp: "Capisco.")
e poi essere in grado di rispondere:
"Mario e' mortale?" "SI" 
"Un mortale e' Mario?" "Non lo so."
"Dimmi di Mario" "Uomo, Mortale".
Venivano contemplati i verbi principare (essere, avere...) e il tutto
veniva gestito con array. Le risposte possibili erano "SI" "NO" "NON
LO SO" e le possibili caratteristiche di un soggetto.
Non e' che qualcuno si ricorda chi pubblico' questo programma e se
magari e' ancora reperibile??? Anche una versione "contemporanea" puo'
essere gradita per giocare un po' :-)

 essere gradita per giocare un po' :-)
Non lo ricordo, ma un programma in grado di fare semplici sillogismi 
diretti non dovrebbe essere difficile da creare.
Potresti, per cominciare, farlo usando una interfaccia in cui 
semplicemente inserisci "parola" "is" "parola" senza preoccuparti di 
coniugazioni ecc. e dovresti appoggiarti a un vocabolario per associare 
singolari e plurali.
-- 
C++U,
   GiO

 essere gradita per giocare un po' :-)
Mi sembra che fosse proprio Commodore Computer Club (o la versione con 
cassetta?), anch'io lo ricordo e mi colpě molto.
...mia madre buttň via tutta la collezione di CCC appena mi sposai...

...mia madre buttò via tutta la collezione di CCC appena mi sposai...
Malissimo!!!! Anche perche' i vecchi numeri erano gioielli, poi e'
diventata una ca..ata pazzesca...

 ...mia madre buttň via tutta la collezione di CCC appena mi sposai...
Per non perdere i sorgenti a otto bit, non bisogna sposarsi. :)
-- 
C++U,
   GiO

 diventata una ca..ata pazzesca...
Sembrava che non aspettasse altro che uscissi da casa per buttare via 
tutto, fu letteralmente uno shock per me!
E' grazie a Commodore Computer Club che imparai ad amare la programmazione.
Riprendendo il programma in oggetto a me non sembra di ricordare che ci 
fossero i sorgenti (per quanto si potessero offuscare sul C64...), quindi 
mi viene in mente piu' una rivista su cassetta (Program?).

 quindi mi viene in mente piu' una rivista su cassetta (Program?).
Non saprei, ma non credo Program, né Special Program.
Forse qualcosa della Jackson?
Quanto ai sorgenti, una sfilza di "DATA" con un for, read, poke e sys 
finale era abbastanza offuscante per la maggioranza degli umani. :)
-- 
C++U,
   GiO

magari e' ancora reperibile??? 
Se non ricordo male, uno dei primi numeri di "SuperVic & C64" della
Jackson, che associava ai listati una cassetta.
-- 
Regards LaZ
.·´¯`·.¸.·´¯`·.¸ ><((((º> ....... <º))))>< .·´¯`·.¸.·´¯`·.¸
Mi riservo, con fermezza, il diritto di contraddirmi. (Paul Claudel) 
.·´¯`·.¸.·´¯`·.¸ ><((((º> ....... <º))))>< .·´¯`·.¸.·´¯`·.¸

 
Se fosse Commodore Computer Club si potrebbe cercare qui:
http://ready64.altervista.org/ccc/index.php
e qui
http://www.museo-computer.it/SalaLettura/CCC
hanno digitalizzato gli articoli. Mi messo subito alla ricerca...

 
Forse è questo?
http://ready64.altervista.org/ccc/07/07.jpg

 
http://ready64.altervista.org/ccc/07/07.jpg
Mi sembra ben più semplice di quello descritto, però tante volte i 
ricordi ci ingannano. :)
-- 
C++U,
   GiO

 
No, infatti non è quello. Mi sono visto tutti i numeri di Computer 
Programming e Papersoft online, ma non ho trovato niente di piu'.
Però ripensandoci non mi pare che fosse per C64. Forse era per MSDOS. Forse 
era qualche esempio fornito con Prolog86?



No, anche perchè non si tratta di SuperVic (Jackson)


 ...mia madre buttň via tutta la collezione di CCC appena mi sposai...
Le sfighe non vengono mai da sole .
Vico 

finale era abbastanza offuscante per la maggioranza degli umani. :)
MA un programma del genere non e' certo composto da una sfilza di
DATA, anzi non ne serve nemmeno una, sicuramente!

 wrote:

Cavolacci, questo sicuro che ce l'avevo :-) Ne compravo di riviste
allora... Cmq sai questo cos'e'? 
20q.net
 con il non trascurabile
svantaggio che 20q lo addestrano migliaia di persone
contemporaneamente :-(
Ora pero' anche io ho il dubbio che il programma che ricordo io fosse
effettivamente questo o un altro... comunque complimenti per la
ricerca :-)


http://ready64.altervista.org/ccc/07/07.jpg
P.S.: ma le altre pagine non ci sono? Ho provato a cambiare 07.jpg in
08.jpg ma mi da pagina non trovata.

Giovine ha scritto:

Non ci sono tutte. Comunque eccole:
http://ready64.altervista.org/ccc/visualizza.php?directory=07

 ricerca :-)
No, è un altro. Anch'io lo ricordo, e non era il programma a fare le 
domande, ma il dialogo era proprio come quello descritto nel primo post.
Per non mi sembra che fosse per C64, ma per MSDOS. Forse qualcosa scritto 
in Prolog86.

in Prolog86.
No prolog sono sicuro di no in quanto non l'ho mai incontrato sulla
mia strada :-)

 "Dimmi di Mario" "Uomo, Mortale".
Un programma analogo mi pare si trovi nel libro "Il BASIC per
l'intelligenza artificiale" di Tim Hartnell.

l'intelligenza artificiale" di Tim Hartnell.
Ce l'hai?

Hello Giovine,




A meno che il programma non fosse scritto in linguaggio macchina.
Qualsiasi programma per Commodore 64 o VIC-20 puň essere realizzato in 
quel modo.
Il Commodore BASIC č un linguaggio interpretato, il cui interprete 
risiede in ROM sugli home computer Commodore.
I processori, perň, 6502 e 6510, lavorano ovviamente in linguaggio 
macchina, come tutte le CPU.
Qualsiasi programma, una volta interpretato, viene eseguito dalla CPU in 
linguaggio macchina (proprio come accade oggi con i linguaggi 
interpretati) e, all'epoca, era relativamente semplice scrivere un 
programma direttamente in linguaggio macchina, sicuramente molto piů 
semplice che al giorno d'oggi. Alcuni (me compreso) lo facevano per via 
della mancanza di assemblatori decenti, specialmente all'inizio.
Il modo piů semplice di diffondere un programma scritto in linguaggio 
macchina era fornire un listato BASIC che, tramite FOR e POKE inseriva 
il programma LM in memoria, leggendolo (READ) da una lista di DATA, 
eseguendolo alla fine con una SYS.
Ovviamente il conoscitore del linguaggio macchina nativo riuscire 
"leggere" le istruzioni DATA e, per esempio, capire che quando vedeva 
169, 0 si trattava dell'istruzione che in assembly si scrive LDA #00, 
con cui molti programmi iniziavano, ecc. ecc.
Nota che non ho mai scritto che fosse opportuno o necessario scrivere 
quel certo programma in LM, ho solo scritto che, in linea di principio, 
scrivere i programmi in quel modo era possibile e "offuscante" per la 
maggioranza degli utenti.
Inoltre, Siccome il basic, nei Commodore, era "tokenizzato" (cioč ogni 
istruzione veniva memorizzata non con i suoi caratteri, ma con un byte 
che la identificava, era tecnicamente possibile trasformare qualsiasi 
listato basic in una sfilza di DATA, avendo cura, alla fine, di spostare 
il puntatore di inizio programma BASIC per fare eseguire il "vero" 
programma da lě. C'era anche piů di un programmino per fare questo 
automaticamente.
Non so se sia questo il caso, perň, ed effettivamente, se il listato era 
presente su una rivista che si proponeva lo scopo di insegnare la 
programmazione, sarebbe stato stupido farlo cosě.
-- 
C++U,
   GiO

risiede in ROM sugli home computer Commodore.
Si', tutto quello che vuoi, ma il programma in questione non contiene
nessun DATA, sia perche' l'ho visto, si perche' non ha nessuna delle
pretese per le quali di solito di ricorre al LM :-) 
Non ha bisogno di grafica, ne' di suono, ne' di una particolare
velocita''... Solo testo e ragionamento!

Giovine ha scritto:

Sì, da qualche parte in soffitta.
Stasera provo a dare un'occhiata.

 velocita''... Solo testo e ragionamento!
Il BASIC č molto lento, quindi, se uno facesse un'applicazione "di 
ragionamento" potrebbe avere ben motivi di usare il LM. Ad esempio 
quando si faceva il software per i calcoli strutturali, che sono tutti 
"ragionamento", si usava il LM.
-- 
C++U,
   GiO

Giovine ha scritto:

Non essendo in grado di scannerizzare le pagine in tempi "ragionevoli",
ti riporto il listato cosi' com'e' nel libro.
A ben guardare non credo sia il listato cui ti riferisci (tra l'altro
questo e' scritto in un dialetto del BASIC non meglio specificato), ma
magari puo' interessarti lo stesso.
Una nota: a causa di un errore di stampa, manca la routine di
inizalizzazione (il listato si interrompe alla linea 1040 per
riprendere alla linea 1990); la routine di inizializzazione e' dunque
farina del mio sacco ;)
Esempio d'uso del programma, cosi' come riportato nel testo:
?UN'AQUILA E' UN UCCELLO
     >OK
?UN UCCELLO E' UNA CREATURA ALATA
     >OK
?UN'AQUILA E' UNA CREATURA ALATA?
        (STO CERCANDO 'AQUILA' )
         (TROVATO IN 1 1)
     > SI
?UN UCCELLO E' UN VOLATILE
     > OK
?UN'AQUILA E' UN VOLATILE?
        (STO CERCANDO 'AQUILA' )
         (TROVATO IN 1 1)
     > SI
?UN VOLATILE E' UNA CREATURA ALATA?
        (STO CERCANDO 'VOLATILE' )
         (TROVATO IN 1 4)
     > SI
??
SOGGETTO DA CONTROLLARE: UCCELLO
2 2 AQUILA
3 2 CREATURA ALATA
4 2 VOLATILE
Listato:
10 REM  SYLLOGY
20 GOSUB 1050: REM INIZIALIZZAZIONE
30 PRINT : INPUT A$
40 IF A$ = "?" THEN 910
50 IF A$ = "" THEN END
60 FLAG = 0
80 IF RIGHT$(A$, 1) = "?" THEN 480: REM CONCLUSIONI
90 GOSUB 2000: REM ESTRAI I DUE NOMI DALLA FRASE
240 REM AGGIORNA LA BASE DI CONOSCENZE
250 REM
260 N = 0
270 N = N + 1
280 IF Z$(1, N) = B$ THEN 320
290 IF Z$(1, N) = "" THEN Z$(1, N) = B$: GOTO 320
200 IF N < 25 THEN 270
310 PRINT "NON HO PIU' SPAZIO PER MEMORIZZARE SOGGETTI"
320 REM ***************
330 REM ** ORA PONE L'OGGETTO SOTTO DI ESSO **
340 K = 0
350 K = K + 1
360 IF Z$(K, N) = C$ THEN 400
370 IF Z$(K, N) = "" THEN Z$(K, N) = C$: GOTO 400
380 IF K < 25 THEN 350
390 PRINT "NON HO PIU' SPAZIO DI MEMORIA PER GLI OGGETTI"
400 IF FLAG = 1 THEN PRINT TAB(6); "> OK ": GOTO 30
410 REM ** ORA SCAMBIA OGGETTO E SOGGETTO E LI CONSERVA **
420 FLAG = 1
430 M$ = B$
440 B$ = C$
450 C$ = M$
460 GOTO 250
470 REM
480 REM --CONCLUSIONI--
500 X = LEN(A$)
510 A$ = LEFT$(A$, X - 1)
520 GOSUB 2000
530 F$ = B$: S$ = C$
630 PRINT TAB(9); "(STO CERCANDO '"; F$; "' )"
640 X = 0
650 X = X + 1
660 IF Z$(1, X) = F$ THEN PRINT TAB(10); "(TROVATO IN 1 "; X; ")": GOTO
700
670 IF X < 25 THEN 650
680 PRINT TAB(6); "> NON RIESCO A TROVARE IL SOGGETTO ": PRINT TAB(8);
F$
690 GOTO 30
700 Y = 1
710 Y = Y + 1
720 IF Z$(Y, X) = S$ THEN PRINT TAB(6); "> SI ": GOTO 30
730 IF Y < 25 THEN 710
740 Y = 1
750 Y = Y + 1
760 P$ = Z$(Y, X)
770 M = 0
780 M = M + 1
790 IF Z$(1, M) = P$ THEN 830
800 IF M < 25 THEN 780
810 IF Y < 25 THEN 750
820 PRINT TAB(6); "> NO ": GOTO 30
830 Q = 1
840 Q = Q + 1
850 IF Z$(Q, M) = S$ THEN PRINT TAB(6); "> SI ": GOTO 30
860 IF Q < 25 THEN 840
870 IF M < 25 THEN 780
880 GOTO 820
890 REM
900 REM ***************
910 REM
920 INPUT "SOGGETTO DA CONTROLLARE: "; H$
930 T = 0
940 T = T + 1
950 IF Z$(1, T) = H$ THEN 990
960 IF T < 25 THEN 940
970 PRINT "NON HO DATI SU"; "'"; H$; "'"
980 GOTO 30
990 K = 1
1000 K = K + 1
1010 IF Z$(K, T) <> "" THEN PRINT K; " "; T; " "; Z$(K, T)
1020 IF K < 25 THEN 1000
1030 GOTO 30
1040 REM ***************
1050 REM INIZIALIZZAZIONE
1060 DIM Z$(25, 25)
1070 RETURN
1990 REM ESTRAI I DUE NOMI IN B$ E C$
2000 IF LEFT$(A$, 4) = "UNO " OR LEFT$(A$, 4) = "UNA " THEN A$ =
MID$(A$, 5)
2004 IF LEFT$(A$, 3) = "UN " THEN A$ = MID$(A$, 4)
2005 IF LEFT$(A$, 3) = "UN " OR LEFT$(A$, 3) = "IL " OR LEFT$(A$, 3) =
"UN'" OR LEFT$(A$, 3) = "LA " OR LEFT$(A$, 3) = "LO " THEN A$ =
MID$(A$, 4)
2010 IF LEFT$(A$, 2) = "L'" THEN A$ = MID$(A$, 3)
2020 X = LEN(A$)
2030 N = 0
2040 N = N + 1
2050 IF MID$(A$, N, 1) = " " THEN B$ = LEFT$(A$, N - 1): GOTO 2080
2060 IF N < X THEN 2040
2070 PRINT " NON CAPISCO": GOTO 30
2080 K = 4
2090 C$ = MID$(A$, N + K)
2100 IF LEFT$(C$, 4) = "UNO " OR LEFT$(C$, 4) = "UNA " THEN C$ =
MID$(C$, 5)
2110 IF LEFT$(C$, 3) = "UN " OR LEFT$(C$, 3) = "UN'" THEN C$ = MID$(C$,
4)
2130 RETURN

ti riporto il listato cosi' com'e' nel libro.
Ah fantastico, non sara' proprio questo, ma di certo quello che
ricordo io era stato fatto su questa base :-)
Bisognerebbe rinominare questo ng in "ng delle imprese impossibili"
:-) :-)
Grazie e.... complimenti per la pazienza nel copiare il listato,
usanza dei tempi andati!!! :-) :-)