如何返回在方案函数内创建的列表?

时间:2015-12-11 03:25:45

标签: functional-programming scheme

我正在尝试查找传递给translate函数的列表的原子,将原子转换为适当的数字,然后输出一个新列表。我收到以下错误:

outlist: unbound identifier in module in: outlist

这是我的代码:

#lang racket
(define chinese '(ling yi er san si wu liu qi ba jiu shi))
(define english '(zero one two three four five six seven eight nine ten))

(define (translate alist)
  (cond
     ((eq? "zero" (car alist) cons ('(0)) outlist)
  )
 (translate (cdr alist))))

(define list '(zero))
(translate list)

我正在寻找的是通过翻译包含“一二三”等的列表并从翻译中获得一个包含在其中的“1 2 3”的列表..

我也尝试过添加

 (define outlist '())

在translate函数内部并抛出以下错误:

application: not a procedure;
expected a procedure that can be applied to arguments
given: '(0)
arguments...: [none]

非常感谢任何帮助!我真正应该做的是用英文和中文查找用户生成列表的字符串,然后进行翻译,所以如果你能详细说明如何做到这一点,那也会有所帮助。

1 个答案:

答案 0 :(得分:1)

没有一个名为outlist的参数或变量,您应该构建输出列表 - 并记住为递归编写正确的基本案例。

此外,您的代码存在多个语法错误,请确保了解如何在Scheme中调用函数。你应该尝试这样的事情:

(define (translate alist)
  (cond
    ((null? alist) '())
    ((eq? 'zero (car alist))
     (cons 0 (translate (cdr alist))))
    ((eq? 'one (car alist))
     (cons 1 (translate (cdr alist))))
    ... and so on ...))

按预期工作:

(translate '(zero one))
=> '(0 1)