标签: guile

是否可以只打印传递给Scheme宏的字符串?

我正在研究一个guile方案中的语言翻译器,并且需要处理基本情况,你试图转换单个单词.

(define var 5)
(translate var)
Run Code Online (Sandbox Code Playgroud)

这应该返回字符串var而不是数字5.
如何使用R5RS Scheme宏(define-syntax样式)执行此操作?

编辑:
我正在从Scheme转换为Coffeescript.

macros scheme guile r5rs

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

计划r7rs-大有趣,但......它还在进行中吗?

我试图看一下r7rs的状态,但我在计划报告页面等中找不到任何信息,只是2013年的一次演讲.我搜索谷歌也没有成功.

  • 还活着吗?
  • 我在哪里可以找到信息?
  • 暂定日期是什么?
  • 目前进展如何?

谢谢.

scheme guile report r7rs

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

从文件中读取一行

我试图弄清楚如何使用狡猾的方案从文件中读取一行。

当我要求它“读取端口”或“读取字符端口”时,它成功读取。

guile -c '(let ((port (open-input-file "foo.txt"))) (display (read port)) (newline) (close-port port))'
Run Code Online (Sandbox Code Playgroud)

但是,当我要求它读取行时,它失败了。

guile -c '(let ((port (open-input-file "foo.txt"))) (display (read-line port)) (newline) (close-port port))'
Run Code Online (Sandbox Code Playgroud)

有谁知道我做错了什么?我当前位于 foo.txt 所在的目录中。

guile

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

如何读取加载到 guile 变量中的文件?

我对 guile 和 schema 很陌生,我现在想做的是获取一个 schema 文件(file.scm)并将其加载到一个变量中,这样我就能够解析它,但我很难找到如何随时随地执行此操作。

我现在拥有的是

(define var (load "file.scm")) ; loads file scheme
Run Code Online (Sandbox Code Playgroud)

但我不确定如何开始阅读这些台词。

scheme guile

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

在方案中定义 goto

作为学习 call/cc 和宏的练习,我尝试定义 goto。

(define-syntax label
  (syntax-rules ()
           ((_ name)
        (begin
          (define name)
          (call/cc (lambda (c) (set! name c)))))))

(define (goto label) (label))

(define i 0)
(label start)
(display i) (newline)
(set! i (+ i 1))
(if (< i 3) (goto start))
(display "done") (newline)
Run Code Online (Sandbox Code Playgroud)

它适用于 guile-2.0,但在 chez 方案和球拍(r6rs)中它只打印

0
done
Run Code Online (Sandbox Code Playgroud)

哪个实现是正确的?

macros scheme guile racket chez-scheme

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

这个方案错误告诉我什么?

存在称为meep的电磁模拟器,其以诡计解释器的形式提供作为前端.模拟器由一堆方案宏组成.

我试图找出以下错误的含义.代码来自教程.当我在一个过程中包装教程时,我得到一个运行时错误,我不确定解释器(guile)告诉我什么.

不工作的代码

(define diffthick
  (lambda (n) ; n doesn nothing
    (
     (set! geometry-lattice (make lattice (size 16 8 no-size)))
     (set! geometry (list
                      (make block (center 0 0) (size infinity 1 infinity)
                            (material (make dielectric (epsilon 12))))))
     (set! sources (list
                     (make source
                           (src (make continuous-src (frequency 0.15)))
                           (component Ez)
                           (center -7 0))))
     (set! pml-layers (list (make pml (thickness 1.0))))
     (set! resolution 10)
     (run-until 200
                (at-beginning output-epsilon)
                (at-end output-efield-z))
     )
    )
  )
(diffthick 3)
Run Code Online (Sandbox Code Playgroud)

工作守则(无程序)

(set! geometry-lattice (make lattice (size 16 …
Run Code Online (Sandbox Code Playgroud)

scheme guile meep

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

检测Scheme列表中的#<unspecified>

我有一个返回值列表的函数.其中一些值可能是空列表本身,而有些则不是.但是,在每个列表的末尾,都存在一个#<unspecified>值.我知道当函数没有返回任何内容时会返回此值.

我想修剪此值以及其他空列表.

我的清单是这样的:
(() () MD- MC+. #<unspecified>)

我打算将过滤功能应用于此列表.我将要应用的标准是null?.
但是,当这个应用于该#<unspecified>值时,它会给我错误.如何#<unspecified>从列表中删除值?

应用过滤函数后,此列表的输出应为: (MD- MC+)

我该怎么做呢?

scheme guile

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

方案中的''quote`和''lambda`的奇怪比较(guile)

让我看看我的代码

代码1:

(eqv? 'lambda 'quote)
Run Code Online (Sandbox Code Playgroud)

返回 #f

代码2:

(case 'lambda ('quote "equal") (else "not equal"))
Run Code Online (Sandbox Code Playgroud)

返回"not equal"但生成警告;;; <stdin>:17:0: warning: duplicate datum quote in clause ((quote quote) "equal") of case expression (case (quote lambda) ((quote quote) "equal") (else "not equal"))

Code3:奇怪的结果

 (case 'quote ('lambda "equal"))
Run Code Online (Sandbox Code Playgroud)

返回"equal",没有警告

我使用了解释代码guile (GNU Guile) 2.0.11.以下是gnucase语法的描述

使用eqv将评估结果与所有基准进行比较?

scheme guile switch-statement quote

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

检查符号是否绑定

在 Emacs Lisp 中,如果绑定到某个值,则(boundp 'symbol)返回,否则返回。Guile Scheme 中是否有等效的程序?tsymbolnil

guile

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

更改 REPL 以显示用户名、主机名和当前工作目录?

在 Guile 的 REPL 中,提示是scheme@(guile-user)>,但我希望它显示my-name@hostname(current-working-directory)>. 有没有办法做到这一点?

scheme gnu guile

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

计划在 guile 中获取最后一个命令

通常在终端(或我以前使用过的任何其他命令提示符)中,我会按向上键来获取最后输入的命令。然而,当在guile解释器中这样做时,我只是得到:

scheme@(guile-user) [1]> ^[[A
Run Code Online (Sandbox Code Playgroud)

获取 guile 中最后输入的命令的最简单方法是什么?

lisp scheme guile

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

guile或scheme中的define*是什么?

搜了也没找到,有什么define*诡计吗?例如,您可以在此答案中找到它/sf/answers/1687118961/

scheme guile function

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

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
查看次数

标签 统计

guile ×13

scheme ×11

macros ×3

lisp ×2

chez-scheme ×1

common-lisp ×1

function ×1

gnu ×1

meep ×1

quote ×1

r5rs ×1

r7rs ×1

racket ×1

report ×1

switch-statement ×1