Grouping Tasks in Dataview by Content

Things I have tried

Trying to group tasks by the emojis they contain

```dataview
TASK
FROM "Journal/Daily"
	WHERE contains(text, "✉️") OR (status = ">")
	OR contains(text, "❗") OR (status = "!")
	OR contains(text, "📐")
	AND !completed
SORT file.tasks ASC
```

Screenshot 2022-08-23 at 10.17.43

As you can see, :exclamation: tasks are split. I would like the tasks to appear in the order they are queried in the dataview (i.e. :email:, :exclamation: then :triangular_ruler:)

What I’m trying to do

In my daily tasks I prefix certain tasks with :exclamation:, :email: or :triangular_ruler: emojis.

(Alt checkboxes - [!] and - [>] have been used in place of :exclamation: & :email: in the past, hence their inclusion here.)

My weekly note is mostly a way of displaying all tasks from previous days in a rational order. So I have three dataviews for each category, then another dataview for general/un-categorised tasks.

## Outstanding Tasks

```dataview
TASK
FROM "Journal/Daily"
	WHERE contains(text, "✉️") OR (status = ">")
	AND !completed
SORT emailTasks ASC
```

```dataview
TASK
FROM "Journal/Daily"
	WHERE contains(text, "❗") OR (status = "!")
	AND !contains(text, "✉️")
	AND !completed
SORT urgentTasks DESC
```

```dataview
TASK
FROM "Journal/Daily"
	WHERE contains(text, "📐")
	AND !contains(text, "❗")
	AND !completed
SORT baselineTasks ASC
```

My question is, can I combine all these queries into a single query that groups the tasks according to whether they contain :exclamation:, :email: or :triangular_ruler:?

So the example above would end up as:

- [ ] ✉️ Email PF re: Meeting list
- [ ] ❗ Brief → EC
- [ ] ❗ New urgent task
- [ ] 📐 Example design task

I cannot tell if you actually want to “group” your tasks (using GROUP BY operator, which would give headings for each group) or just sort by the text. Either way, the substring function might be useful to you to get the first couple of characters in the task’s text.

Topic : The file.lists by example

  • The file.lists by example - Chapter 1: using DQL to gather list items or task items under the specific heading
Summary

Q: How to gather list items or task items under the specific heading?

  • How to gather list items where the heading contains “milestones”? (DQL01)
  • How to gather task items where the heading contains “tasks”? (DQL03)
  • How to gather list items where the heading contains “milestones” and to gather task items where the heading contains “tasks”? (DQL05)
  • How to gather list items where the heading contains “milestones” and to gather task items where the heading contains “tasks” and to groupBy file.link? (DQL07)

Q: How to distinguish list items from task items from the file.lists data?

Answers

  • a list item: !L.task
  • a task item: L.task
  • L : each element of file.lists of each page
  • No one can distinguish a list item from a task item from the value of L.text where L is an element of file.lists .

Q: How to display task items with the checkbox from non-groupBy data by using DQL?

Answers

  • Use DQL TABLE
  • L : each element of file.lists of each page
TABLE WITHOUT ID 
      choice(L.task, "- [" + L.status + "] " + L.text,  "- " + L.text) AS "milestones_or_tasks"

Q: How to display task items with the checkbox from groupBy data by using DQL?

  • Use DQL TABLE
  • L : each element of file.lists of each page;
TABLE WITHOUT ID 
      map(rows.L, (L) => choice(L.task, "- [" + L.status + "] " + L.text,  L.text)) AS "milestones_or_tasks"

Q: How to use FROM source for best performance when using DQL?

  • For best performance, it is recommended that each note is a desired note after using the FROM source because dataview will gather list items or task items into the file.lists data of each note which is FROM source.
    • The DQL expression like FROM source is equal to the DVJS expression like let pages = dv.pages(source);
    • It gathers the following data.
      • The pages array consists of each page hash.
      • The plain page hash from a file is created by the dv.pages(source) function and consists of three hashes : the page.file hash, the YAML fields and the Dataview inline fields.
      • The YAML fields is also stored in the page.file.frontmatter hash.
      • Besides, the key/pair, the page.file.lists and its values, is an element of each page hash.

to modify(M1)

Original Example01: use Folders
FROM "100_Project/02_dataview/Q93_Tasks/Q93_test_data"
Original Example02: use Folders and Tags
FROM "100_Project/02_dataview/Q93_Tasks/Q93_test_data" AND #Project
Original Example03: use Tags
FROM #Project
Original Example04 : Single Files
  • Inline DQL: To get file.path
    path==[[dic_20060301]].file.path
    //=>“100_Project/02_dataview/Q93_Tasks/Q93_test_data/03/dic_20060301.md”
FROM "100_Project/02_dataview/Q93_Tasks/Q93_test_data/03/dic_20060301.md"
Wrong Examples :
  • Performance issues :
    • The following expression means that let pages = dv.pages();
    • It will gather list items or task items into the page.file.lists of each note but many of them are not necessary.
FROM ""

or

FROM "/"

Q: What does the following DQL statement mean?

FLATTEN file.lists AS L
FLATTEN meta(L.header).subpath AS F_subpath
FLATTEN meta(L.header).type AS F_type       

Answers

  • FLATTEN file.lists AS L

    • To break up a list like file.lists in a file into each individual element in a file
    • To define a field variable L as each element of page.file.lists of each note
      • let L = each element of file.lists of each page;
  • FLATTEN meta(L.header).subpath AS F_subpath

    • let F_subpath = meta(L.header).subpath;
  • FLATTEN meta(L.header).type AS F_type

    • let F_type = meta(L.header).type;

Q: How to use F_subpath to filter by the specific heading when using DQL?

Case_01:

  • filename : dic_20060701
---
Date: 2006-07-01
---
#Project/P07

Areas:: #research

## input
### ?what: milestones, tasks!
- 2006-07-01 add this feature_A #Test/d01 [[Note J]] , [[Note K]]
- [ ] 2012-07-11 add this feature_A #Test/d01 [[Note P]] , [[Note Q]]


Answers: Case_01
WHERE contains(F_subpath, "what milestones tasks") AND F_type = "header"

or

WHERE F_subpath = "what milestones tasks" AND F_type = "header"

Case_02:

  • filename : dic_20060801
---
Date: 2006-08-01
---
#Project/P08

Areas:: #research

## input
### what: milestones, tasks!
- 2006-08-01 add this feature_A #Test/d01 [[Note J]] , [[Note K]]
- [ ] 2012-08-11 add this feature_A #Test/d01 [[Note P]] , [[Note Q]]


Answers: Case_02
WHERE contains(F_subpath, "what milestones tasks") AND F_type = "header"

or

WHERE F_subpath = "what milestones tasks" AND F_type = "header"

Case_03:

  • filename : dic_20060901
---
Date: 2006-09-01
---
#Project/P09

Areas:: #research

## input
### what milestones tasks:
- 2006-09-01 add this feature_A #Test/d01 [[Note J]] , [[Note K]]
- [ ] 2012-09-11 add this feature_A #Test/d01 [[Note P]] , [[Note Q]]


Answers: Case_03
WHERE contains(F_subpath, "what milestones tasks") AND F_type = "header"

or

WHERE F_subpath = "what milestones tasks" AND F_type = "header"

Case_04:

  • filename : dic_20061001
---
Date: 2006-10-01
---
#Project/P10

Areas:: #research

## input
### what milestones tasks
- 2006-10-01 add this feature_A #Test/d01 [[Note J]] , [[Note K]]
- [ ] 2012-10-11 add this feature_A #Test/d01 [[Note P]] , [[Note Q]]


Answers: Case_04
WHERE contains(F_subpath, "what milestones tasks") AND F_type = "header"

or

WHERE F_subpath = "what milestones tasks" AND F_type = "header"

Q: How to sort the task items which are classified as “T01”, “T02”, “T03” and “T99”?

  • How to use nested choice?
  • How to define a field variable F_prefix_text as the expression like choice... by using FLATTEN?

Answers

TABLE WITHOUT ID 
      choice(L.task, "- [" + L.status + "] " + L.text,  "- " + L.text) AS "milestones_or_tasks"
FROM "100_Project/02_dataview/Q93_Tasks/Q93_test_data"
FLATTEN file.lists AS L
FLATTEN choice(contains(L.text, "✉️") OR (L.status = ">"), 
               "T01" + L.text,
               choice(contains(L.text, "❗") OR (L.status = "!"),
                      "T02" + L.text,
                      choice(contains(L.text, "📐"), "T03" + L.text, "T99" + L.text))
         ) AS F_prefix_text    
WHERE L.task and !L.completed
WHERE startswith(F_prefix_text, "T01") OR
      startswith(F_prefix_text, "T02") OR
      startswith(F_prefix_text, "T03")
SORT F_prefix_text ASC


Test

Summary
  • dataview: v0.5.41

Input

Summary

dictionary files

  • Location: “100_Project/02_dataview/Q93_Tasks/Q93_test_data”
  • filename : dic_20060301
---
Date: 2006-03-01
---
#Project/P03

Areas:: #research

## input
### input_m:  milestones
- 2006-02-01 add this feature_A #Test/d01 [[Note J]] , [[Note K]]
- 2006-02-02 add this feature_B #Test/d02 [[Note J]]
- 2006-02-03 add this feature_C #Test/d03
- 2006-02-04 add this feature_D #Test/d04
- 2006-02-05 add this feature_E #Test/d05 [[Note K]]
- 2006-02-06 add this feature_F #Test/d06
- 2006-02-07 add this feature_G #Test/d07
- 2006-02-08 add this feature_H 



  • filename : dic_20060401
---
Date: 2006-04-01
---
#Project/P04

Areas:: #mocap

## input
### Requirements
#### input_t: tasks
- [ ] ❗ New urgent task
- [ ] 📐 Example design task
- [ ] ✉️ Email PF re: Meeting list
- [ ] ❗ Brief → EC
- [!] ❗ Brief → EC (to do)
- [>] ✉️ Email PF re: Meeting list (to do)
- [x] It is done



  • filename : dic_20060501
---
Date: 2006-05-01
---
#Project/P05

Areas:: #research

## input
### input_m:  milestones



  • filename : dic_20060601
---
Date: 2006-06-01
---
#Project/P05

Areas:: #mocap

## input
### Requirements
#### input_t: tasks




DQL01_flatten_fLists_and_display_list_items_under_the_heading_milestones

  • To gather list items where the heading contains “milestones”
Summary

Main DQL

Code Name Data type Group By Purposes Remark
DQL01_flatten_fLists
_and_display_list_items
_under_the_heading_milestones
file.lists no 1.To flatten file.lists
2.To gather list items where the heading contains “milestones”
3.To filter by L.text where it contains “feature_A” or “feature_B” or “feature_E”
4.To filter by L.tags where it contains “#Test/d01” or “#Test/d02” or “#Test/d05”
5.To filter by L.outlinks where it contains [[Note J]] or [[Note J]]
6.To display the result as a table [without the desired structure]

Code DQL01_flatten_fLists_and_display_list_items_under_the_heading_milestones

  • To gather list items where the heading contains “milestones”
Summary_code
title: DQL01_flatten_fLists_and_display_list_items_under_the_heading_milestones =>1.To flatten file.lists 2.To gather list items where the heading contains "milestones" 3.To filter by L.text where it contains "feature_A" or "feature_B" or "feature_E" 4.To filter by L.tags where it contains "#Test/d01" or "#Test/d02" or "#Test/d05" 5.To filter by L.outlinks where it contains \[\[Note J\]\] or \[\[Note J\]\] 6.To display the result as a table [without the desired structure]
collapse: close
icon: 
color: 
```dataview
TABLE WITHOUT ID 
      choice(L.task, "- [" + L.status + "] " + L.text,  "- " + L.text) AS "milestones_or_tasks",
      L.task AS "task",
      L.status AS "status",
      L.text AS "text",
      F_subpath AS "F_subpath",
      F_type AS "F_type",
      file.link AS "File"
FROM "100_Project/02_dataview/Q93_Tasks/Q93_test_data"

FLATTEN file.lists AS L
FLATTEN meta(L.header).subpath AS F_subpath
FLATTEN meta(L.header).type AS F_type

WHERE !L.task
WHERE contains(F_subpath, "milestones") AND F_type = "header"
WHERE contains(L.text, "feature_A") OR
      contains(L.text, "feature_B") OR
      contains(L.text, "feature_E")
WHERE contains(L.tags, "#Test/d01") OR
      contains(L.tags, "#Test/d02") OR
      contains(L.tags, "#Test/d05")
WHERE contains(L.outlinks, [[Note J]]) OR
      contains(L.outlinks, [[Note K]]) 
SORT file.name ASC

```

Screenshots(DQL01)


DQL03_flatten_fLists_and_display_task_items_under_the_heading_tasks

  • To gather task items where the heading contains “tasks”
Summary

Main DQL

Code Name Data type Group By Purposes Remark
DQL03_flatten_fLists
_and_display_task_items
_under_the_heading_tasks
file.lists no 1.To flatten file.lists
2.To gather task items where the heading contains “tasks”
3.To filter by L.text where it contains “urgent” or “Email” or “design”
4.To display the result as a table [without the desired structure]

Code DQL03_flatten_fLists_and_display_task_items_under_the_heading_tasks

  • To gather task items where the heading contains “tasks”
Summary_code
title: DQL03_flatten_fLists_and_display_task_items_under_the_heading_tasks =>1.To flatten file.lists 2.To gather task items where the heading contains "tasks" 3.To filter by L.text where it contains "urgent" or "Email" or "design" 4.To display the result as a table [without the desired structure]
collapse: close
icon: 
color: 
```dataview
TABLE WITHOUT ID 
      choice(L.task, "- [" + L.status + "] " + L.text,  "- " + L.text) AS "milestones_or_tasks",
      L.task AS "task",
      L.status AS "status",
      L.text AS "text",
      F_subpath AS "F_subpath",
      F_type AS "F_type",
      file.link AS "File"
FROM "100_Project/02_dataview/Q93_Tasks/Q93_test_data"

FLATTEN file.lists AS L
FLATTEN meta(L.header).subpath AS F_subpath
FLATTEN meta(L.header).type AS F_type

WHERE L.task and !L.completed
WHERE contains(F_subpath, "tasks") AND F_type = "header"
WHERE contains(L.text, "urgent") OR
      contains(L.text, "Email") OR
      contains(L.text, "design")
SORT file.name ASC

```

Screenshots(DQL03)


DQL05_flatten_fLists_and_display_list_items_and_task_items_under_the_heading

  • To gather list items where the heading contains “milestones”
  • To gather task items where the heading contains “tasks”
Summary

Main DQL

Code Name Data type Group By Purposes Remark
DQL05_flatten_fLists
_and_display_list_items
_and_task_items
_under_the_heading
file.lists no 1.To flatten file.lists
2.To gather list items where the heading contains “milestones”
3.To gather task items where the heading contains “tasks”
4.list items: To filter by L.text where it contains “feature_A” or “feature_B” or “feature_E”
5.task items: To filter by L.text where it contains “urgent” or “Email” or “design”
6.To display the result as a table [without the desired structure]

Code DQL05_flatten_fLists_and_display_list_items_and_task_items_under_the_heading

  • To gather list items where the heading contains “milestones”
  • To gather task items where the heading contains “tasks”
Summary_code
title: DQL05_flatten_fLists_and_display_list_items_and_task_items_under_the_heading =>1.To flatten file.lists 2.To gather list items where the heading contains "milestones" 3.To gather task items where the heading contains "tasks" 4.list items: To filter by L.text where it contains "feature_A" or "feature_B" or "feature_E" 5.task items: To filter by L.text where it contains "urgent" or "Email" or "design" 6.To display the result as a table [without the desired structure]
collapse: close
icon: 
color: 
```dataview
TABLE WITHOUT ID 
      choice(L.task, "- [" + L.status + "] " + L.text,  "- " + L.text) AS "milestones_or_tasks",
      L.task AS "task",
      L.status AS "status",
      L.text AS "text",
      F_subpath AS "F_subpath",
      F_type AS "F_type",
      file.link AS "File"
FROM "100_Project/02_dataview/Q93_Tasks/Q93_test_data"

FLATTEN file.lists AS L
FLATTEN meta(L.header).subpath AS F_subpath
FLATTEN meta(L.header).type AS F_type

WHERE !L.task OR (L.task and !L.completed)
WHERE (contains(F_subpath, "milestones") AND F_type = "header")
    OR (contains(F_subpath, "tasks") AND F_type = "header")

WHERE (
       !L.task AND 
           (
            contains(L.text, "feature_A") OR
            contains(L.text, "feature_B") OR
            contains(L.text, "feature_E")
           )
      )
   OR 
      (
       L.task AND
           (
            contains(L.text, "urgent") OR
            contains(L.text, "Email") OR
            contains(L.text, "design")
           )
      )
SORT file.name ASC

```

Screenshots(DQL05)


DQL07_flatten_fLists_groupBy_fLink_and_display_list_items_and_task_items_under_the_heading

  • To gather list items where the heading contains “milestones”
  • To gather task items where the heading contains “tasks”
  • To group by file.link and let G_file_link = rows.file.link;
  • To sort by G_file_link in descending order
Summary

Main DQL

Code Name Data type Group By Purposes Remark
DQL07_flatten_fLists
_groupBy_fLink
_and_display_list_items
_and_task_items
_under_the_heading
file.lists yes 1.To flatten file.lists
2.To gather list items where the heading contains “milestones”
3.To gather task items where the heading contains “tasks”
4.list items: To filter by L.text where it contains “feature_A” or “feature_B” or “feature_E”
5.task items: To filter by L.text where it contains “urgent” or “Email” or “design”
6.To group by file.link and let G_file_link = rows.file.link;
7.To sort by G_file_link in descending order
8.To display the result as a table [without the desired structure]

Code DQL07_flatten_fLists_groupBy_fLink_and_display_list_items_and_task_items_under_the_heading

  • To gather list items where the heading contains “milestones”
  • To gather task items where the heading contains “tasks”
  • To group by file.link and let G_file_link = rows.file.link;
  • To sort by G_file_link in descending order
Summary_code
title: DQL07_flatten_fLists_groupBy_fLink_and_display_list_items_and_task_items_under_the_heading =>1.To flatten file.lists 2.To gather list items where the heading contains "milestones" 3.To gather task items where the heading contains "tasks" 4.list items: To filter by L.text where it contains "feature_A" or "feature_B" or "feature_E" 5.task items: To filter by L.text where it contains "urgent" or "Email" or "design" 6.To group by file.link and `let G_file_link = rows.file.link;` 7.To sort by G_file_link in descending order 8.To display the result as a table [without the desired structure]
collapse: close
icon: 
color: 
```dataview
TABLE WITHOUT ID 
      map(rows.L, (L) => choice(L.task, "- [" + L.status + "] " + L.text,  L.text)) AS "milestones_or_tasks",
      rows.L.task AS "task",
      rows.L.status AS "status",
      rows.F_subpath AS "GF_subpath",
      rows.F_type AS "GF_type",
      length(rows) AS "QTY",
      G_file_link AS "File"
FROM "100_Project/02_dataview/Q93_Tasks/Q93_test_data"

FLATTEN file.lists AS L
FLATTEN meta(L.header).subpath AS F_subpath
FLATTEN meta(L.header).type AS F_type

WHERE !L.task OR (L.task and !L.completed)
WHERE (contains(F_subpath, "milestones") AND F_type = "header")
    OR (contains(F_subpath, "tasks") AND F_type = "header")

WHERE (
       !L.task AND 
           (
            contains(L.text, "feature_A") OR
            contains(L.text, "feature_B") OR
            contains(L.text, "feature_E")
           )
      )
   OR 
      (
       L.task AND
           (
            contains(L.text, "urgent") OR
            contains(L.text, "Email") OR
            contains(L.text, "design")
           )
      )
SORT file.name ASC
GROUP BY file.link AS G_file_link
SORT G_file_link DESC

```

Screenshots(DQL07)


DQL10_flatten_fLists_and_display_uncompleted_tasks

Summary

Main DQL

Code Name Data type Group By Purposes Remark
DQL10_flatten_fLists
_and_display_uncompleted_tasks
file.lists no 1.To filter by task items
2.To filter by uncompleted task items
3.To filter by F_prefix_text where it starts with “T01” or “T02” or “T03”
4.To sort by F_prefix_text in ascending order
5.To display the result as a table [without the desired structure]

Code DQL10_flatten_fLists_and_display_uncompleted_tasks

Summary_code
title: DQL10_flatten_fLists_and_display_uncompleted_tasks =>1.To filter by task items 2.To filter by uncompleted task items 3.To filter by F_prefix_text where it starts with "T01" or "T02" or "T03" 4.To sort by F_prefix_text in ascending order 5.To display the result as a table [without the desired structure]
collapse: close
icon: 
color: 
```dataview
TABLE WITHOUT ID 
      choice(L.task, "- [" + L.status + "] " + L.text,  "- " + L.text) AS "milestones_or_tasks",
      F_prefix_text AS "F_prefix_text",
      L.status AS "status",
      L.text AS "text",
      F_subpath AS "F_subpath",
      F_type AS "F_type"
FROM "100_Project/02_dataview/Q93_Tasks/Q93_test_data"

FLATTEN file.lists AS L
FLATTEN meta(L.header).subpath AS F_subpath
FLATTEN meta(L.header).type AS F_type
FLATTEN choice(contains(L.text, "✉️") OR (L.status = ">"), 
               "T01" + L.text,
               choice(contains(L.text, "❗") OR (L.status = "!"),
                      "T02" + L.text,
                      choice(contains(L.text, "📐"), "T03" + L.text, "T99" + L.text))
         ) AS F_prefix_text


WHERE L.task and !L.completed
WHERE startswith(F_prefix_text, "T01") OR
      startswith(F_prefix_text, "T02") OR
      startswith(F_prefix_text, "T03")
SORT F_prefix_text ASC

```

Screenshots(DQL10)


DQL20_use_fTasks_and_display_uncompleted_tasks

Summary

Main DQL

Code Name Data type Group By Purposes Remark
DQL20_use_fTasks
_and_display_uncompleted_tasks
flattened file.tasks no 1.To filter by a task
2.To filter by a uncompleted task
3.To filter by F_prefix_text where it starts with “T01” or “T02” or “T03”
4.To sort by F_prefix_text in ascending order
5.To display the result as a taskList [with the desired structure]

Notes

Summary

Q: What does the following DQL statement mean?

WHERE !completed
FLATTEN choice(contains(text, "✉️") OR (status = ">"), 
               "T01" + text,
               choice(contains(text, "❗") OR (status = "!"),
                      "T02" + text,
                      choice(contains(text, "📐"), "T03" + text, "T99" + text))
         ) AS F_prefix_text
SORT F_prefix_text ASC         

A1: In English
For each uncompleted task :

case_T01: If contains(text, “:email:”) OR (status = “>”), let F_prefix_text = “T01” + text;
case_T02: If contains(text, “:exclamation:”) OR (status = “!”), let F_prefix_text = “T02” + text;
case_T03: If contains(text, “:triangular_ruler:”), let F_prefix_text = “T03” + text;
case_T99: Otherwise, let F_prefix_text = “T99” + text;

Sort it by the F_prefix_text in ascending order

After sorting it by the F_prefix_text in ascending order :

  • Each task of case_T01 is in front of each task of case_T02 because “T01” is in front of “T02”.
    • “T01” is the prefix of each F_prefix_text of case_T01
    • “T02” is the prefix of each F_prefix_text of case_T02
  • Each task of case_T02 is in front of each task of case_T03 because “T02” is in front of “T03”.
    • “T02” is the prefix of each F_prefix_text of case_T02
    • “T03” is the prefix of each F_prefix_text of case_T03
A2: Screenshots(DQL20_notes)
case_T01

case_T02

case_T03

case_T01 or case_T02 or case_T03

Sort it by the F_prefix_text in ascending order


Code DQL20_use_fTasks_and_display_uncompleted_tasks

Summary_code
title: DQL20_use_fTasks_and_display_uncompleted_tasks =>1.To filter by a task 2.To filter by a uncompleted task 3.To filter by F_prefix_text where it starts with "T01" or "T02" or "T03" 4.To sort by F_prefix_text in ascending order 5.To display the result as a taskList [with the desired structure]
collapse: close
icon: 
color: 
```dataview
TASK
FROM "100_Project/02_dataview/Q93_Tasks/Q93_test_data"
WHERE !completed

FLATTEN choice(contains(text, "✉️") OR (status = ">"), 
               "T01" + text,
               choice(contains(text, "❗") OR (status = "!"),
                      "T02" + text,
                      choice(contains(text, "📐"), "T03" + text, "T99" + text))
         ) AS F_prefix_text

WHERE startswith(F_prefix_text, "T01") OR
      startswith(F_prefix_text, "T02") OR
      startswith(F_prefix_text, "T03")
SORT F_prefix_text ASC

```

Screenshots(DQL20)


Related resources

Summary

Thank you very much! That last part – ‘Use fTasks and display uncompleted tasks’ – did the trick.

Lots here I don’t understand (such as what FLATTEN is used for, how functions are ordered, the intricacies of the syntax) but the parts I can follow make perfect sense and the whole thing seems to work just as I’d hoped.

Thanks again!

Here FLATTEN is being used to give a name to the intermediate computation of the prefix. This is a use of FLATTEN that I learned from @mnvwvnm who can probably explain it better.

choice(expression-to-test, output-if-test-is-true, output-if-test-is-false) statements can be nested with another choice in the last argument spot as they are here to get a “is it A? No, ok then is it B? No, ok then is it C?” type of decision branching.

Is anything else confusing? I or others would be happy to explain!

Oh, anytime!

Remember to update the following code and look at the Notes.


  • DQL10_flatten_fLists_and_display_uncompleted_tasks
    • 2022-08-29 updated
  • DQL20_use_fTasks_and_display_uncompleted_tasks:
    • 2022-08-29 updated DQL and added Notes
  • DQL01, DQL03, DQL05 and DQL07
    • 2022-09-02 added DQL

This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.