lisp - 谁能给我一些关于这个问题(家谱)的提示?

标签 lisp common-lisp clisp

它来 self 的家庭作业。有家谱

                             a  +  b
                         /   |    |   \ 
                        c+u  d+c  e+w  f
                     / | \        / \
                 m+x  n+y  o      p  q
                  |
                  r

a和b是最旧的。每个已婚人士的第二个人都不是原始家庭的一部分。 现在我需要编写配偶、 sibling 、子女、孙子女、 parent 和祖 parent 函数。

我写的 list 如下: ( (爸爸妈妈) chlid1 child2 child3)

(((a b) c d e f) ((c u) m n o) ((d v) nil) ((e w) p q) (f nil) ((m x) r) ((n y) nil) (o nil) (p nil) (q nil)  )

我的兄弟函数有一些问题,这是我的代码。

(defun sibling  (arglst lst)  
 (cond
        ((eql 
             arglst (cdr (car lst))) 
                 (rest (cdr lst))
         )
   (T (sibling (rest lst) arglst))

)

我知道这是错误的,但我不知道如何修改它..我还需要一些其他功能的帮助。希望能从你们那里得到一些提示。

最佳答案

由于这是作业,我不会给出完整的解决方案,但这应该足以让您解决其余的问题:

(defparameter *family* '(((a b) c d e f)
                         ((c u) m n o)
                         ((d v) nil)
                         ((e w) p q)
                         (f nil)
                         ((m x) r)
                         ((n y) nil)
                         (o nil)
                         (p nil)
                         (q nil)))

(defun siblings (person family)
  "Return a list of PERSON's siblings."
  (remove person (cdr (find person family :key #'cdr :test #'member))))

(defun siblingsp (person1 person2 family)
  "Are PERSON1 and PERSON2 siblings?"
  (find person2 (siblings person1 family)))

(defun parents (person family)
  "Return a list of PERSON's parents."
  (car (find person family :key #'cdr :test #'member)))

(defun parentp (parent child family)
  "Is PARENT a parent of CHILD?"
  (find parent (parents child family)))

试一试:

CL-USER> (siblings 'p *family*)
(Q)
CL-USER> (siblingsp 'q 'p *family*)
P
CL-USER> (parents 'p *family*)
(E W)

现在,例如要查找祖 parent ,您只需了解祖 parent 是什么:​​(列表) parent 双方的 parent 。然后,问问自己这对孙子们来说怎么样。最后,鉴于此示例,spouse 函数应该相当简单。

关于lisp - 谁能给我一些关于这个问题(家谱)的提示?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7424010/

相关文章:

emacs - 如何在 smartparens 中更改 sp-navigate-reindent-after-up 的值

lisp - 实习生制作的符号

macros - 可以使用 destructuring-bind 定义 destructuring-setq 吗?

sockets - 在Lisp中获取已连接客户端的IP地址

lisp - 在 CLISP 中可以使用哪个命令来清除屏幕?

arrays - 在lisp中打印第i行第j列值

在 Racket 中绘制 3D 图形

lisp - 使用 Define 的 Scheme 中的 Y Combinator

lisp - Common lisp 从函数推送

lisp - 如何使用函数(或闭包)对象设置局部函数定义?