在scheme中创建员工和工作分配列表时遇到语法错误

在scheme中创建员工和工作分配列表时遇到语法错误,scheme,Scheme,我的计划有问题。我必须定义一个函数(jobs\u ok?Assignment Employees),其中jobs\u ok?接受Assignment和Employees作为两个参数,Assignment和Employees是包含子列表的两个列表作业应包含4个名称,其中名称分配给特定作业。对于分配给它的4个子列表中的每一个子列表,Employees应该接受输入到Assignment中的姓名,其中有一个人的姓名,后跟三个整数(1或0),如果分配给该人的工作的整数为1,则返回true;否则返回fals

我的计划有问题。我必须定义一个函数
(jobs\u ok?Assignment Employees)
,其中
jobs\u ok?
接受
Assignment
Employees
作为两个参数,
Assignment
Employees
是包含子列表的两个列表<代码>作业应包含4个名称,其中名称分配给特定作业。对于分配给它的4个子列表中的每一个子列表,
Employees
应该接受输入到
Assignment
中的姓名,其中有一个人的姓名,后跟三个整数(1或0),如果分配给该人的工作的整数为1,则返回true;否则返回false。我写下了我的代码,但出于某种原因,它说在意外标记
'jobs\u ok?'
附近有一个语法错误,然后它显示了下面的行:
'(定义(jobs\u ok?Assignment Employees)

所以我想知道我的代码怎么了?下面是我的代码:

(define (jobs_ok? Assignment Employees)
  (define (Assignment 9:00-11:00 11:00-1:00 1:00-3:00 3:00-5:00)
    (define (9:00-11:00 phone1 phone2 computerRepair networkRepair)
      (cond ((string? phone1 phone2 computerRepair networkRepair) #F)
            (#T (phone1 phone2 computerRepair networkRepair))))
    (define (11:00-1:00 phone1 phone2 computerRepair networkRepair)
      (cond ((string? phone1 phone2 computerRepair networkRepair) #F)
            (#T (phone1 phone2 computerRepair networkRepair))))
    (define (1:00-3:00 phone1 phone2 computerRepair networkRepair)
      (cond ((string? phone1 phone2 computerRepair networkRepair) #F)
            (#T (phone1 phone2 computerRepair networkRepair))))
    (define (3:00-5:00 phone1 phone2 computerRepair networkRepair)
      (cond ((string? phone1 phone2 computerRepair networkRepair) #F)
            (#T (phone1 phone2 computerRepair networkRepair)))))
  (define (Employees employeeName)
    (define (employeeName phone1 phone2 computerRepair networkRepair)
      (define (phone1 phone computer network)
        (cond ((= phone 0) #F) (#T phone1)))
      (define (phone2 phone computer network)
        (cond ((= phone 0) #F) (#T phone2)))
      (define (computer phone computer network)
        (cond ((= computer 0) #F) (#T computer)))
      (define (network phone computer network)
        (cond ((= network 0) #F) (#T network)))))
  (cond ((equal? (Assignment) #F) #F) ((equal? (Employees) #F) #F) (#T jobs_ok?)))

下面是我在mobaxterm中运行它的方式:
/jobs\u ok.scm
您的代码包含许多错误,包括:

  • 定义内部定义
  • 在没有必需参数的情况下调用函数
  • 函数字符串?用四个参数调用
您应该删除此代码并重新编写,但在每一步之后都要对其进行测试,并在将它们放在一起之前查看每个部分的功能

这个问题实际上是在线可用的-它有更长的指令和名称后三个整数的不同含义。这个解决方案应该有效:

(define (check-shift Shift Employees)
  (and (= 1 (first (cdr (assoc (first Shift) Employees))))
       (= 1 (first (cdr (assoc (second Shift) Employees))))
       (= 1 (second (cdr (assoc (third Shift) Employees))))
       (= 1 (third (cdr (assoc (fourth Shift) Employees))))))
           
(define (jobs_ok? Assignment Employees)
  (and (check-shift (first Assignment) Employees)
       (check-shift (second Assignment) Employees)
       (check-shift (third Assignment) Employees)
       (check-shift (fourth Assignment) Employees)))