Mapcar функции из файла - Lisp
Формулировка задачи:
Написать программу ввода списка имен функций, ввода списка данных и получения списка результатов, используя функцию mapcar. Результат записать в текстовый файл и вывести на экран.Имена функций и данные вводить из файла. Функции следующие: rtos, setq, sqrt, strcat. Количество и последовательность вызываемых функций может быть различной.
Пишет ошибки с функциями rtos, setq, и др.
Вот пытался сделать и не работает = (
В тектсовом файле такая запись
(defun Lab5_11(inputFileName outputFileName) (setq inputFile (open inputFileName)) (setq outputFile (open outputFileName :direction :output)) (setq funcList (read inputFile)) (dolist (funcName funcList) (setq argList (read inputFile)) (cond ((or (eq funcName 'setq) (eq funcName 'strca)) (setq args (list 'mapcar (list 'quote funcName) (list 'quote argList))) ) ((or (eq funcName 'rtos) (eq funcName 'eq)) (setq args (list 'mapcar (list 'quote funcName))) (dolist (arg argList) (setq quotedArg (list 'quote arg)) (setq args (append args (list quotedArg))) ) ) ) (princ args)(princ " => ") (princ args outputFile)(princ " => " outputFile) (setq result (eval args)) (princ result)(terpri) (princ result outputFile)(terpri outputFile) ) (close outputFile) (close inputFile) ) ; (load "D:/C1/Lab5_11.lisp") ; (Lab5_11 "D:/C1/Lab5_11_Input.txt" "D:/C1/Lab5_11_Output.txt")
(rtos setq sqrt strcat) ((17.5 1 4) (17.5 2 3) (17.5 3 1)) (x '(a b)) ((sqrt 4)(sqrt 9)(sqrt 25)) (("a" "bout") ("a" "b" "c") ("a" "" "c"))
Решение задачи: «Mapcar функции из файла»
textual
Листинг программы
(defun f-mapcar (flist fdata fres) (let ((f-l (gensym 'f)) (f-d (gensym 'f)) (f-r (gensym 'f)) (fl nil) (fd nil)) (filOpen f-l flist _INPUT) (setq fl (input (filGetLine f-l))) (filClose f-l) (filOpen f-d fdata _INPUT) (setq fd (input (filGetLine f-d))) (filClose f-d) (filOpen f-r fres _OUTPUT) (filPutLine f-r (output (mapcar (lambda (f a) (if (listp a) (apply f a) (funcall f a))) fl fd))) (filClose f-r))) (f-mapcar "f-l.txt" "f-d.txt" "f-r.txt") ==> T
Объяснение кода листинга программы
Данный код представляет собой функцию f-mapcar
, которая принимает три аргумента: flist
, fdata
и fres
.
Внутри функции создаются три вспомогательные переменные:
f-l
- для чтения данных из файлаflist
.f-d
- для чтения данных из файлаfdata
.f-r
- для записи результатов в файлfres
. Далее, функция открывает файлflist
для чтения, считывает первую строку и закрывает его. Аналогично, функция открывает файлfdata
для чтения, считывает первую строку и закрывает его. Затем, функция открывает файлfres
для записи и записывает в него результат применения функцииmapcar
к первой строке файлаflist
и первой строке файлаfdata
. Наконец, функция закрывает файлfres
и возвращаетT
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д