小编seb*_*598的帖子

LISP:如何测试两个列表是否具有相同的元素?

我想编写一个函数,它将参数作为参数两个列表,并检查第一个元素中的每个元素是否包含在第二个元素中(元素的顺序无关紧要).该函数还将检查两个列表是否具有相同的长度(两个列表不能具有重复元素),因为如果不是,则该函数将返回nill/false.

例如:(ABCDEF)和(BEAFDC)具有相同的元素(nil)和(nil)具有相同的元素

(ABCDEF)和(ABCDEFG)没有相同的元素

问题是我只知道一些基本命令,我只能使用那些命令.这几乎是我所知道的所有命令:

CAR, CDR, LENGTH, NULL, MEMBER, NOT, AND, OR, NOT, MAPCAR, APPLY, DO, SETQ, LET
Run Code Online (Sandbox Code Playgroud)

到目前为止我编写了以下函数,但我不知道如何检查重复的成员,并且它对于我要检查的所有列表都不能正常工作:

(defun same-elem-p (lst1 lst2)
  (cond ((not (null lst1))
         (cond ((member (car lst1) lst2)
                (same-elem-p (cdr lst1) lst2))
               (t nil)))
        (t t))) 
Run Code Online (Sandbox Code Playgroud)

我希望我能够很好地解释这个问题.

lisp equality list

3
推荐指数
1
解决办法
6115
查看次数

LISP:如何从文件中读取内容并将其写入另一个文件?

我想编写一个函数,该函数将两个文件的名称作为参数,并将内容从第一个文件复制到第二个文件。

到目前为止,我编写了一个从文件中读取的函数:

(defun readFile (name)
 (let ((in (open name)))
  (format t "~a~%" (read-line in))
   (close in)))
Run Code Online (Sandbox Code Playgroud)

还有一个将字符串写入文件的函数:

(defun writeFile (name content)
(with-open-file (stream name
    :direction :output
    :if-exists :overwrite
    :if-does-not-exist :create)
(format stream content)))
Run Code Online (Sandbox Code Playgroud)

按照 Savantes 的说明,我再次编写了该函数,它的外观如下:

(defun read-write-to-file (input-file output-file)
(WITH-OPEN-FILE (output-stream output-file
         :direction :output
         :if-exists :new-version
         :if-does-not-exist :create)
  (WITH-OPEN-FILE (input-stream input-file
                 :direction :input)
        (FORMAT output-stream "~a" (READ input-stream nil 'eof))
)))
Run Code Online (Sandbox Code Playgroud)

现在唯一的问题是它没有读取整个文件。

lisp io file

3
推荐指数
1
解决办法
4957
查看次数

标签 统计

lisp ×2

equality ×1

file ×1

io ×1

list ×1