arrays - 为什么返回 'error: unbound symbol' 为什么我运行我的数组比较算法?

标签 arrays syntax-error runtime-error scheme lisp

给定一个列表列表,其中列表的第一个元素是名称,其余元素是整数,我正在尝试构建一种算法,通过对两个子列表之间的差异求和来比较两个子列表的相似性列表中每个位置的元素。我在此算法中使用了 let 语句,当我尝试运行它时,返回了以下错误:

Error: execute: unbound symbol: "arr2" [similarity-arrays, (anon)]

为什么会这样?

代码:

(define (get-list name arr)
  (if (eq? name (car (car arr)))
      (cdr (car arr))
      (get-list name (cdr arr))))
(define (similarity-arrays name1 name2 arrs result)
  (let ((arr1 (get-list name1 arrs))
       ((arr2 (get-list name2 arrs))))
        (if (= (length arr1)(length arr2))
          (let ((x1 (car arr1))
                (x2 (car arr2)))
                  (if (= 0 (length arr1))
                    result
                    (similarity-arrays
                      (cdr arr1)
                      (cdr arr2)
                      (+ result (- (car arr1)(car arr2))))))
          #f)))
(define dust
  (list (list 'akko 11 3 7 5 4 1 9 8 10 6 2)
        (list 'Alex 9 7 11 3 6 1 5 4 10 2 8)
        (list 'Aron 11 4 1 2 6 3 7 9 8 10 5)
        (list 'carter 7 3 8 2 5 4 11 9 10 6 1)
        (list 'Connery 10 2 6 4 5 1 7 3 9 11 8)
        (list 'Embryo 11 8 9 6 7 4 2 3 1 10 5)
        (list 'Jaycee 9 1 11 7 10 8 4 2 5 6 3)
        (list 'jeeelm 11 8 5 2 1 6 7 3 9 10 4)
        (list 'Jodast 10 7 4 6 5 1 11 9 8 3 2)
        (list 'KingDolphin 11 4 7 2 6 3 5 9 8 10 1)
        (list 'Knowledge 11 8 2 9 3 1 5 6 4 10 7)
        (list 'ruben 11 1 6 4 7 3 9 5 8 10 2)
        (list 'SickLizard 11 6 7 2 8 3 9 10 5 4 1)
        (list 'XIN 11 3 4 1 8 5 7 9 6 10 2)
        (list 'ZIPF 10 7 11 5 9 3 6 2 4 8 1)))

(similarity-arrays 'Jodast 'Akko dust 0)

最佳答案

您需要改进的一件事是代码的缩进。 如果代码缩进正确,则更容易发现语法错误。 如果您的代码如下所示,那么您遇到了缩进问题。

(define (similarity-arrays name1 name2 arrs result)
  (let ((arr1 (get-list name1 arrs))
       ((arr2 (get-list name2 arrs))))       ; <- wrong indentation, wrong syntax
        (if (= (length arr1)(length arr2))
          (let ((x1 (car arr1))
                (x2 (car arr2)))
                  (if (= 0 (length arr1))    ; <- wrong indentation
                    result
                    (similarity-arrays
                      (cdr arr1)
                      (cdr arr2)
                      (+ result (- (car arr1)(car arr2))))))
          #f)))

这将是正确缩进的代码:

(define (similarity-arrays name1 name2 arrs result)
  (let ((arr1 (get-list name1 arrs))
        ((arr2 (get-list name2 arrs))))      ; <- wrong syntax
    (if (= (length arr1) (length arr2))
        (let ((x1 (car arr1))
              (x2 (car arr2)))
          (if (= 0 (length arr1))
              result
              (similarity-arrays
               (cdr arr1)
               (cdr arr2)
               (+ result (- (car arr1) (car arr2))))))
        #f)))

最好不要手动缩进代码 -> 使用编辑器/IDE 来完成。

关于arrays - 为什么返回 'error: unbound symbol' 为什么我运行我的数组比较算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56333808/

相关文章:

php - SET 时 MYSQL 查询语法错误

python - 无效的Python语法定义函数

sql-server - SQL Server中的编译错误和运行时错误之间的区别?

android - 无法调度 DDM block 46454154 : no handler defined - Eclipse - Android SDK

javascript - 从嵌套对象的属性生成代码字符串

python - 基于另一个列表中的数字的列表列表

java - 给定一个字符串如何将其转换为数组 : Java

Javascript更改数组元素的位置

java - MySQL 查询通过 Java 语法错误

c++ - Linux。不打印到文件