Scheme 如何使用脚本Fu解析出基本文件名

使用从Gimp.org下载的适用于MAC OS X的Gimp 2.6.6(在X11下) 我试图用脚本自动化一个枯燥的手工过程。我需要解析图像文件名,使用原始文件名上的后缀将各个层保存为新文件 我最初的尝试是这样的,但失败了,因为(字符串搜索…在2.6下似乎不可用(对脚本引擎的更改?) 然后我尝试使用regex解析出基本文件名,但是(re-match-nth…也无法识别 (if (re-match "^(.*)[.]([^.]+)$" filename buffer) (set! base

Scheme 方案:与集合混淆!

我不明白这段代码是如何工作的: (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 8-bfs方案实施

我正在考虑在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 将参数重新绑定到方案中的函数调用>;

我对scheme有点陌生,我正在尝试编写一个函数,它接受函数名和表达式,并将函数名绑定为表达式的第一个参数 即: 比如: (bind-function-name '+ '(param 'a "First")) 将生成一个lambda,用于计算 (param '+ 'a "First") 到目前为止,我想到的最好的方法是: (define (bind-function-name name cmd) (let ((func (car cmd)) (args (cdr cmd)))

Scheme 模式匹配语法

我正在尝试为调用编写一个模式匹配,如下所示: (define let→λ&call (match-lambda (`(let ((,<var> ,<val>) . (,<vars> ,<vals>)) ,<expr> . ,<exprs>) `((λ ,<var> . ,<vars> . ,<expr> . ,<exprs>)

Scheme 写分裂

我试着从Haskell在Racket Scheme中写下我发现非常有用的splitOn。我最终得到了下面的结果,但效果不太好。我的意思是,它只是运行并吞噬我的记忆。“直到”和“直到”都起作用,那么在“拆分”中我到底做错了什么 我明白了。我没有放弃定界字符,让它永远循环 (define (split-on lst pred) (cons (take-until lst pred) (if (not (null? (drop-until lst pred)))

Scheme 方案中的平台(OS)检测

那一定是这样的: (if (= system-type 'gnu/linux) (system "make")) 老实说,我认为我的方案实现在任何方面都做不到,但我可以自由地为它添加实现。平台检测的常用方案语法是什么 谢谢你我不能为任何其他方案发言,但Racket有一个程序叫做: 并具有uname函数,该函数将描述作为方案向量对象返回: scheme@(guile-user)> (uname) $2 = #("Linux" "gblaptop" "2.6.39-gentoo-r3

Scheme 如何将此方案代码转换为Racket

我不熟悉这个计划。这是麻省理工学院SICP课程的代码示例 (define (+ x y) (if (= x 0) y (+ (-1+ x) (1+ y)))) 如何将其转换为球拍代码?我想转换成Racket,因为我使用DrRacket运行代码,我喜欢这样。它一直工作到现在,但抱怨该计划的增量操作员 我得到的错误是: 定义值:无法更改常量变量:+ 对未定义标识符的引用:-1+ 要修复第二个错误,请将(-1+x)更改为(-x1),将(1+y)更改为(+y1)。应该可以

Scheme 消息传递方案

谁能简单地向我解释一下在scheme中消息传递是如何实现的?我想我对消息传递的整个概念有点不了解。看看SICP 闭包上下文中的消息传递 下面的示例定义了一个实现简单计算器的闭包。函数makecalculator类似于面向对象语言所称的构造函数。区别在于:makecalculator返回函数,而构造函数返回对象值。在面向对象语言中,对象值是第一类值。Scheme没有这样的值。对象第一类值提供访问对象成员变量和对象方法的功能。在Scheme中,必须通过调度函数的定义来模拟此功能生成计算器返回这样一

Scheme 用麻省理工学院方案升华课文2

有没有人知道我如何将Supreme text 2与scheme结合使用。我听过ST2,想试试吗?现在我正在学习这个计划。我已经安装了scheme解释器-我可以到终端输入scheme并运行代码。我也可以在emacs中运行解释器,但emacs并不是很有趣。可能有点晚了,但我仍然想分享我的经验 现在我使用升华文本2和Scheme fine 首先通过包控制安装包 然后安装软件包(对于Sublime Text 2) 那么,您的Sublime中应该有一个功能齐全的Scheme环境!语法突出显示很好,并使用S

Scheme 关于数据定义方案

我被要求提供一个图像列表的数据定义。就这样。我很困惑。这对我来说似乎有点模糊。这到底是什么意思 以下是一个示例: A list-of-numbers is either empty or (cons n lon), where n is anumber and lon is a list-of-numbers. 上下文、环境/语言/图像类型是什么?与此有关系吗?

Scheme 将图像插入到帧x y坐标中

嗨,我想知道如何插入一个图像到一个窗口,但坐标 (define ventana (new frame% [label "Ba"] [width 1100] [height 600])) (define tablero-panel (new horizontal-panel% (parent ventana)

Scheme 如何为列表的均值和中位数编写方案程序?

我需要写一个基本的计划程序,可以找到一个列表的中位数和另一个平均值 这就是我到目前为止的想法: 意思是: 我知道我需要在某处划分长度,但不知道如何划分。我的思考过程是将每个元素添加到列表的堆栈中,然后除以列表的长度 中位数: 我不确定中位数从哪里开始。我知道我需要确定列表中的元素是奇数还是偶数,所以我想到了这个方法 (define (median lst) (if (integer? (/ (length lst) 2) ;which is the one for even 我不知道我是

在Scheme中将列表作为参数传递

我是函数式编程的初学者,我希望能够将值从控制台读入列表,将该列表作为参数传递,然后在Scheme中返回列表的总和 我想得到这个结果:(显示(总和列表成员’(12345)),但用户必须在控制台输入这些值 这就是我正在做的: (开始 (定义计数0) (定义总和列表成员) (兰姆达(lst) (如果(空?lst) 0 (+(car lst)(总和列表成员(cdr lst()()))) (显示“输入整数[按-1退出]:”) (新行) (let循环((i0)) (定义n(读取)) (名单成员总数(名单n)

Scheme 如何清除球拍中的结果?

这是我的密码 #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)

Scheme 我不知道';我不理解方案评估示例

我不熟悉该计划的语言。我正在读《简单方案》一书,遇到了下一个例子: (cond (empty? 3) (square 7) (else 9)) 当我运行它时,我得到了3。我知道每个cond表达式需要取2个参数:一个用于条件的“eval”,第二个是“answer”。评估在哪里?答案在哪里?为什么?编写cond表达式的正确方法如下所示: (cond ((even? 3) 3) ((odd? 5) 5) (else -1)) 您可以看到,谓词表达式

Scheme 以某种方式组合两个列表的方案

这是我在计划中的第二个问题。假设我有两张清单 '("a" "b" "c") '("e" "f" "g") 我想以这种方式将它们结合起来: '(("a" "e") ("b" "f") ("c" "g")) 这可能吗?您可以使用。函数名为zip。当您将

Scheme 函数的方案列表-如何访问列表中的函数?

在scheme中,如何访问列表中的某个函数并将变量传递给该函数 (define f '((lambda (n) (+ n 2)) (lambda (n) (* n 2)) (lambda (n) (* n n)))) 我已经定义了这个列表f,其中有3个不同的函数,我想知道我可以在scheme中输入什么,可以说将3传递给列表中的第二个函数 我原以为像((cadr f)3)这样的东西会起作用,但我似乎不明白,如果有任何帮助,我将不胜感激

Scheme 在二叉树结构方案中查找项目列表

在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 方案-Can';空语法环境中的t绑定名称:tmp

您好,我正在尝试找出如何在scheme中的if语句中定义变量。我不断地犯错误;无法在空语法环境中绑定名称:tmp 从我在网上读到的所有信息来看,我的语法是正确的。我不明白我怎么老是犯这个错误 这是我的密码: (if (list? seq2) (if (list? seq1) (begin (define tmp (car seq1)) (if (list? tmp) #t

Scheme 在方案中添加列表中的数字

我目前正在学习这个计划,我遇到了一个例子问题。 将列表作为输入,将每个元素转换为数字的一位数,并按倒序排列列表。例如 (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 用于插值两个音符的Lilypond函数

我想定义一个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 有什么想法吗?你试过什么了吗?有计划代码吗?如果你不太确定从哪里开始,可能会有所帮助。

Scheme 需要帮助获取此过程吗

这是我制作的递归版本,但我真的很难让它迭代。我对两者的区别有相当好的理解。在递归中,它只加+1,当它到达末尾时,它将所有的1加在一起,而在iterativ中,它每一步都计算它。(如果我误解了,请随时告诉我。) 你们中有谁有什么想法如何使它迭代IV和一些提示,让我更好地了解它的计划 如果这是一个微不足道的问题,很抱歉,但我对这种语言和函数式编程相当陌生 您可以添加一个count变量,使其迭代并跟踪长度 (define (length2 item) (if (null? item)

Scheme 如何为chez方案配置SUMBOLE3?

我已经编译了chez方案,并在OSX系统中安装了subgrame3 subgramerepl和scheme 和配置为主题 编辑SublimiteText3>>InstalledPackages>>Scheme.sublime-package(使用Zip软件打开)>>Scheme.sublime-build(修改为以下内容) 我可以在SubmiterePL中打开chez scheme解释器,但是当我想用“build System:scheme”构建文件时,我得到了错误“[Errno 2]没有这样的

Scheme 如何在racket中安装sicp包模块?

我是编程界的新手。我正在使用ubuntu操作系统。我以书开始了我的旅程。我正在使用scheme repl。但突然间,我被困在这一部分 我无法使用scheme repl执行它的示例。我试着运行给定的部分示例,我得到一个错误,如下所示 1 ]=> (define wave2 (beside wave (flip-vert wave))) ;Unbound variable: wave 即使在书中,画家也是作为原始程序给出的。 当我运行它时,它也抛出了一个错误 1 ]=> painte

Scheme 鸡方案中的错误处理

我正在做一个基本的端口扫描仪。 当我连接到已关闭的服务器时,我正在尝试打印“已关闭” 连接到打开的端口时,端口和“打开” 现在我正在这样做: (condition-case (tcp-connect (list-ref host 0) port) [(exn) (print "closed")] ['nil (print "open")])) 我的open在应该打印的时候打印不正确(使用netcat进行了测试)。 我如何理解条件情况是它匹配错误。我正在尝试处理无错误的情况,即连

Scheme Racket中的结构是否有命名约定?

我喜欢这样一个事实,即使用%后缀命名类是一种惯例,因为它有助于区分实例和高阶类 (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

Scheme 程序开始时的当前延续

创建返回过程显然是使用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 repl中很好地打印对象

我在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

Scheme 球拍合同违约(最大递归函数)

学习一些计划/技巧,所以给我一些余地 当前正在尝试在给定列表时查找最大值,而不使用内置的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函数能否返回全局符号及其值?

是否可以在下面编写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)

Scheme 方案函数作为参数

该程序应该使用 (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

Scheme Racket:遍历两个不同大小的列表

我有两张单子 (a b c d) 这是一组(唯一元素列表)和 ((a2)(a1)(b3)(c1)(c4)(c2)(c5)(d3) 现在,我想要一个包含第一个列表中所有元素的列表,这些元素组合在一起,如下所示 ((a213)(b3)(c1425)(d3)) 我使用了两个for循环(for((ele1 lst1))…)和(for((ele2 lst2))…)实现了上述功能,但对我的解决方案并不满意。我还看到了groupbyprimitve,但这并不是我想要的 我认为,有一个更好、更优雅的功能解决方案

Scheme 要在程序未运行时更改Racket GUI应用程序标题(在任务栏上)

当我构建Racket(scheme)GUI应用程序时,如下所示: raco exe--gui-01.rkt Windows taksbar将应用程序的名称显示为“Racket GUI应用程序”。 我想把这个名字改成“我的GUI程序”。 这可能吗 [编辑] 对不起,我解释得不好 当我运行gui-01.exe时,我得到了框架标签作为标题;但当我锁定到任务栏后关闭程序时,问题就出现了。electron/rcedit解决了这个问题。有了这个解决方案,taskmanager的显示也变成了“我的GUI程序

Scheme 如何获取函数名作为符号?

我试图定义一个函数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的第四个问题,对Scheme来说还是很新的,因为我需要一个子功能 基本上,这将返回两个列表的差异。假设你有(1,5)和(5,1)这个函数应该返回8。因为这是l到w 这是我的。注:如果我将(列表(-(car l)(car w)))更改为(写入…),该函数将工作,但输出2个数字,我不知道如何使用这些数字作为其他函数的输入 所以我试着把它放到列表中,但并没有真正起作用,它返回给我的不是错误,而是奇怪的东西 (define (difference l w) ; calc

Scheme mred中缺少方法:canvas%?

我曾经为Scheme程序制作过一个用户界面。它包括一个mred:canvas%,我想在其上使用绘图点绘制点。它的定义是: (define (naca-ui-init {...} #:airfoil-canvas-class (airfoil-canvas-class canvas%) {...}) 后来: (set! airfoil-canvas (new airfoil-canvas-c

在scheme中实现扫描功能?

我正在尝试实现一个函数(我们称之为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) 等等。。。 我编写了一些代码来查找包含两个参数的前缀和。我试过用它,但没用。我如何处理这个问题?递归

Scheme 方案:列表中出现的次数

我正在尝试编写一个名为“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

Scheme 球拍:用一个函数改变两个常数

我想用一个函数同时更改两个常量,但不知怎么的,它不起作用: (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

Scheme 我在DrRacket做错事了

所以我读到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中的谓词

有没有人建议我如何检查变量x是否有界 例如,我想区分未绑定变量和符号,但这里的symbol?谓词不好,因为(symbol?x)给了我一个错误 我只处理未绑定的变量 我给你举个例子: (pattern-rule `(car ,(?'expr)) (lambda (expr) `,(car (fold expr)))) 这段代码是作为解析器一部分的文件夹过程的一部分 返回的对(fold'(car(cons'1'2))的评估是'1 在(fold'(car x))上返回的求值应该是(car

Scheme中的正则表达式

当我需要检测由两个数字分隔的-时,我对正则表达式在scheme中的工作方式感到困惑 #px"[[:digit:]]-" 这是我如何找到后跟-的数字的方法,但当我尝试这样做时会出现错误 #px"[[:digit:]-[:digit:]]" 字符类由两侧的两个方括号包围。在第二个表达式中,字符类的每个内侧上只有一个方括号。您需要这样做: #px"[[:digit:]]-[[:digit:]]" 另一方面,仅使用完整的POSIX字符类来匹配数字有点冗长。由于它非常常见,您只需使用\d来匹配一个数

Scheme “a”究竟是什么;继续提示?“;

我在试着破译 连续提示呼叫 将proc应用于给定的args,并通过提示扩展当前的延续。提示符由提示符标记标记,该标记必须是默认延续提示符标记(默认)或生成延续提示符标记的结果。proc的结果是带有持续提示的调用的结果 我理解其中的部分,它说“将proc应用到给定的args,并使用当前的继续符”,然后它就开始胡言乱语了 继续被“扩展”意味着什么,“提示”是如何“扩展”的?从概念上讲,什么是提示? Scheme一般都有延续的概念,但Racket通过分隔延续的概念扩展了这一概念。延拓的思想是,它捕获剩

Scheme 为解释器计算While循环

所以我熟悉其他语言中的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

Scheme 如何编写递归方案代码的迭代版本

我不知道如何改变它,使它可以迭代。参见SICP中的练习1.30。比尔在这里有一个解决办法 您可以尝试以下方法: (define (g-sum f a b) (if (= a b) (f b) (+ (f b) (g-sum f a (- b 1))))) 如果您仍然难以理解上述代码,请记住,只要我们传递所需的参数,就可以将内部助手过程提取为单独的过程。关键是,您需要一个额外的参数来用作累加器,具体如何做与此无关,我个人更喜欢使用命名的let。这相当于我前面的两个解决

通过scheme中的函数递归问题

所以我有一个拼写检查程序。该程序的功能是以四种不同的方式对单词进行散列,并将这些散列值放入列表中。提供有效单词的字典,并对字典中的每个单词执行相同的操作。最终结果将是每个单词都有一个唯一的哈希值列表。然后,我可以提供一个单词作为输入,生成一个哈希值列表,并将其与字典中的每个单词进行比较,以查看拼写是否正确 (define gen-checker (lambda (hashfunctionlist dict) (lambda (w) (cond ((null?

Scheme 方案R7RS还是R5RS超规范?

我发现作为一种通用Lisp编程语言的手册页非常有用 是否有涵盖R7RS或R5RS标准(或R6RS)的等效方案 我知道R5RS和R7RS标准的PDF,但它们在动态搜索特定命令的定义和实现时并没有那么有用。我怀疑它会有多大用处,因为很多东西都是特定于实现的(尽管希望随着R7RS的大发布会有所改变)方案实施请求(SRFI)包含实施。R6RS和R7RS的PDF版本包含可单击的超链接。以下是官方(已批准)和勘误表修正PDF的副本:R6RS标准足够大,可以分为四个PDF。大多数情况下,您只需要参考主库(定义

Scheme SICP练习1.3溶液的奇怪行为

我试图学习这个方案,并尝试从这个线程中找到一些解决方案。 我也对emacs感兴趣,所以我一起开始。在emacs中,我使用的是Racket v6.1 我的问题,一个解决方案的奇怪行为: (define (square x) (* x x)) (define (sum-of-squares x y) (+ (square x) (square y))) (define (mi

Scheme 如何将列表转换为多个返回值?

假设我有一个列表,但我想将其转换为值。例如: (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 页