1

我想编写一个函数,它接受两个谓词函数列表和元素列表,并返回原始列表中包含 pre1_list 中所有谓词的所有成员,并删除原始列表中不包含 pre2_list 中所有谓词的成员

我正在用一种叫做 mini lisp 的语言编写这段代码,它类似于 lisp 但更简单,但这没关系,我只是想帮助你如何做这样的事情?如何实现这样的代码的想法!

我想怎么做:(只是我想法的开始)

(defun get_pred_1_not_2 (pre1_list pre2_list list)
  (cond
    ((null list) NIL)
      ; return all the members in the original list that hold all the predicates in pre1_list
    (pre1_list (get_pred_1_not_2 (cdr pre1_list) pre2_list (filter_pre list (car pre1_list))))
      ; delete all the members in the original list that unhold all the predicates in pre2_list
    (pre2_list (get_pred_1_not_2 pre1_list (cdr pre2_list) ;.... ( 

wherefilter_pre是一个函数,它返回列表中包含给它的谓词的所有元素

我希望有人能帮忙!因为这个函数真的很难写,我不想放弃谢谢

4

1 回答 1

0

不要尝试一次构建整个解决方案。而是继续为自己构建构建块,逐个函数地构建足够简单的任务,以便每个函数都易于编写。这就是“函数式编程”方法。

从一个谓词的简单filter函数开始。然后修改它以拥有您的filter-not.

然后使用它们来实现filter-psfilter-not-ps

all-ps或者,通过编写和all-ps-not函数将您的谓词列表变成一个谓词。

生成的谓词一次将与一个元素一起使用,因此您可以通过两次调用来简单地使用它filter来获得您想要的东西filter——首先将结果all-ps应用于您的第一个谓词列表;第二个将结果all-ps-not应用于您的第二个谓词列表。

编辑:如果您删除所有谓词“取消保留”即返回假的所有元素,则剩下的所有元素至少有一个谓词返回真。因此,对于任务的第二部分,您不妨说,您希望保留至少有一个谓词适用的所有元素。仍然适用相同的一般准则,只是不需要定义,而是all-ps-not需要定义at-least-one-of-ps,或者命名它some-ps

于 2022-01-01T05:23:51.210 回答