gpt4 book ai didi

input - Lisp 中的读取函数不提示

转载 作者:太空宇宙 更新时间:2023-11-03 19:02:17 25 4
gpt4 key购买 nike

所以我最近自学了 lisp,并一直在搞一些程序。我正在尝试编写一个小程序来比较用户输入的类列表并找出哪些类可以一起工作。下面是第一部分,它从用户那里收集数据并创建一些上课时间列表。

(defun class-entries ()

(setf Monday 0) ;initializes the days of the week
(setf Tuesday 0)
(setf Wednesday 0)
(setf Thursday 0)
(setf Friday 0)

(setf times 100)
(dotimes (repeating times "You have reached the limit of entries") ;repeats the following for the number of classes that you are comparing
(dolist (dayofweek '(Monday Tuesday Wednesday Thursday Friday)) ;repeats the following for each day of the week
(print (concatenate 'string "Does this class occur on " dayofweek " ?"))
(setf isday (read))
(if (= isday 1) ;prompts the questions if there is a class that day
(progn
(print (concatenate 'string "What time does the class begin on " dayofweek " ?"))
(setf starttime (read))
(print (concatenate 'string "What time does the class end on " dayofweek " ?"))
(setf endtime (read)))
(setf isday 0))
(if (= isday 0) ;Adds the list of (startime endtime) to the current day of week or nil if there isn't a class that day
(setf 'dayofweek '"nil")
(setf 'dayofweek '(starttime endtime))))
(print "What is the title of the class?")
(setf (read) '((mon (Monday)) (tues (Tuesday)) (wed (Wednesday)) (thurs (Thursday)) (fri (friday)))) ;sets a new variable to the values of the classes's hours
(print "Is there another class?") ;repeats the function for another class or ends it
(setf isclass (read))
(if (= isclass 0)
(setf times 0)
()))
(setf times 100)
)

当我评估该函数时,它只返回 0,没有其他任何内容出现。我不确定是不是因为我没有使用 Listener 或什么。谢谢。

最佳答案

我觉得这个问题不够具体,但这可能对你有点帮助,希望能作为分解和提示的有用例子。向事物添加一些额外的检查并不难:

(defun prompt (&optional (control "> ") &rest arguments)
"Read a value from STREAM after presenting PROMPT."
(fresh-line *terminal-io*)
(apply 'format *terminal-io* control arguments)
(finish-output *terminal-io*)
(read *terminal-io*))

(defstruct course
(name nil :type symbol :read-only t)
(day nil :type symbol :read-only t)
(start nil :type number :read-only t)
(end nil :type number :read-only t))

(defun prompt-for-course ()
(flet ((except-quit (x)
(if (string-equal (princ-to-string x) "quit")
(return-from prompt-for-course nil)
x)))
(let (name day start end)
(setq name (except-quit (prompt "course name: "))
day (except-quit (prompt "course day: "))
start (except-quit (prompt "start time: "))
end (except-quit (prompt "end time: ")))
(make-course :name name
:day day
:start start
:end end))))

(defun prompt-for-courses ()
(loop
with courses = (make-hash-table)
for course = (prompt-for-course)
while course
do (push course (gethash (course-day course) courses))
finally (return courses)))

CL-USER> (prompt-for-courses)
course name: intro-logic
course day: monday
start time: 1100
end time: 1250

course name: intermediate-logic
course day: tuesday
start time: 1100
end time: 1250

course name: quit

#<HASH-TABLE :TEST EQL :COUNT 2 {1003EA6513}>

关于input - Lisp 中的读取函数不提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27738919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com