Mapcar функции из файла - Lisp

Узнай цену своей работы

Формулировка задачи:

Написать программу ввода списка имен функций, ввода списка данных и получения списка результатов, используя функцию mapcar. Результат записать в текстовый файл и вывести на экран.Имена функций и данные вводить из файла. Функции следующие: rtos, setq, sqrt, strcat. Количество и последовательность вызываемых функций может быть различной. Пишет ошибки с функциями rtos, setq, и др.
Листинг программы
  1. (defun Lab5_11(inputFileName outputFileName)
  2. (setq inputFile (open inputFileName))
  3. (setq outputFile (open outputFileName :direction :output))
  4. (setq funcList (read inputFile))
  5. (dolist (funcName funcList)
  6. (setq argList (read inputFile))
  7. (cond
  8. ((or (eq funcName 'setq) (eq funcName 'strca))
  9. (setq args (list 'mapcar (list 'quote funcName) (list 'quote argList)))
  10. )
  11. ((or (eq funcName 'rtos) (eq funcName 'eq))
  12. (setq args (list 'mapcar (list 'quote funcName)))
  13. (dolist (arg argList)
  14. (setq quotedArg (list 'quote arg))
  15. (setq args (append args (list quotedArg)))
  16. )
  17. )
  18. )
  19. (princ args)(princ " => ")
  20. (princ args outputFile)(princ " => " outputFile)
  21. (setq result (eval args))
  22. (princ result)(terpri)
  23. (princ result outputFile)(terpri outputFile)
  24. )
  25. (close outputFile)
  26. (close inputFile)
  27. )
  28. ; (load "D:/C1/Lab5_11.lisp")
  29. ; (Lab5_11 "D:/C1/Lab5_11_Input.txt" "D:/C1/Lab5_11_Output.txt")
Вот пытался сделать и не работает = ( В тектсовом файле такая запись
Листинг программы
  1. (rtos setq sqrt strcat)
  2. ((17.5 1 4) (17.5 2 3) (17.5 3 1))
  3. (x '(a b))
  4. ((sqrt 4)(sqrt 9)(sqrt 25))
  5. (("a" "bout") ("a" "b" "c") ("a" "" "c"))

Решение задачи: «Mapcar функции из файла»

textual
Листинг программы
  1. (defun f-mapcar (flist fdata fres)
  2.   (let ((f-l (gensym 'f))
  3.         (f-d (gensym 'f))
  4.         (f-r (gensym 'f))
  5.         (fl  nil)
  6.         (fd  nil))
  7.     (filOpen f-l flist _INPUT)
  8.     (setq fl (input (filGetLine f-l)))
  9.     (filClose f-l)
  10.     (filOpen f-d fdata _INPUT)
  11.     (setq fd (input (filGetLine f-d)))
  12.     (filClose f-d)
  13.     (filOpen f-r fres _OUTPUT)
  14.     (filPutLine f-r (output (mapcar (lambda (f a) (if (listp a) (apply f a) (funcall f a))) fl fd)))
  15.     (filClose f-r)))
  16.  
  17. (f-mapcar "f-l.txt" "f-d.txt" "f-r.txt")
  18.  
  19. ==> T

Объяснение кода листинга программы

Данный код представляет собой функцию f-mapcar, которая принимает три аргумента: flist, fdata и fres. Внутри функции создаются три вспомогательные переменные:

  1. f-l - для чтения данных из файла flist.
  2. f-d - для чтения данных из файла fdata.
  3. f-r - для записи результатов в файл fres. Далее, функция открывает файл flist для чтения, считывает первую строку и закрывает его. Аналогично, функция открывает файл fdata для чтения, считывает первую строку и закрывает его. Затем, функция открывает файл fres для записи и записывает в него результат применения функции mapcar к первой строке файла flist и первой строке файла fdata. Наконец, функция закрывает файл fres и возвращает T.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 3.917 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут