小编sta*_*93m的帖子

如何编写自己的"列表?" 计划程序

我想写自己的'清单?' 计划中的谓词.我知道列表的定义:1.空列表2.对,其cdr是一对

我知道我的代码是错误的,因为它在每对上返回true值,但每对都不是列表.我不知道如何实现列表的cdr也必须是一对的条件.

(define (my-list? x)
  (if (equal? x ()) #t
      (pair? x)))
Run Code Online (Sandbox Code Playgroud)

scheme procedure list

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

使用let重写表达式

我一直在教方案语言,在我的教科书中,我按下了以下表达式。我的问题是为什么要对数字“ 10”进行评估?有人可以向我解释吗?意思是创建什么本地环境以及创建到符号的绑定。我也知道每个lambda表达式都可以使用重写let。任何想法如何做到这一点?我将不胜感激任何帮助。

(let ((x 10)) 
  (define y (lambda (x) x)) 
  (define x 5) 
  (+ x (y x)))
Run Code Online (Sandbox Code Playgroud)

lambda scheme let racket

2
推荐指数
1
解决办法
91
查看次数

利用Lisp中的两个名称空间编写测试功能

我开始学习Lisp,并使用Lispworks个人版6.1.1,在评估基本功能时遇到了问题。我能够在Scheme中正确设置它们,但是当我尝试在Lisp中评估它们时它们却无法正常工作。

我在Lisp中知道每个符号都有两个命名空间。因此,我尝试编写用于组成两个过程的简单过程。它在Scheme中运行良好,但是在Lisp中存在评估问题。

方案中的代码可以正常工作并返回2

(define (comp a b)
  (lambda (x)
    (a (b x))))

(define test (comp car cdr))
(test '(1 2 3))
Run Code Online (Sandbox Code Playgroud)

用Lisp重写相同的代码

(defun comp (a b)
  (lambda (x)
    (funcall a (funcall b x))))

(defun test (comp #'car #'cdr))

(funcall test '(1 2 3))
Run Code Online (Sandbox Code Playgroud)

lispworks中的错误是:

试图绑定非符号,(FUNCTION CAR)

所以当我尝试(defun test (comp #'car #'cdr))在听众中评估时,我得到

非符号(FUNCTION CAR)在function中用作变量名TEST

我不明白为什么它不能这样写。我会很感激

lisp scheme common-lisp funcall

1
推荐指数
2
解决办法
81
查看次数

标签 统计

scheme ×3

common-lisp ×1

funcall ×1

lambda ×1

let ×1

lisp ×1

list ×1

procedure ×1

racket ×1