我正在使用具有"高级学生"语言设置的Racket,并且我很难尝试编写一个函数来执行函数,执行n次并报告每次运行所用的时间.这是我到目前为止所得到的.
(define (many n fn)
(cond
[(= n 0) true]
[else (many (sub1 n) (local ((define k (time fn))) k))]))
Run Code Online (Sandbox Code Playgroud)
我有一个函数叫做fact计算数字的阶乘.
(define (fact n)
(cond
[(= 0 n) 1]
[else (* n (fact (- n 1)))]))
Run Code Online (Sandbox Code Playgroud)
如果我评估(time (fact 10000)),我得到合理的结果cpu,real和gc时间,以及大量.一切都很好.
但是,当我尝试评估时,(many 3 (fact 10000))我得到:
cpu time: 0 real time: 0 gc time: 0
cpu time: 0 real time: 0 gc time: 0
cpu time: 0 real time: 0 gc time: 0
true
Run Code Online (Sandbox Code Playgroud)
fact尽管作为参数传递,为什么函数不进行评估?
lambda scheme functional-programming operator-precedence racket
当给定的参数是两个项目和一个列表时,如何在DrScheme的列表中替换另一个项目?
在下一个代码中
(if (exp1)
(Do1)
(Do2))
Run Code Online (Sandbox Code Playgroud)
当exp1为真时,(Do1)正在发生.我的问题是,如果条件为真,我想做两件事.意思是 - 我想添加一个列表链接,并再次调用该函数.
so Do1 in my program is:
((cons (car hello) list1)
(Myfunction (cdr data) list1))
Run Code Online (Sandbox Code Playgroud)
它给了我下一个问题:
procedure application: expected procedure, given: ((439043 Mylist)); arguments were: ()
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
谢谢.
我是Scheme的初学者,并试图弄清楚它是如何运作的; 所以我想写一个基本代码:首先我有一个定义集: zipcode(ZIPCODE CITY STATE)
(define zipcodes '(
(96774 ookala hawaii)
(90001 losangeles california)
(90263 malibu california)
(10044 newyork newyork)
))
Run Code Online (Sandbox Code Playgroud)
我尝试编写一个输入为zipcode的函数,并返回城市和州名称,例如:
>(find '10044)
(list 'newyork 'newyork)
>(find '99999)
empty because there is not zipcode like that.
Run Code Online (Sandbox Code Playgroud)
非常感谢...
我不允许我们LET功能
感谢在这个伟大的网站上的人们,我设法将几乎完整和有效的代码放在一起.我有一个最后的问题.
这是代码:
(define (chartest ch)
(lambda (x) (char=? x ch)))
(define fsm-trans
'((A (lambda (x) (string=? x "a") B), (B (lambda (x) (string=? x "a") C)))))
(define (find-next-state state ch trl)
(cond
[(empty? trl) false]
[(and (symbol=? state (first (first trl)))
((second (first trl)) ch))
(third (first trl))]
[else (find-next-state state ch (rest trl))]))
(define fsm-final '(C))
(define start-state 'A)
(define (run-fsm start trl final input)
(cond
[(empty? input)
(cond
[(member start final) true]
[else false])]
[else
(local ((define next …Run Code Online (Sandbox Code Playgroud) 这似乎有效,它是一个宏,可以根据扩展的次数扩展到连续的整数.
;; Library (test macro-state)
(library
(test macro-state)
(export get-count incr-count)
(import (rnrs))
(define *count* 0)
(define (get-count) *count*)
(define (incr-count) (set! *count* (+ *count* 1)))
)
;; Program
(import (rnrs) (for (test macro-state) expand))
(define-syntax m
(lambda (x)
(syntax-case x ()
((m) (begin (incr-count) (datum->syntax #'m (get-count)))))))
(write (list (m) (m) (m)))
(newline)
;; prints (1 2 3)
Run Code Online (Sandbox Code Playgroud)
但它对我来说很笨拙,因为宏状态*count*和宏m本身在不同的模块中.有没有更好的方法在r6rs中执行此操作,最好是不将两个模块的实现分开?
编辑
我应该说清楚,尽管这个例子只是一个宏,但实际上我正在寻找一种在多个宏需要共享状态时有效的方法.
我在SICP练习1.2时遇到了困难.
将以下内容翻译为前缀形式:
5 + 4 + (2 - (3 - (6 + 4/5))) / 3(6 - 2)(2 - 7)
这就是我所拥有的,我无法弄清楚它为什么不起作用.我错过了什么?
(/
(+
(+ 4 5)
(- 2
(- 3
(+ 6
(/ 4 5)))))
(* 3
(*
(-6 2)
(- 2 7))))
Run Code Online (Sandbox Code Playgroud) 我正在学习Scheme,我已经阅读了基础知识,但我仍然无法想象如何将Java类"映射"到Scheme代码.你们中的任何人能帮助我吗?我只需要有人向我展示这在Scheme中如何看待最终细节并让我的想法得到解决:
public class sumFibonacciValues {
public static void main(String [] args) {
int n = 4000000;
long i2 = 1, i1 = 1, Fibo = 0, temp = 1;
while(i2 < n) {
temp = i1 + i2;
i1 = i2;
i2 = temp;
if(i2 % 2 == 0)
Fibo += i2;
}
System.out.println(Fibo);
}
}
Run Code Online (Sandbox Code Playgroud) 我正在编写一个java程序,它将根据计划类型的输入进行操作
语言
就像是
(+ (+ a b))
Run Code Online (Sandbox Code Playgroud)
假设我现在想检查语法,如果有2个括号已打开,则必须有2个其他结束括号.我不知道如何使用正则表达式来实现这一点.你能帮我吗