2.newLISP脚本操作(newLISP 代码模式 v.10.6.2)

命令行参数

在 Linux/Unix系统下, 将下面的代码写在脚本文件的第一行:

`#!/usr/bin/newlisp`

指定一个更大的堆栈:

`#!/usr/bin/newlisp -s 100000`

或者

`#!/usr/bin/newlisp -s100000`

不同系统的Shell在解析第一行和提取参数的处理方式是不一样的。newLISP可以处理联合和分开两种参数传递方式(如上).下面这段简单的代码可以用来测试各种系统的参数处理方式. 脚本将堆栈设置成100,000 ,内存最大占用量限制在10M以内.

```

#!/usr/bin/newlisp -s 100000 -m 10

(println (main-args))

(println (sys-info))

(exit) ; important

```

下面是某个系统的输出数据:

```

./arg-test

("/usr/bin/newlisp" "-s" "100000" "-m" "10" "./arg-test")

(308 655360 299 2 0 100000 8410 2)

```

记住只有少数newLISP程序需要修改更大的堆栈参数; 大部分情况下默认的2048已经够用了. 每个堆栈平均消耗80个字节. 其余的newLISP参数选项,爬手册去吧。

管道交互

下面代码展示了如何将一个文件通过管道输入到newLISP 脚本中.

```

#!/usr/bin/newlisp

#

# uppercase - demo filter script as pipe

#

# usage:

#          ./uppercase < file-spec

#

# example:

#          ./uppercase < my-text

#

#

​   

(while (read-line) (println (upper-case (current-line))))

​   

(exit)

```

文件内容将会被转换成大写然后打印到标准输出 (std-out).

下面的代码能够处理非文本的二进制文件(包含了0字符):

```

#!/usr/bin/newlisp

;

; inout - demo binary pipe

;

; read from stdin into buffer

; then write to stdout

;

; usage: ./inout < inputfile > outputfile

;

(while (read 0 buffer 1024)

    (write 1 buffer 1024))

(exit)

```

将缓冲区大小设置到最高效的尺寸.

文件过滤

下面的脚本类似Unix下的 grep , 遍历每一个文件,并用正则表达式过滤文件中的每一行.

```

#!/usr/bin/newlisp

#

# nlgrep - grep utility on newLISP

#

# usage:

#          ./nlgrep "regex-pattern" file-spec

#

# file spec can contain globbing characters

#

# example:

#          ./nlgrep "this|that" *.c

#

# will print all lines containing 'this' or 'that' in *.c files

#

​   

(dolist (fname (3 (main-args)))

    (set 'file (open fname "read"))

    (println "file ---> " fname)

    (while (read-line file)

        (if (find (main-args 2) (current-line) 0)

            (write-line)))

    (close file))

(exit)

```

表达式:

`(3 (main-args))`

相当于:

`(rest (rest (rest (main-args))))`

返回一个包含了所有文件的列表. 这种为rest指定索引的形式称为隐式索引. 隐式索引细节或其它用法参考用户手册. 表达式` (main-args 2)` 提取命令行的第三个参数作为正则表达式.

newLISP 作为管道

管道直接将每行简短的代码输入到newLISP中执行运算。

```

~> echo '(+ 1 2 3)' | newlisp

6

~>

```

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Python 面向对象Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对...
    顺毛阅读 9,700评论 4 16
  • //Clojure入门教程: Clojure – Functional Programming for the J...
    葡萄喃喃呓语阅读 9,247评论 0 7
  • 1. Python的hello-world: print ("Hello, Python!")、 完了 摇就完事儿...
    LunarShade阅读 5,636评论 0 0
  • 嘉宾:已经两年呢。 记者:已经两年了? 嘉宾:对咱们一共多少时间呢? 记者:80差不多,你那个来上海领科两年了,那...
    44229阅读 4,062评论 0 0
  • 什么决定你的自我驱动力 一、为什么十几年我们仍然没有学好外语? 用英语对绝大多数人来说,根本就不是刚需。 二、为什...
    青青wh阅读 3,332评论 0 0

友情链接更多精彩内容