Hallo,
nun haben wir ja die 2-Jahres Pandemie gut überstanden, sind über 40,
und Alle noch am Leben ...
In der düsteren, und kalten Zeit, habe ich ein wenig über Grammatiken
geforscht (weil das ja auch auf meinen Gebiet mit Compilern recht nahe
liegt).
Heraus gekommen ist ein statisches Programm, das durchaus dazu genutzt
werden kann, um dynamische Grammatiken, also sprich Sprache(n) zu
simulieren bzw. auf Steuerkomandos zu reagieren.
Dabei ist es ja fast eine pfleiß-Aufgabe, damit man mit dem Computer
sprechen kann - sofern die geforderten Daten vorliegen.
Aus Platzgründen und zur demonstration, habe ich nur einen kleinen Teil
der Grammatik in dieser Demo einfließen lassen.
Folgendes zum Aufbau:
- *alist* fungiert hier als Duden/Lexikon, bei dem ein Paar aus Nummer
und Word gebildet wird (das hat dann den Vorteil, das Wortwiederhol-
ungen durch eine Nummer und nicht durch Text repräsentiert werden.
Nummern lassen sich dann also schneller durch den Computer verarbeiten
die in einer Datenbank indiziert werden können, nach Relevanz sortiert
und anderweitig verwendet werden können.
- *grammar* ist nach dem Vorbild eines Stack's (Keller) aufgebaut, bei
dem das indizierte Wort zu einen Text geformt werden kann.
Je länger der Text, desto aussagefähiger wird dann die Bedeutung bzw.
umso stärker kann differenziert werden, was denn der Programmierer
oder der Nutzer des Programmes verlangt.
So lässt sich eine kleine Datenbasis schaffen, die dann durch weitere
Verarbeitung: zum Beispiel in einen Chat Bot verknüpft werden kann.
Im Quelltext habe ich schonmal mittels handler-case eine Ausnahme-
behandlung zu realisieren - aber halt auch nur examplarisch.
Für Vorschläge aller Art bin ich sehr dankbar !
Aber nun hier der Code...
Mit freundlichen Weihnachtsgrüßen
Euer Jens
;; ----------------------------------------------------
;; test1.lisp - a simple test.
;;
;; (c) 2022 by Jens Kallup - paule32
;; all rights reserved.
;;
;; Notes (2022-12-18):
;; - you have to install "quicklisp.lisp" on seperate
;; file. Then you have to create the file "quick.ok"
;; in the working directory where this source file(s)
;; exists.
;; ----------------------------------------------------
(format T "Please wait, loading packages ...~%")
#-quicklisp
(let ((quicklisp-init "quicklisp/setup.lisp"))
(when (probe-file quicklisp-init)
(load quicklisp-init)))
(with-open-stream (*standard-output* (make-broadcast-stream))
(ql:quickload :mito)
(ql:quickload '(:qtools :qtcore :qtgui))
)
;; ----------------------------------------------------
;; global scope
;; ----------------------------------------------------
(defvar *grammar*)
(defvar *alist*)
(defvar *i0*)
(defvar *i1*)
(defvar *i2*)
;; ----------------------------------------------------
;; functions:
;; ----------------------------------------------------
(defun test1 () (progn
(setq *alist*
'(
(1 . ich)
(2 . du)
(10 . habe)
(20 . dich)
(30 . gefragt)
))
(setq *grammar*
'((1)
(1 10)
(1 10 20)
(1 10 20 30)))
(setq *i0* (assoc '1 *grammar*))
(setq *i1* (progn
(cdr (assoc '1 *alist* ))
(cdr (assoc '10 *alist* ))
))
(setq *i0* '(1 10 20))
(setq *i1* (loop for x in *i0* collect (car (assoc x *alist* ))))
(setq *i2* (loop for y in *i0* collect (cdr (assoc y *alist* ))))
(print *i1* )
(print *i2* )
(if (eq T (equal '(ich habe dich) *i2*))
(progn
(format T "~%Der Satz ist richtig.")
(exit)
)
(progn
(format T "~%Der Satz ist falsch .")
(exit)
)
)
))
;; ----------------------------------------------------
;; entry, exception handler ...
;; ----------------------------------------------------
(handler-case (progn
(with-open-file (stream "quick.ok"
:direction :input
:if-does-not-exist :error))
(format T "start test 1 ...~%")
(test1))
(error (c) (progn
(format T "QuickLisp missing.~%")
(load "quicklisp")
(exit)
)))
--
Diese E-Mail wurde von Avast-Antivirussoftware auf Viren geprüft.
www.avast.com