如何在Scheme中的过程内声明变量:define:表达式上下文中不允许

时间:2018-10-18 15:42:58

标签: list scheme

我是一名C#程序员,正在学习Scheme,但由于不了解Scheme,我遇到了很多麻烦。

我已经在很多帮助下编写了这段代码:

found = False
for z in range(amount):
    temp2=input2[1][:-3] #for this case lets say the value is 8
    temp=k[z] #array of numbers
    if temp.startswith(temp2,0,1)==True:#this is the conditioning statment
        #this is the output for the condition no bother
        stdout.write(f'{crn[z]} {sub[z]} {cn[z]} {sec[z]}'+" ")
        stdout.write(f'{days[z]} {bt[z]} {et[z]} {inst[z]}\n')
        found = True
if not found:
    print('NO MATCHES FOUND')

但是出现以下错误:

  

定义:在表达式上下文中不允许使用:(定义排序   (按秒升序排序)

在这一行:

#lang racket

(define sort-asc-by-second
  (lambda (lst)
    (sort lst
          (lambda (x y) (< (cdr x) (cdr y))))))

(define sum
  (lambda (lst)
    (apply + (map cdr lst))
  )
)

(define my-function
  (lambda (lst)
   (
    (define sorted (sort-asc-by-second lst))
    (define suma (sum lst))
    (define lista (map (lambda (p) (cons (car p) (/ (cdr p) suma)))))
   ))
)

如何声明变量?也许,这里的问题是我是C#程序员,但我不了解Scheme。

2 个答案:

答案 0 :(得分:2)

我不知道该程序要做什么,但是您看到的当前错误是由于有一对多余的括号引起的。

(define my-function
  (lambda (lst)

    (define sorted (sort-asc-by-second lst))
    (define suma (sum lst))
    (define lista (map (lambda (p) (cons (car p) (/ (cdr p) suma)))))
    )
  )

答案 1 :(得分:2)

我认为遵循Design Recipe的步骤对您来说非常重要。在这种情况下:

  • 编写签名:函数接受并返回的类型。
  • 使用check-equal编写测试用例?
  • 遵循所选数据的模板。

以不同的方式放置(也许更直率地):停止游荡。开始设计!