使用从Gimp.org下载的适用于MAC OS X的Gimp 2.6.6(在X11下)
我试图用脚本自动化一个枯燥的手工过程。我需要解析图像文件名,使用原始文件名上的后缀将各个层保存为新文件
我最初的尝试是这样的,但失败了,因为(字符串搜索…在2.6下似乎不可用(对脚本引擎的更改?)
然后我尝试使用regex解析出基本文件名,但是(re-match-nth…也无法识别
(if (re-match "^(.*)[.]([^.]+)$" filename buffer)
(set! base
我不明白这段代码是如何工作的:
(define m (list 1 2 3 '(5 8)))
(let ((l (cdr m)))
(set! l '(28 88))) ==>(1 2 3 (5 8))
(define o (list 1 2 3 '(5 8)))
(let ((l (cdr o)))
(set-car! l '(28 88))) ==> (1 (28 88) 3 (5 8))
为什么(set!l'(2888))不更新m?设置!不能改变一个列表(或任何其他结构,不
标签: Scheme
breadth-first-search
我正在考虑在scheme中实现bfs以解决8个难题,这是我到目前为止的代码(给出一些我无法调试的错误)::
;;定义结构的一些运算符
(定义blank“blank”)
(定义深度0)(定义路径成本0)
(定义nw 0)
(定义n1)
(定义ne 2)
(定义W3)
(定义C4)
(定义e 5)
(定义软件6)
(第7条)
(定义se 8)
(定义“左”和“左”)
(定义“权利”的权利)
(向上定义“向上”)
(定义down'down)
;;创建节点的函数
(定义make节点)
(lambda(状
我对scheme有点陌生,我正在尝试编写一个函数,它接受函数名和表达式,并将函数名绑定为表达式的第一个参数
即:
比如:
(bind-function-name '+ '(param 'a "First"))
将生成一个lambda,用于计算
(param '+ 'a "First")
到目前为止,我想到的最好的方法是:
(define (bind-function-name name cmd)
(let ((func (car cmd)) (args (cdr cmd)))
我正在尝试为调用编写一个模式匹配,如下所示:
(define let→λ&call
(match-lambda (`(let ((,<var> ,<val>) . (,<vars> ,<vals>)) ,<expr> . ,<exprs>)
`((λ ,<var> . ,<vars> . ,<expr> . ,<exprs>)
我试着从Haskell在Racket Scheme中写下我发现非常有用的splitOn。我最终得到了下面的结果,但效果不太好。我的意思是,它只是运行并吞噬我的记忆。“直到”和“直到”都起作用,那么在“拆分”中我到底做错了什么
我明白了。我没有放弃定界字符,让它永远循环
(define (split-on lst pred)
(cons (take-until lst pred) (if (not (null? (drop-until lst pred)))
那一定是这样的:
(if (= system-type 'gnu/linux)
(system "make"))
老实说,我认为我的方案实现在任何方面都做不到,但我可以自由地为它添加实现。平台检测的常用方案语法是什么
谢谢你我不能为任何其他方案发言,但Racket有一个程序叫做:
并具有uname函数,该函数将描述作为方案向量对象返回:
scheme@(guile-user)> (uname)
$2 = #("Linux" "gblaptop" "2.6.39-gentoo-r3
我不熟悉这个计划。这是麻省理工学院SICP课程的代码示例
(define (+ x y)
(if (= x 0)
y
(+ (-1+ x) (1+ y))))
如何将其转换为球拍代码?我想转换成Racket,因为我使用DrRacket运行代码,我喜欢这样。它一直工作到现在,但抱怨该计划的增量操作员
我得到的错误是:
定义值:无法更改常量变量:+
对未定义标识符的引用:-1+
要修复第二个错误,请将(-1+x)更改为(-x1),将(1+y)更改为(+y1)。应该可以
谁能简单地向我解释一下在scheme中消息传递是如何实现的?我想我对消息传递的整个概念有点不了解。看看SICP
闭包上下文中的消息传递
下面的示例定义了一个实现简单计算器的闭包。函数makecalculator类似于面向对象语言所称的构造函数。区别在于:makecalculator返回函数,而构造函数返回对象值。在面向对象语言中,对象值是第一类值。Scheme没有这样的值。对象第一类值提供访问对象成员变量和对象方法的功能。在Scheme中,必须通过调度函数的定义来模拟此功能生成计算器返回这样一
有没有人知道我如何将Supreme text 2与scheme结合使用。我听过ST2,想试试吗?现在我正在学习这个计划。我已经安装了scheme解释器-我可以到终端输入scheme并运行代码。我也可以在emacs中运行解释器,但emacs并不是很有趣。可能有点晚了,但我仍然想分享我的经验
现在我使用升华文本2和Scheme fine
首先通过包控制安装包
然后安装软件包(对于Sublime Text 2)
那么,您的Sublime中应该有一个功能齐全的Scheme环境!语法突出显示很好,并使用S
我被要求提供一个图像列表的数据定义。就这样。我很困惑。这对我来说似乎有点模糊。这到底是什么意思 以下是一个示例:
A list-of-numbers is
either empty
or (cons n lon),
where n is anumber and lon is a list-of-numbers.
上下文、环境/语言/图像类型是什么?与此有关系吗?
嗨,我想知道如何插入一个图像到一个窗口,但坐标
(define ventana (new frame%
[label "Ba"]
[width 1100]
[height 600]))
(define tablero-panel (new horizontal-panel%
(parent ventana)
我需要写一个基本的计划程序,可以找到一个列表的中位数和另一个平均值
这就是我到目前为止的想法:
意思是:
我知道我需要在某处划分长度,但不知道如何划分。我的思考过程是将每个元素添加到列表的堆栈中,然后除以列表的长度
中位数:
我不确定中位数从哪里开始。我知道我需要确定列表中的元素是奇数还是偶数,所以我想到了这个方法
(define (median lst)
(if (integer? (/ (length lst) 2) ;which is the one for even
我不知道我是
我是函数式编程的初学者,我希望能够将值从控制台读入列表,将该列表作为参数传递,然后在Scheme中返回列表的总和
我想得到这个结果:(显示(总和列表成员’(12345)),但用户必须在控制台输入这些值
这就是我正在做的:
(开始
(定义计数0)
(定义总和列表成员)
(兰姆达(lst)
(如果(空?lst)
0
(+(car lst)(总和列表成员(cdr lst()())))
(显示“输入整数[按-1退出]:”)
(新行)
(let循环((i0))
(定义n(读取))
(名单成员总数(名单n)
这是我的密码
#lang racket
(define a '())
(define (add l)
(set! a (cons (car l) a)))
结果如下
> (add '(1))
> a
'(1)
> (add '(2))
> a
'(2 1)
问题是我希望(add’(2))只显示(2)而不是(21),我不希望前面的结果。
我想要这样的结果:
> (add '(1))
> a
'(1)
> (add '(2))
> a
'(2)
我不熟悉该计划的语言。我正在读《简单方案》一书,遇到了下一个例子:
(cond (empty? 3)
(square 7)
(else 9))
当我运行它时,我得到了3。我知道每个cond表达式需要取2个参数:一个用于条件的“eval”,第二个是“answer”。评估在哪里?答案在哪里?为什么?编写cond表达式的正确方法如下所示:
(cond ((even? 3) 3)
((odd? 5) 5)
(else -1))
您可以看到,谓词表达式
这是我在计划中的第二个问题。假设我有两张清单
'("a" "b" "c")
'("e" "f" "g")
我想以这种方式将它们结合起来:
'(("a" "e") ("b" "f") ("c" "g"))
这可能吗?您可以使用。函数名为zip。当您将
在scheme中,如何访问列表中的某个函数并将变量传递给该函数
(define f
'((lambda (n) (+ n 2))
(lambda (n) (* n 2))
(lambda (n) (* n n))))
我已经定义了这个列表f,其中有3个不同的函数,我想知道我可以在scheme中输入什么,可以说将3传递给列表中的第二个函数
我原以为像((cadr f)3)这样的东西会起作用,但我似乎不明白,如果有任何帮助,我将不胜感激
在Scheme中编写一个函数,该函数接收student结构实例的二进制搜索树作为输入参数
,一个出生年份列表,并返回一个代码列表,该列表指示每年提供的出生日期
例如:
这是二叉树
(make-árbol-bin
(make-estudiante 5 "35889188" "Victor" (make-fecha 10 6 1991) "calle 67 con cra 20" "4444444") (make-
árbol-bin
(make-estudiante 2 "6457234
您好,我正在尝试找出如何在scheme中的if语句中定义变量。我不断地犯错误;无法在空语法环境中绑定名称:tmp
从我在网上读到的所有信息来看,我的语法是正确的。我不明白我怎么老是犯这个错误
这是我的密码:
(if (list? seq2)
(if (list? seq1)
(begin
(define tmp (car seq1))
(if (list? tmp)
#t
我目前正在学习这个计划,我遇到了一个例子问题。
将列表作为输入,将每个元素转换为数字的一位数,并按倒序排列列表。例如
(4201)=>1024,(399)=>993等
我已经有了基本结构:
(define dlnat-to-nat
(lambda (d)
(cond
((null? d) 0)
((not (list? d)) (error "No list given in parameters" d))
((append (car d) (if
标签: Scheme
typesettinglilypond
我想定义一个Lilypond函数,它将插值两个音符。该函数应作为输入:第一个音符、最后一个音符、音阶(半音),以及应使用平音还是锐音
例如:
\sequence a g 1 sharp
应创建彩色音阶:
a ais b c cis d dis e f fis g
同样地
\sequence f a -2 flat
应创建按整音降序的序列:
f ees des b a
有什么想法吗?你试过什么了吗?有计划代码吗?如果你不太确定从哪里开始,可能会有所帮助。
这是我制作的递归版本,但我真的很难让它迭代。我对两者的区别有相当好的理解。在递归中,它只加+1,当它到达末尾时,它将所有的1加在一起,而在iterativ中,它每一步都计算它。(如果我误解了,请随时告诉我。)
你们中有谁有什么想法如何使它迭代IV和一些提示,让我更好地了解它的计划
如果这是一个微不足道的问题,很抱歉,但我对这种语言和函数式编程相当陌生 您可以添加一个count变量,使其迭代并跟踪长度
(define (length2 item)
(if (null? item)
我已经编译了chez方案,并在OSX系统中安装了subgrame3 subgramerepl和scheme
和配置为主题
编辑SublimiteText3>>InstalledPackages>>Scheme.sublime-package(使用Zip软件打开)>>Scheme.sublime-build(修改为以下内容)
我可以在SubmiterePL中打开chez scheme解释器,但是当我想用“build System:scheme”构建文件时,我得到了错误“[Errno 2]没有这样的
我是编程界的新手。我正在使用ubuntu操作系统。我以书开始了我的旅程。我正在使用scheme repl。但突然间,我被困在这一部分
我无法使用scheme repl执行它的示例。我试着运行给定的部分示例,我得到一个错误,如下所示
1 ]=> (define wave2 (beside wave (flip-vert wave)))
;Unbound variable: wave
即使在书中,画家也是作为原始程序给出的。
当我运行它时,它也抛出了一个错误
1 ]=> painte
我正在做一个基本的端口扫描仪。
当我连接到已关闭的服务器时,我正在尝试打印“已关闭”
连接到打开的端口时,端口和“打开”
现在我正在这样做:
(condition-case (tcp-connect (list-ref host 0) port)
[(exn) (print "closed")]
['nil (print "open")]))
我的open在应该打印的时候打印不正确(使用netcat进行了测试)。
我如何理解条件情况是它匹配错误。我正在尝试处理无错误的情况,即连
我喜欢这样一个事实,即使用%后缀命名类是一种惯例,因为它有助于区分实例和高阶类
(define ingredient%
(class object%
(init-field name taste price color)
(super-new)))
(define (total-price ingredients)
(for/sum (ingredient ingredients)
;; here "ingredient" stands for the inst
创建返回过程显然是使用continuations可以创建的一个常见示例,如下例所示:
(define (find-multiple factor)
(let/cc return
(for ([num (shuffle (range 2000))])
(when (zero? (modulo num factor))
(return num)))))
(find-multiple 43)
(来自)
虽然我有点理解,开始时的延续是返回到从某个值调用过程的位
我在Guile Scheme 2.2.3中使用GOOPS。如果我有如下代码:
(use-modules (oop goops))
(define-class <vec3> ()
(e0 #:init-value 0.0 #:init-keyword #:e0)
(e1 #:init-value 0.0 #:init-keyword #:e1)
(e2 #:init-value 0.0 #:init-keyword #:e2))
(define (make-point
学习一些计划/技巧,所以给我一些余地
当前正在尝试在给定列表时查找最大值,而不使用内置的max()函数
当前代码:
#lang racket
(provide max-num)
(define (max-num lst)
(define (helper lst max)
(displayln lst)
(displayln max)
(displayln " ")
(when (null? max) ; first run
(helper (c
是否可以在下面编写scheme函数symtab
(define x 1)
(define y 2)
(symtab x) ; => (x . 1)
(symtab y) ; => (y . 2)
如果不可能,是否可以定义具有引用参数的类似函数
(symtab 'x) ; => (x . 1)
(symtab 'y) ; => (y . 2)
是的,有宏
> (define-syntax symtab
(syntax-rules ()
((_ x)
该程序应该使用
(define (sum f n)
(if (= n 0)
(f 1)
(+ (f n) (sum f (- n 1)))))
(define (harm-term k)
(/ 1 k))
(define (harm-sum n)
(sum (harm-term 1) n))
创建一个名为harm sum的函数,用于计算谐波级数之和。但我一直在犯错误
应用程序:
not a procedure;
expected a pro
我有两张单子
(a b c d)
这是一组(唯一元素列表)和
((a2)(a1)(b3)(c1)(c4)(c2)(c5)(d3)
现在,我想要一个包含第一个列表中所有元素的列表,这些元素组合在一起,如下所示
((a213)(b3)(c1425)(d3))
我使用了两个for循环(for((ele1 lst1))…)和(for((ele2 lst2))…)实现了上述功能,但对我的解决方案并不满意。我还看到了groupbyprimitve,但这并不是我想要的
我认为,有一个更好、更优雅的功能解决方案
当我构建Racket(scheme)GUI应用程序时,如下所示:
raco exe--gui-01.rkt
Windows taksbar将应用程序的名称显示为“Racket GUI应用程序”。
我想把这个名字改成“我的GUI程序”。
这可能吗
[编辑]
对不起,我解释得不好
当我运行gui-01.exe时,我得到了框架标签作为标题;但当我锁定到任务栏后关闭程序时,问题就出现了。electron/rcedit解决了这个问题。有了这个解决方案,taskmanager的显示也变成了“我的GUI程序
我试图定义一个函数func->symbol,它接受一个函数并将其名称作为符号返回。例如:
(define (pythagoras a b)
(sqrt (+ (* a a) (* b b))))
;; #1
(func->symbol pythagoras) ; Returns: 'pythagoras
;; #2
(func->symbol (if #t pythagoras sqrt)) ; Returns: 'pythagoras
;; #3
(let ((f (
好的,这是我今天关于Scheme的第四个问题,对Scheme来说还是很新的,因为我需要一个子功能
基本上,这将返回两个列表的差异。假设你有(1,5)和(5,1)这个函数应该返回8。因为这是l到w
这是我的。注:如果我将(列表(-(car l)(car w)))更改为(写入…),该函数将工作,但输出2个数字,我不知道如何使用这些数字作为其他函数的输入
所以我试着把它放到列表中,但并没有真正起作用,它返回给我的不是错误,而是奇怪的东西
(define (difference l w) ; calc
我曾经为Scheme程序制作过一个用户界面。它包括一个mred:canvas%,我想在其上使用绘图点绘制点。它的定义是:
(define (naca-ui-init
{...}
#:airfoil-canvas-class
(airfoil-canvas-class canvas%)
{...})
后来:
(set! airfoil-canvas
(new
airfoil-canvas-c
我正在尝试实现一个函数(我们称之为scan),它包含三个参数。第一个是两个参数的过程,第二个是过程的初始值,第三个是要使用过程处理的项目列表。例如:
(scan + 0 '())==> '()
(scan + 0 '(1))==> '(1)
(scan + 0 '(1 2 3 4 5));; 1+0, 2+1+0, 3+2+1+0, ...==> '(1 3 6 10 15)
等等。。。
我编写了一些代码来查找包含两个参数的前缀和。我试过用它,但没用。我如何处理这个问题?递归
我正在尝试编写一个名为“p”的Scheme函数,其中有一个参数X,它是一个字母列表。如果a的数量比b的数量少一个,则函数应返回true。这就是我所拥有的,但无法回避的论点错误。非常感谢您的帮助
#lang scheme
(define p
(lambda (X)
(let ((countA 0))
(let ((countB 0))
(count(countA countB X)
(if (= countA (- countB 1))
#t
#f))))))
(define count
(l
我想用一个函数同时更改两个常量,但不知怎么的,它不起作用:
(define p 1)
(define q 1)
(define (change p q)
(set! p (+ p 1))
(set! q (+ q 1)))
这将有助于:
#lang racket
(define p 1)
(define q 1)
(define (increment-p-and-q)
(set! p (+ p 1))
(set! q (+ q 1)))
(display (list
所以我读到DrRacket是CommonLisp的一个很好的IDE。
我下载了它,并将语言设置为R5RS,并编写了以下函数定义:
(defun f (x)
(+ 5 5))
但是它返回了一个错误
defun: undefined;
cannot reference undefined identifier
考虑到defun在common lisp中是一个公认的关键字,我不知道如何修复它。DrRacket不是common lisp的IDE。它是scheme的IDE,它是一种Lisp方言,
标签: Scheme
read-eval-print-loop
有没有人建议我如何检查变量x是否有界
例如,我想区分未绑定变量和符号,但这里的symbol?谓词不好,因为(symbol?x)给了我一个错误
我只处理未绑定的变量
我给你举个例子:
(pattern-rule
`(car ,(?'expr))
(lambda (expr) `,(car (fold expr))))
这段代码是作为解析器一部分的文件夹过程的一部分
返回的对(fold'(car(cons'1'2))的评估是'1
在(fold'(car x))上返回的求值应该是(car
当我需要检测由两个数字分隔的-时,我对正则表达式在scheme中的工作方式感到困惑
#px"[[:digit:]]-"
这是我如何找到后跟-的数字的方法,但当我尝试这样做时会出现错误
#px"[[:digit:]-[:digit:]]"
字符类由两侧的两个方括号包围。在第二个表达式中,字符类的每个内侧上只有一个方括号。您需要这样做:
#px"[[:digit:]]-[[:digit:]]"
另一方面,仅使用完整的POSIX字符类来匹配数字有点冗长。由于它非常常见,您只需使用\d来匹配一个数
我在试着破译
连续提示呼叫
将proc应用于给定的args,并通过提示扩展当前的延续。提示符由提示符标记标记,该标记必须是默认延续提示符标记(默认)或生成延续提示符标记的结果。proc的结果是带有持续提示的调用的结果
我理解其中的部分,它说“将proc应用到给定的args,并使用当前的继续符”,然后它就开始胡言乱语了
继续被“扩展”意味着什么,“提示”是如何“扩展”的?从概念上讲,什么是提示?
Scheme一般都有延续的概念,但Racket通过分隔延续的概念扩展了这一概念。延拓的思想是,它捕获剩
所以我熟悉其他语言中的while循环,但在Racket中很难使用它。我所能做到的最好的事情就是让循环运行一次(更像是if语句),或者运行一个无限循环
以下是运行一次的代码:
;; Evaluates a loop.
;; When the condition is false, return 0.
;; There is nothing special about zero -- we just need to return something.
(define (eval-while c bo
我不知道如何改变它,使它可以迭代。参见SICP中的练习1.30。比尔在这里有一个解决办法
您可以尝试以下方法:
(define (g-sum f a b)
(if (= a b)
(f b)
(+ (f b) (g-sum f a (- b 1)))))
如果您仍然难以理解上述代码,请记住,只要我们传递所需的参数,就可以将内部助手过程提取为单独的过程。关键是,您需要一个额外的参数来用作累加器,具体如何做与此无关,我个人更喜欢使用命名的let。这相当于我前面的两个解决
所以我有一个拼写检查程序。该程序的功能是以四种不同的方式对单词进行散列,并将这些散列值放入列表中。提供有效单词的字典,并对字典中的每个单词执行相同的操作。最终结果将是每个单词都有一个唯一的哈希值列表。然后,我可以提供一个单词作为输入,生成一个哈希值列表,并将其与字典中的每个单词进行比较,以查看拼写是否正确
(define gen-checker
(lambda (hashfunctionlist dict)
(lambda (w)
(cond ((null?
我发现作为一种通用Lisp编程语言的手册页非常有用
是否有涵盖R7RS或R5RS标准(或R6RS)的等效方案
我知道R5RS和R7RS标准的PDF,但它们在动态搜索特定命令的定义和实现时并没有那么有用。我怀疑它会有多大用处,因为很多东西都是特定于实现的(尽管希望随着R7RS的大发布会有所改变)方案实施请求(SRFI)包含实施。R6RS和R7RS的PDF版本包含可单击的超链接。以下是官方(已批准)和勘误表修正PDF的副本:R6RS标准足够大,可以分为四个PDF。大多数情况下,您只需要参考主库(定义
我试图学习这个方案,并尝试从这个线程中找到一些解决方案。
我也对emacs感兴趣,所以我一起开始。在emacs中,我使用的是Racket v6.1
我的问题,一个解决方案的奇怪行为:
(define (square x) (* x x))
(define (sum-of-squares x y)
(+ (square x) (square y)))
(define (mi
假设我有一个列表,但我想将其转换为值。例如:
(define (f mylist)
(values ...)) ; <- What do I write here?
(定义(f mylist)
(价值观…) 只需使用apply:
(define (f mylist)
(apply values mylist))
您将获得所需的结果:
(f '(1 2 3))
=> 1
2
3
只需使用apply:
(define (f mylist)
(apply v
1 2 3 4 5 6 ...
下一页 最后一页 共 67 页