我已经在普通的lisp中编程了一段时间,在我使用lisp的经验中,我还没有看到任何与C或C++中的函数原型相似的函数/宏.
目前我必须非常小心我的函数的顺序,否则,当我尝试从另一个函数调用函数时,Lisp说函数"不存在",因为它在文件的后面定义.有办法解决这个问题吗?我可以在文件顶部声明我的所有函数原型,以及下面的完整定义吗?
我最近一直在使用Common Lisp中的哈希表.我一直在想如何制作一个包含与第一个相同的值的哈希表的单独副本.有正式的方法吗?如果没有,你能用maphash给我一个例子吗?
就在最近我一直在玩lisp,我正在尝试创建一个通用的本地数据库,我正在关注另一个涵盖大多数此类项目的教程,但是我决定要添加一个"简单" "功能.
我正在尝试以自定义格式生成时间戳,并将它们保存为字符串.我正在尝试将格式生成的字符串存储到使用defvar声明的变量中,方法是将变量作为第一个参数调用format,但不是保存完整输出,而是获取月份的日期.这是我的代码:
(defun date ()
(setq *SUPPRESS-SIMILAR-CONSTANT-REDEFINITION-WARNING* 1)
(defconstant *day-names*
'("Monday" "Tuesday" "Wednesday" "Thursday" "Friday" "Saturday" "Sunday"))
*DAY-NAMES*
(multiple-value-bind
(second minute hour date month year day-of-week dst-p tz)
(get-decoded-time)
(defvar datetime)
(format datetime "~2,'0d:~2,'0d:~2,'0d ~a ~d/~2,'0d/~d (GMT~@d)"
hour
minute
second
(nth day-of-week *day-names*)
month
date
year
(- tz)
(return-from date datetime))))
(defun make-entry (category subject idea info researched)
(defvar date (date))
(list :category category :subject subject :date date :idea idea :info info :researched …
Run Code Online (Sandbox Code Playgroud) 我创建了一个函数来从嵌套列表中随机选择一个"位",例如,((1 0 0 1) (1 1 1 1) (0 1 0 1))
然后翻转它.如果是一个,则将其设为零,反之亦然.该函数运行良好,但我发现尽管我复制了它,它仍会改变原始参数.这是函数,最后两个写入演示了这个问题.如果我((1 1 1 1))
转到这个,我希望看到这个原始值打印,(write DNA-seq)
但原来是修改,所以(write DNA-seq)
并(write CDNA-seq)
打印相同的东西.
(defun rand-mutate (DNA-seq)
(let ((CDNA-seq (copy-list DNA-seq)))
(let ((gene (random-range 0 (length CDNA-seq))))
(let ((base (random-range 0 (length (nth gene CDNA-seq)))))
(cond ((= (nth base (nth gene CDNA-seq)) 0) (setf (nth base (nth gene CDNA-seq)) 1))
(t (setf (nth base (nth gene CDNA-seq)) 0))) (write DNA-seq)(write CDNA-seq)))))
Run Code Online (Sandbox Code Playgroud)