标签: lisp

学习什么Scheme vs Lisp

方案与 Lisp ? 要学什么,我需要函数式编程语言。

lisp scheme clisp common-lisp

0
推荐指数
1
解决办法
5044
查看次数

简单计划第 09 章。Lambda。还有更多的 Lambda 练习吗?

问候,

阅读Simply Scheme Chapter 09 就我所见,Lambda 似乎很重要。我想把它练到骨子里,所以我正在寻找针对lambda 的Project Euler 的初学者练习(最好是非递归的)。让包容是奖金。有资源吗?

在网上,我找到了这个和对Simply Scheme 的引用。我知道有好书,但我真的只是在寻找练习。

非常感谢。

lisp lambda scheme functional-programming

0
推荐指数
1
解决办法
179
查看次数

How to define recursive cond macro with if form in lisp?

I want to implement cond (using lisp macros in guile) with if, this my attempt:

(define-macro (cond . clauses)
  (if (pair? clauses)
      (let ((first (car clauses)) (rest (cdr clauses)))
         `(if ,(car first)
              (begin
                 ,@(cdr first))
              ,(if (equal? (caar rest) 'else)
                  ',(cadr rest)
                   `(cond ,rest))))))
Run Code Online (Sandbox Code Playgroud)

but it don't work, when I call it with this code:

(cond ((= 1 0) (display "hello"))
      ((= 1 1) (display "world"))
      (else
        (display "foo")))
Run Code Online (Sandbox Code Playgroud)

I got this error:

ERROR: In procedure car: Wrong type argument …
Run Code Online (Sandbox Code Playgroud)

lisp macros scheme guile common-lisp

0
推荐指数
1
解决办法
969
查看次数

Lisp,指令在 defun 中不起作用

我正在尝试制作一个将中缀输入更改为前缀的函数,例如:(x + 1)作为输入输出为(+ x 1).

所以这是我目前的代码:

(setq x '(Y + 1))
(if (listp x ) (list (second x) (first x) (first (last x))) x)
Run Code Online (Sandbox Code Playgroud)

所以(+ Y 1)如果我输入一个列表它会返回,如果它不是一个列表则返回用户输入。

但是,问题是我无法在函数中使用此代码:

(defun prefixToInfix (x)(
   (if (listp x ) (list (second x) (first x) (first (last x))) x)
   )
 )
Run Code Online (Sandbox Code Playgroud)

该函数确实已创建,但是当我调用它时

(prefixtoinfix '(Y + 1))
Run Code Online (Sandbox Code Playgroud)

我收到一个错误

Error: Illegal function object: (IF (LISTP X) (LIST # # #) X).
[condition type: TYPE-ERROR]
Run Code Online (Sandbox Code Playgroud)

我不知道为什么我的 if 语句在主程序中有效,但当我从我的函数中运行它时却没有。

lisp common-lisp syntax-error

0
推荐指数
1
解决办法
369
查看次数

为什么我的函数在 lisp 中返回多个没有 values 关键字的值

我想问一下为什么我的函数不需要使用 values 函数来输出嵌套列表?

(defun p2 (l)
(cond
 ((null l) nil)
 ((listp (car l)) ( values (p2 (car l)) (p2 (cdr l))) )
 (t (princ (car l)) (princ " ") (p2 (cdr l)))
 ))
Run Code Online (Sandbox Code Playgroud)

我的意思是,cond如果条件为真,构造是否不返回 1 个值或执行 1 个操作?
为什么这样做?

lisp return function common-lisp

0
推荐指数
1
解决办法
160
查看次数

阐明Perlis格言,“ LISP程序员知道一切的价值,而一无所获。”

我一直在思考玻璃市的格言,

LISP程序员知道一切的价值,却一无所获。

我可以找到一些提示和简短的解释,但对于引号的真正含义却无法获得清晰,有见地的解释,尤其是对于Lisp程序员而言。

您能先描述简单的单词,CS初学者容易理解的内容,再解释更多技术方面的内容,再通过描述代码所暗示的相关结构,操作或情况(可能使用代码或伪代码示例)来解释Perlis的命令吗?

lisp

0
推荐指数
1
解决办法
84
查看次数

使用递归时如何计算一个列表(或嵌套列表的列表)中的所有原子

我正在创建一个递归函数,用于计算列表中的原子数。它应该能够计算嵌套列表的原子数。例如:(a(bc)ed)或(a(bc(ge))ed),应分别计算b和c或分别计算b,c,e和d而不是整体。

这是我创建的功能:

(defun  count-atoms (mylist)
    (cond
    ((null mylist) 0)
    ((listp (car mylist)) (count-atoms (car mylist)))
    ((atom (car mylist)) (+ 1 (count-atoms (rest mylist))))
    )
)
Run Code Online (Sandbox Code Playgroud)

我得到的输出是3,但应该是5(基于(a(bc)ed))。我猜想函数到达c时就停止了。如何使函数不止于c并返回最外层列表。

lisp recursion common-lisp

0
推荐指数
1
解决办法
70
查看次数

在Lisp代码中修复此未定义功能?

我迷失了评估这段代码以查找错误的念头。我不确定为什么会得到未定义的函数。有人可以指导我理解原因吗?谢谢!

O应该是一个对象,L应该是一个列表。我正在尝试将O附加到列表的末尾并返回列表

(defun my_attach(O L)
    (cond ((eq L nil )
        O )
        (t (cons (car L) (my-attach O (cdr L)) )
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

lisp syntax recursion common-lisp cons

0
推荐指数
1
解决办法
47
查看次数

函数引发错误“应用:给 + 的参数列表是虚线”

我目前正在尝试编写一个函数,以十进制返回列表的平均值。

(defun calc-list-average (lst)
    (float (/ (apply '+ lst) (length lst))))
Run Code Online (Sandbox Code Playgroud)

当我像这样调用函数时,一切正常:

(defvar *a-lst* '(5 6 1 3 6 7))
(princ (calc-list-average *a-lst*))
Run Code Online (Sandbox Code Playgroud)


但是,当我尝试使用动态生成的列表调用该函数时,我收到错误“给 + 的参数列表被打点(由 WUERFEL-ERGEBNIS 终止)”

(let ((wuerfel-seiten 6) (wuerfel-ergebnis ()))
    (loop
        (let ((menu-option (get-option)))
            (cond ((eql menu-option 1)
                    (princ "Bitte geben Sie die Anzahl der Wuerfelseiten ein: ")
                    (setq wuerfel-seiten (read)))
                  ((eql menu-option 2)
                    (princ "Bitte geben Sie die Anzahl der Wuerfelwuerfe ein: ")
                    (let ((wuerfel-wuerfe (read)))
                        (setq wuerfel-ergebnis (get-random-list wuerfel-seiten wuerfel-wuerfe))))
                  ((eql menu-option 3)
                    (write-line "Wuerfelauswertung") …
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp

0
推荐指数
1
解决办法
159
查看次数

Common Lisp 宏宏扩展时间参数输入

在下面的函数中,我用 mac-1 替换了宏,它只返回它工作的参数的值,但 mac-2 抛出一个类型错误。有人可以解释会发生什么并导致此错误吗?为什么 x 从 fun-2 传递给 mac-2 是文字符号x而不是整数?

(defmacro mac-1 (x) x)
(defun fun-1 (x) (mac-1 x))
(fun-1 3)               ; => 3

(defmacro mac-2 (x) (+ x 3))
(defun fun-2 (x) (mac-2 x))
(fun-2 3)
Run Code Online (Sandbox Code Playgroud)

执行编译有错误的表单。形式:(MAC-2 X) 编译时错误:在 (MAC-2 X) 的宏扩展期间。使用BREAK-ON-SIGNALS进行拦截。

绑定 SB-KERNEL::X 时,值 X 不是 NUMBER 类型

lisp macros common-lisp

0
推荐指数
2
解决办法
246
查看次数