function - LISP - 通过参数搜索特定函数的程序

标签 function lisp common-lisp parameter-list

对于一个类(class)项目,我必须用 lisp 编写一个程序。

程序应该包含最重要的 lisp 函数、它们的输入和输出参数以及可能的可选参数。

例如:函数 - 第一个、输入 - 列表、输出 - 对象(列表的第一个成员)。

该程序应该以两种不同的方式工作:

  1. 您为程序指定一个函数的名称,它应该返回函数参数。

  2. 您输入函数参数,如果存在具有这些参数的函数,则应返回该函数的名称。

我的问题:

  1. 在 Lisp 中处理此类任务的正确方法是什么?我想也许一棵树可以解决这个问题? (制作一个包含所有函数和参数的树,然后编写一个处理它的程序)。

  2. 有没有人有比这更好的想法来完成这项任务?或者一些建议从哪里/如何开始?或者包含任何信息的教程?

目前我有点不知道如何开始。如果您能提供任何帮助,我们将不胜感激。

英语不是我的母语,所以我希望一切都能理解。

问候。

最佳答案

首先,准备好您的 Common Lisp 开发环境。之后我认为你应该调查:

诸如此类的事情。之后看一下两个常见的 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/

相关文章:

r - 将 data.frame 中的数字转换为 R 中的重要性星星

python - 将相同的参数传递给多个函数 - Python

list - 是否可以检查列表在方案中是否正确?

C++程序陷入循环

c - 如何在函数中编写多维数组?适合初学者的 C 编程

lisp - common-lisp 中更好的 pythonic `join`

LISP:为什么我不能在空列表上使用 cons?

common-lisp - 从循环列表中删除自引用

exception - AllegroServe 异常处理

scheme - 如何将函数复制到新符号?