对于一个类(class)项目,我必须用 lisp 编写一个程序。
程序应该包含最重要的 lisp 函数、它们的输入和输出参数以及可能的可选参数。
例如:函数 - 第一个、输入 - 列表、输出 - 对象(列表的第一个成员)。
该程序应该以两种不同的方式工作:
您为程序指定一个函数的名称,它应该返回函数参数。
您输入函数参数,如果存在具有这些参数的函数,则应返回该函数的名称。
我的问题:
在 Lisp 中处理此类任务的正确方法是什么?我想也许一棵树可以解决这个问题? (制作一个包含所有函数和参数的树,然后编写一个处理它的程序)。
有没有人有比这更好的想法来完成这项任务?或者一些建议从哪里/如何开始?或者包含任何信息的教程?
目前我有点不知道如何开始。如果您能提供任何帮助,我们将不胜感激。
英语不是我的母语,所以我希望一切都能理解。
问候。
最佳答案
首先,准备好您的 Common Lisp 开发环境。之后我认为你应该调查:
使用 defun 创建函数,
诸如此类的事情。之后看一下两个常见的 Lisp 函数:
这是一个小例子:
CL-USER> (defun my-sum (a b) "Add my-sum parameters A and B." (+ a b))
MY-SUM
CL-USER> (my-sum 2 3)
5 (3 bits, #x5, #o5, #b101)
CL-USER> (describe #'my-sum)
#<FUNCTION MY-SUM>
[compiled function]
Lambda-list: (A B)
Derived type: (FUNCTION (T T) (VALUES NUMBER &OPTIONAL))
Documentation:
Add my-sum parameters A and B.
Source form:
(SB-INT:NAMED-LAMBDA MY-SUM
(A B)
"Add my-sum parameters A and B."
(BLOCK MY-SUM (+ A B)))
; No values
CL-USER> (documentation 'my-sum 'function)
"Add my-sum parameters A and B."
CL-USER> (defun my-sum (a b) "Add my-sum parameters A and B." (declare (type fixnum a b)) (+ a b))
WARNING: redefining COMMON-LISP-USER::MY-SUM in DEFUN
MY-SUM
CL-USER> (describe #'my-sum)
#<FUNCTION MY-SUM>
[compiled function]
Lambda-list: (A B)
Derived type: (FUNCTION (FIXNUM FIXNUM)
(VALUES
(INTEGER -9223372036854775808 9223372036854775806)
&OPTIONAL))
Documentation:
Add my-sum parameters A and B.
Source form:
(SB-INT:NAMED-LAMBDA MY-SUM
(A B)
"Add my-sum parameters A and B."
(DECLARE (TYPE FIXNUM A B))
(BLOCK MY-SUM (+ A B)))
; No values
最后,最后一个技巧是使用描述输出中的字符串:
CL-USER> (with-output-to-string (*standard-output*)
(describe #'my-sum))
"#<FUNCTION MY-SUM>
[compiled function]
Lambda-list: (A B)
Derived type: (FUNCTION (FIXNUM FIXNUM)
(VALUES
(INTEGER -9223372036854775808 9223372036854775806)
&OPTIONAL))
Documentation:
Add my-sum parameters A and B.
Source form:
(SB-INT:NAMED-LAMBDA MY-SUM
(A B)
\"Add my-sum parameters A and B.\"
(DECLARE (TYPE FIXNUM A B))
(BLOCK MY-SUM (+ A B)))
"
关于function - LISP - 通过参数搜索特定函数的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55158158/