小编lis*_*ons的帖子

lisp:何时使用函数与宏

在我不断学习 lisp 的过程中,我遇到了一个概念问题。这有点类似于这里的问题,但也许在主题上适合说我的问题是一个抽象级别。

通常,什么时候应该创建宏而不是函数?在我看来,也许天真地,很少有情况需要创建宏而不是函数,并且在大多数剩余情况下,函数通常就足够了。在这些其余情况中,宏的主要附加价值似乎是语法的清晰度。如果是这样的话,那么对于个体程序员来说,似乎不仅是选择使用宏的决定,而且其结构的设计也可能从根本上是特殊的。

这是错误的吗?是否有一般情况概述何时使用宏而不是函数?我说的对吗,语言需要宏的情况通常很少?最后,是否存在宏所期望的通用语法形式,或者它们通常被程序员用作简写?

lisp macros common-lisp

5
推荐指数
1
解决办法
1627
查看次数

LISP:如何跟踪宏

这可能是一个愚蠢的问题,但我正在浏览 PG lisp 书,我想逐步了解他提供的一些带有实际值的示例宏,例如:

(defmacro our-let (binds &body body) 
    `(
        (lambda ,(
                mapcar #'(lambda (x) (if (consp x) (car x) x)) binds
            )
                ,@body
        )
        ,@(mapcar #'(lambda (x) (if (consp x) (cadr x) nil)) binds)
    )
)
Run Code Online (Sandbox Code Playgroud)

我天真地尝试运行(trace our-let),然后(our-let ((x 1) (y 2)) (+ x y))我收到一个错误,can't use encapsulation to trace anonymous function #<FUNCTION (MACRO-FUNCTION OUR-LET) {22675BBB}>. 也不确定如何最好地将print语句放入 lambda 表达式中。调试此宏/输出如何处理输入的最佳方法是什么?

编辑(1):我的 格式不正确macroexpand,但有效。

lisp macros common-lisp

4
推荐指数
1
解决办法
468
查看次数

节点:安装后将 create-react-app 模板中的文件移动到根目录

我对这个问题有一个不同的版本:

我正在构建一个同时使用 Electron 和 Redux 的create-react-app 模板。

我想/src/config在安装后将 webpack 和 babel 的配置文件从目录移动到根目录。但是,添加"postinstall": "cp /src/config ."到我的package.json文件不起作用。看起来该文件并不是template.json添加安装后脚本的正确位置,但由于某种原因,可能是由于模板系统管理内部文件结构的方式(?)该脚本在安装后运行但失败。我的配置文件位于/template/src/config我发布的包中。

编辑:如果我将安装后脚本更改为,它看起来会运行,"cp template/src/config/* ."但它不会复制任何文件。

npm reactjs

4
推荐指数
1
解决办法
2681
查看次数

Julia:为什么这个函数会返回一个值?

Julia 新手,浏览手册并在方法下找到此示例:

julia> mytypeof(x::T) where {T} = T
mytypeof (generic function with 1 method)
Run Code Online (Sandbox Code Playgroud)

当您使用 的值调用此方法时x,它会返回类型:

julia> mytypeof(1)
Int64

julia> mytypeof(1.0)
Float64
Run Code Online (Sandbox Code Playgroud)

我的问题是:为什么这会返回一个值?换句话说,隐含的返回值在哪里?

julia

4
推荐指数
2
解决办法
107
查看次数

Lisp:将向量分块

这里所提到的,我试图通过实现lodash来自学口齿不清。

我基本上没有关于Lisp的经验,所以对js来说微不足道的工作对我来说是陌生的。

例如,我正在研究一种_.chunk方法的实现,该方法在js中采用一个数组和一个size变量,并按大小“分块”该数组:

_.chunk(['a', 'b', 'c', 'd'], 2);
// => [['a', 'b'], ['c', 'd']]

_.chunk(['a', 'b', 'c', 'd'], 3);
// => [['a', 'b', 'c'], ['d']] 
Run Code Online (Sandbox Code Playgroud)

作为对通用Lisp数据类型完全陌生的人,我认为类似类型将是向量,而不是数组,对吗?

其次,我在算法上解决此问题的方法是保留一个length变量和一个pointer变量,并获取数组/向量的一个子集,[指针+大小的指针],而指针+大小为<长度,然后返回[指向长度的指针],当它不再为真时,否则增加指向指针+大小+ 1的指针。

不知道如何在Lisp中实现它,到目前为止,这是我的代码。

(defun _.chunk (vector &optional (size 1 size-p))
   (if (or (not size-p) (eq size 1)) 
        vector
        ((let   (                    
                    (array_length (array-total-size array))
                    (pointer)
                )
            ???
        ))      
    )  
)
Run Code Online (Sandbox Code Playgroud)

lisp common-lisp

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

lisp:if语句的格式正确

作为自己学习普通口语的一项任务,我正在尝试重新创建lodash

在重新创建的过程中_.chunk,我编写了以下代码来测试可选参数

(defun _.chunk (array &optional size)
    (if (size)
        (write ("there") )
        (write ("not") )
    ) 
)  
Run Code Online (Sandbox Code Playgroud)

设置(setf x #('a 'b 'c 'd))然后运行(_.chunk x),出现错误:

; caught ERROR:
;   illegal function call

;     (SB-INT:NAMED-LAMBDA _.CHUNK
;         (ARRAY &OPTIONAL SIZE)
;       (BLOCK _.CHUNK
;         (IF (SIZE)
;             (WRITE ("there"))
;             (WRITE ("not"))))) 
Run Code Online (Sandbox Code Playgroud)

测试可选功能参数的正确方法是什么?

lisp common-lisp

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

标签 统计

common-lisp ×4

lisp ×4

macros ×2

julia ×1

npm ×1

reactjs ×1